Matlab 7.0 新特性

  • 20th 五月 2005, 114 views
MATLAB R14最新版本信息


MATLAB 7


MATLAB 提供了高级科学计算语言,是进行数据分析算法开发的集成开发环境。 MATLAB 7 针对编程环境、代码效率、数据可视化、数学计算、文件 I/O 等方面进行升级,其中包括:

开发环境


   * 重新设计的桌面环境,针对多文档界面应用提供了简便的管理和访问方法,允许用户自定义桌面外观,创建常用命令的快捷方式;

   * 增强数组编辑器 (Array Editor) 和工作空间浏览器 (Workspace Brower) 功能,用于数据的显示、编辑和处理;

   * 在当前目录浏览器 (Current Directory Browser) 工具中,增加代码效率分析、覆盖度分析等功能;

   * M-Lint 编码分析,辅助用户完成程序性能分析,提高程序执行效率;

   * 增强 M 文件编辑器 (M-Editor) ,支持多种格式源代码文件可视化编辑,例如 C/C++ 、 HTML 、 Java 等。

编程


   * 支持创建嵌套函数 (Nested Function) ,提供更灵活的代码模块化方式;

   * 匿名函数 (Anonymous Function) 功能,支持在命令行或者脚本文件中创建单行函数 (Single Line Function) ;

   * 支持条件分支断点,可以在条件分支语句中进行程序中断调试;

   * 模块化注释,支持为代码段注释。

数学


   * 支持整数算术运算;

   * 支持单精度数据类型运算,包括基本算术运算、线性代数、 FFT 等;

   * 使用更强大的计算算法包 Qhull 2002.1 ,提供更丰富的算法支持;

   * linsove 函数用于处理线性代数方程求解

   * ODE 求解器能够处理隐性微分方程组以及多点边界问题;

图形和 3-D 可视化


   * 新图形窗体界面;

   * 直接从图形窗体生成 M 代码,可以完成用户自定义绘图;

   * 增强图形窗体注释;

   * 数据侦测工具 (Data Exploration Tools) ,提供丰富的数据观测手段;

   * 自定义图形对象,提供丰富的图形显示能力;

   * GUIDE 新增对用户界面面板和 ActiveX 控件支持;

   * 增强句柄图形对象支持完整地 TeX 和 LaTeX 字符集;

文件 I/O 和外部接口


   * 新增文件 I/O 函数,支持读取任意格式文本数据文件,并且支持写入 Excel 和 HDF5 格式数据文件;

   * 具有压缩功能的 MAT 文件格式,支持 快速数据 文件 IO 能力;

   * javaaddpath 函数,无需重新启动 MATLAB 完成 Java 类的加载、删除等功能;

   * 支持 COM 、服务器事件以及 VBS ;

   * 支持 SOAP ,使用网络服务;

   * FTP 对象,直接访问 FTP 服务器;

   * 支持 Unicode 编码格式,增强 MAT 文件字符集;


 性能与系统平台支持


   * JIT 加速器支持所有数值数据类型;

   * Windows XP 系统下支持 3GB 内存访问;



Simulink6

Simulink 是交互式动态系统建模、仿真和分析的图形环境,是进行基于模型的嵌入式系统开发的基础开发环境。可以针对控制系统、信号处理以及通讯系统等进行系统的建模、仿真、分析等工作。 Simulink 6 改善性能,并且针对大规模系统开发进行了性能优化。


 系统建模


   * 支持将大系统模型分割为不同的文件,每个文件为独立的系统模型;

   * 支持系统不同模型文件独立仿真测试

   * 增强系统集成手段,支持配置管理和版本控制软件;

   * 递增式模型加载与代码生成功能;

   * 针对大模型系统提高运行速度和效率;

   * 模型工作空间 (Model Workspace) ,每个模型都用于独立的工作空间用于参数管理和数据处理;

   * 增强总线支持;

Simulink 和 Stateflow


   * 统一的模型浏览器 (Model Explorer) ,用于浏览、维护、配置、搜索、定义所有模型中相关的参数、数据对象和属性;

   * 统一的仿真和代码生成选项;

   * 支持创建并保存多种仿真和代码生成选项;

   * 数据管理和可视化

   * 新增数据对象属性;

   * 可选数据记录增加测试点,无需在模型中增加额外的模块;

   * I/O 管理,可以将必要的信号源和信宿连接到模型而不需要增加模块;


 MATLAB 支持


   * 使用嵌入式 MATLAB(Embedded MATLAB) 功能引入算法并支持 C 代码生成

   * 增强 M 语言 S 函数的支持


具体情况可以查看中文代理商的页面。

GAMS的使用

  • 20th 五月 2005, 53 views
Introduction


  The General Algebraic Modeling System (GAMS) is specifically designed for modeling linear, nonlinear and mixed integer optimization problems. The system is especially useful with large, complex problems. GAMS is available for use on personal computers, workstations, mainframes and supercomputers.


  GAMS allows the user to concentrate on the modeling problem by making the setup simple. The system takes care of the time-consuming details of the specific machine and system software implementation.


  GAMS is especially useful for handling large, complex, one-of-a-kind problems which may require many revisions to establish an accurate model. The system models problems in a highly compact and natural way. The user can change the formulation quickly and easily, can change from one solver to another, and can even convert from linear to nonlinear with little trouble.

System Features


GAMS lets the user concentrate on modeling. By eliminating the need to think about purely technical machine-specific problems such as address calculations, storage assignments, subroutine linkage, and input-output and flow control, GAMS increases the time available for conceptualizing and running the model, and analyzing the results. GAMS structures good modeling habits itself by requiring concise and exact specification of entities and relationships. The GAMS language is formally similar to commonly used programming languages. It is therefore familiar to anyone with programming experience.

Using GAMS, data are entered only once in familiar list and table form. Models are described in concise algebraic statements which are easy for both humans and machines to read. Whole sets of closely related constraints are entered in one statement. GAMS automatically generates each constraint equation, and lets the user make exceptions in cases where generality is not desired. Statements in models can be reused without having to change the algebra when other instances of the same or related problems arise. The location and type of errors are pinpointed before a solution is attempted. GAMS handles dynamic models involving time sequences, lags and leads and treatment of temporal endpoints.


GAMS is flexible and powerful. Models are fully portable from one computer platform to another when GAMS is loaded to each platform. GAMS facilitates sensitivity analysis. The user can easily program a model to solve for different values of an element and then generate an output report listing the solution characteristics for each case. Models can be developed and documented simultaneously because GAMS allows the user to include explanatory text as part of the definition of any symbol or equation.

Supported model types


GAMS model types include LP, MIP and different forms of NLPs. Here is a list of all model types that GAMS supports.



LP      Linear Programming

MIP     Mixed-Integer Programming

NLP     Non-Linear Programming

MCP    Mixed Complementarity Problems

MPEC   Mathematical Programs with Equilibrium Constraints

CNS    Constrained Nonlinear Systems

DNLP   Non-Linear Programming with Discontinuous Derivatives

MINLP   Mixed-Integer Non-Linear Programming

QCP    Quadratically Constrained Programs

MIQCP   Mixed Integer Quadratically Constrained Programs





 

五一期间

  • 17th 五月 2005, 59 views
 





 
520

Hibernate下的主键生成机制

  • 17th 五月 2005, 40 views
Key Generator详尽解释


主键产生器的可选项说明:

1) Assigned


     主键由外部程序负责生成,无需Hibernate参与。

2) hilo


     通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

3) seqhilo


     与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。

4) increment


     主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。


     这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。

5) identity


      采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。

6) sequence


      采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。

7) native


      由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。

8) uuid.hex


      由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。

9) uuid.string


      与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)。

10) foreign


      使用外部表的字段作为主键。


     一般而言,利用uuid.hex式生成主键将提供最好的性能和数据库平台适应性。


     另外由于常用的数据库,如Oracle、DB2、SQLServer、MySql 等,都提供了易用的主键生成机制(Auto-Increase 字段或者Sequence)。我们可以在数据库提供的主键生成机制上,采用generator-class=native的主键生成方式。不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,大量并发insert数据时可能会引起表之间的互锁。


     数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生了较大影响。

      

     因此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。


     如果需要采用定制的主键产生算法,则在此处配置主键生成器,主键生成器必须实现           

                      net.sf.hibernate.id.IdentifierGenerator

     接口。

I will

  • 16th 五月 2005, 39 views
Mother Teresa’s Saying


I Will do More than belong……I Will participate.        我不但要归主,而且要尊行-我要参与事奉。


I Will do More than believe……I Will practice.           我不但要信仰,而且要实践-我要身体力行。


I Will do More than forgive……I Will forget.              我不但要宽恕,而且要爱人-我要忘却得失。


I Will do More than teach……I Will inspire.               我不但要言传,而且要身教-我要感化众人。


I Will do More than care……I Will help.                    我不但要关怀,而且要挽救-我要助人为乐。


I Will do More than dream……I Will work.                我不但要梦想,而且要实干-我要广施善行。


I Will do More than give……I Will serve.                   我不但要施予,而且要效力-我要服务终生。




   



  



  



  



  



  



  

[Eclipse下的Hibernate开发by Lenciel] 2.第一个Hibernate程序 之一

  • 15th 五月 2005, 74 views
第一个Hibernate程序还要“之一”?  
    
     Hibernate是用来实现ORM的。应该说ORM一直是讨论得热火朝天的技术,因为实际开发中持久化方面的内容是相当重要的,所以ORM的实现也有很多。Hibernate之所以最被推崇,除开它的血统之外,灵活性也是一大原因。

     ORM中的O-object,是指POJO,全称是Pure Old Java Object 或者 Plain Ordinary Java Object 或者 Pussy Of Jennifer Oasca,我的意思是它叫什么名字并不重要。之所以说它是纯的,是指它完全是一个数据对象的集合,没有含有任何与操作相关的代码。用new创建,由GC回收。
     
     ORM中的R-relation,是指关系数据库中的表,在我的例子中就是MySQL数据库中的表,一个表就表示了一个关系。

     ORM中的M-mapping files,是指我们的hbm文件和cfg文件。这些文件定义了OR之间的Mapping方式。
 
     在使用Hibernate时,作为开发者,建立O、R、M三个部分的顺序是怎样的呢?实际上,ORM中任意得到一个,我们都可以生成其他两个。这就是Hibernate的灵活性的一个很好的体现。在下面的例子中,会针对三种不同的顺序来给出三个解决方案。这就是第一个Hibernae程序还有“之一”的原因。

     首先按照数据库已经存在时的开发顺序:R-O-M

1.建立工程

      new-project-Java project

     工程名定为HibernateSample1_1,再点“next”


     选择“Libraries”


     选择“User Libraries”


     选择“hibernate”,这个工程中我们要用到的自定义库,然后点“Finish”


     这样,第一个项目就建立起来了。

2.根据现有的数据库编写POJO

    假设现在在MySQL数据库中有叫做User_Table的表。当然这个需要我们去建立。

    它的属性分别有:user_id,name,sex,age。 生成它的脚本如下:




CREATE TABLE USER (
   user_id CHAR(32) NOT NULL PRIMARY KEY,
   name VARCHAR(16) NOT NULL,
   sex CHAR(1),
   age INT
);



     那么我们编写的POJO为一个叫做User的类:



package lenciel.hibernate.model

public class User {
   private String id;
   private String name;
   private char sex;
   private int age;

   public int getAge() {
       return age;
   }

   public String getId() {
       return id;
   }

   public String getName() {
       return name;
   }

   public char getSex() {
       return sex;
   }

   public void setAge(int i) {
       age = i;
   }

   public void setId(String string) {
       id = string;
   }

   public void setName(String string) {
       name = string;
   }

   public void setSex(char c) {
       sex = c;
   }
}



    这个类没有什么特别的地方,其中的id是我们需要注意的地方。Hibernate使用这个属性来进行主键识别,id的生成方式需要我们定义,可以看看这里。我们可以在匹配文件中进行这方面的定义,下面就是User类对应的XML格式的匹配文件User.hbm.xml




<?xml version=”1.0″?>
<!DOCTYPE hibernate-mapping
  PUBLIC “-//Hibernate/Hibernate Mapping DTD//EN”   “http://hibernate.sourceforge.net/
      hibernate-mapping-2.0.dtd”>

<hibernate-mapping>

   <class name=” lenciel.hibernate.model.User” table=”USER”>

       <id name=”id” type=”string” unsaved-value=”null”>
           <column name=”user_id” sql-type=”char(32)” />
           <generator class=”uuid.hex”/>
       </id>

       <property name=”name” type=”string” not-null=”true”>
           <column name=”name” length=”16″ not-null=”true”/>
       </property>

       <property name=”sex” type=”char”/>

       <property name=”age” type=”int”/>

   </class>

</hibernate-mapping>



     我们看到,在class标签内,我们首先定义的是User这POJO类与数据库中的关系(二维表)的对应:


<class name=” lenciel.hibernate.model.User”   table=”USER”>



     接着是使用id标签对主键的生成方式和一系列的属性进行定义。

     uuid.hex算法用的是IP地址,系统时间,JVM启动时间和一个计数值来生成主键。常用的还有increment等。一般在数据库中,都有辅助的主键生成方法,比如自增长字段等,因此Hibernate也允许使用“native”算法,也就是采用数据库自己的方式去生成和维护主键。但是由于这种方法在网络中有大量造成数据库insert操作的请求并发的时候并不太好(容易出现互锁),因此uuid.hex算法据说是最好的。当然,我们学习时,可以把Hibernate提供的算法都玩一玩。

     unsaved-value也是id属性的定义中一个值得注意的地方。这个值用来为Hibernate的非显式保存服务。这个后面会仔细分析到。简单的说,在程序中调用save(),update()等方法的时候,就显式的保存了数据。而在有的情况下,典型的比如级联的情况,在关系中一方做了保存,级联的另一方也保存,这个时候的保存就是隐式的。Hibernate通过unsaved-value这个属性值来判断对象是否进行了保存。

     <property>标签用来定义POJO中的一般属性。当中的<column>标签用来定义和数据库的属性(列)的对应。对于我们手动生成POJO和数据库的情况而言,可以只定义<property name=”sex”/>,其他的属性主要是用来和我们后面要讲到的一些自动生成工具配合的。

     接下來我们定义Hibernate配置文件,主要是进行SessionFactory配置,Hibernate可以使用XML或属性文件來进行配置,其中XML比较灵活清晰,也是Hibernate推荐的配置方式,具体如下:





<?xml version=’1.0′ encoding=’GBK’?>
<!DOCTYPE hibernate-configuration
   PUBLIC “-//Hibernate/Hibernate Configuration DTD//EN”
   ”http://hibernate.sourceforge.net/
    hibernate-configuration-2.0.dtd”>
<hibernate-configuration>  
   <session-factory>
       <!– 是否将运行期生成的SQL输出到日志以供调试 –>
       <property name=”show_sql”>true</property>
 
       <!– SQL方言,这里设定的是MySQL –>
       <property name=”dialect”>
       net.sf.hibernate.dialect.MySQLDialect
       </property>
 
       <!– JDBC驱动程序 –>
       <property name=”connection.driver_class”>
       com.mysql.jdbc.Driver
       </property>
 
       <!– JDBC URL, “?useUnicode=true&amp;characterEncoding=GBK”
       表示使用GBK进行编码 –>
       <property name=”connection.url”>
          jdbc:mysql://localhost:3306/HibernateTest?
            useUnicode=true&amp;characterEncoding=GBK
       </property>
 
       <!– 数据库用户名 –>
       <property name=”connection.username”>root</property>
 
       <!– 数据库密码 –>
       <property name=”connection.password”>pft</property>
       <!– 指定User的映射文件 –>
       <mapping resource=”lenciel/hibernate/model/User.hbm.xml”/>       
   </session-factory>
</hibernate-configuration>



     接下来我们写一个Test类。你可以看到,Hibernate帮助我们使用Java编程中熟悉的面向对象的方式来处理数据库中的数据:




import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;

public class Test {
   public static void main(String[] args) throws HibernateException {
       SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

       User user = new User();
       user.setName(“lenciel”);
       user.setSex(‘M’);
       user.setAge(23);

       Session session = sessionFactory.openSession();
       Transaction tx= session.beginTransaction();
       session.save(user);
       tx.commit();
       session.close();
       sessionFactory.close();

       System.out.println(“第一次操作完成了!”);
   }
}



    打开MySQL Browser我们可以就可以看到数据库中多了一条记录了。下面先说一下Test中展现的Hibernate的一些核心接口。

Configuration

   它负责管理Hibernate的配置信息,主要是面向数据库的一些底层实现的基本信息:
                         URL
                         用户
                         密码
                         JDBC驱动类
                         方言dialect

   我们必须在配置文件(hibernate.cfg.xml或者hibernate.properties)中定义好这些信息,当程序运行到:



SessionFactory sessionFactory =
 new Configuration().configure()…



   Hibernate会自动在当前的CLASSPATH中搜索配置文件,完成基础配置。然后这个类一般会被用来生成SessionFactory,之后就无用了。

SessionFactory

    它负责建立Session实例。如前面所说,我们可以通过Configuration来构建SessionFactory:



SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();



SessionFactory一旦构建完毕,就有了自己的配置信息。这时再变动config不会影响到它的实例。如果确实需要改变的话只能重新建立。SessionFactory一般就是对应一个对数据库的,我们的程序中有一个数据库的话,一般只要一个SessionFactory就可以了。

Session

    Session是Hibernate中我们大量操作的东西,因为实际上它就对应JDBC中的Connection。我们可以通过对它的save、update、load等方法完成对数据库的操作。

Transaction

     一个Transaction就是一个事务,这个概念在数据库中是比较基础的。我们对数据库的要求有ACID指标,其中A代表原子性。原子性是指:一组对数据库的操作要么全部发生,要么全部不发生。这个和网络传输中的报文完整性要求比较像。

     要保证原子性,我们定义数据库操作必须是以Transaction也就是事务为单位的:一个事务就是一组操作的集合,它的结果只有两种,要么是正常提交(commit),要么是出错回滚(rollback)。
     
     MySQL好像比较新的版本才刚刚支持事务的概念。

@