通过下面这个例子了解模型的数学特性的内容
model FirstOrderInitial "First order equation with initial value" Real x "State variable"; _iti_parameter Real a=0 "Parameter"; initial equation x = a "Used before simulation to compute initial values"; equation der(x) = 1-x "Drives value of x toward 1.0"; annotation(experiment(StopTime=10,StartTime=0)); end FirstOrderInitial;这段代码以关键词model 开始,以表明模型定义的开始,后面紧跟着模型的名字 ,最后一end结尾结束模型的定义
模型名字后面引号中的文字是模型的说明。理解这些引号中的文字模块非常重要,它们在计算机科学中被称为“字符串”,而不是注释,这些“描述性字符串”不像注释,不能在任意的地方插入。相反的,它们只能在特定的地方插入,以提供与其关联的模型元素的附加说明。 例如,第一个字符串“Cooling example with physical types” 用来描述模型的属性。 可以注意到,它紧跟在模型名字后面。当希望对模型做相应的注释,文档语句必须插入在模型名字的后面。 这种文档可以被很多工具所使用。例如,搜索模型时,搜索工具可以利用这些描述性的字符串进行识别匹配。 这些文本也可以与模型的图示相关联。当然,这种文档对阅读模型的任何人都很有帮助。 这些描述性的文本也可以放置在模型的其他位置。比如,在变量声明或方程后面添加相应的文档。
接着定义方程中的变量x和参数a。因为变量x是一个连续的实数,在modelica语言中可以用Real x;语句来声明它;Real 类型只是众多数据类型的一种,其还有很多中数据类型。 参数a是模型的内部参数,用来定义变量x的初始值,方便在外面修改模型的初始值,提高模型的通用性,可以用_iti_parameter Real a=0 ;语句进行声明,
接着使用initial equation添加相应的方程,可以明确变量x的初始声明。如果没有该部分,变量x 的初始值在模型仿真开始时是不确定的。通常,这意味着变量x 的初始值是它的start 属性(其缺省值为零)。然而,每个工具都会使用自己特定的算法对最终的方程组进行表示。因此最好明确的声明方程的初始化条件,就像上述模型声明的那样。
当完成上述内容后,就可以编写描述模型特性的方程了。在这个例子中,可以用运算符der 来表示变量x 的一阶导数
der(x) = 1-x其表示的意义是: f ′ ( x ) = 1 − x f'(x)=1-x f′(x)=1−x 不同于大多数的编程语言,我们并不像运行“程序”那样将代码解析成逐条执行的指令。相反,使用Modelica 编译器将代码转换成可以仿真的模型。这种仿真的过程基本上等同于求解方程(通常用数值方法)并获取其解的轨迹的过程。
当搭建模型时,建模人员可能希望为模型关联特定的试验条件。这可以通过应用annotation(标注)来完成。标注中包含的信息与模型的属性没有直接联系。 例如,试验条件的描述包括仿真开始时间、结束时间以及容差范围等,这些信息并不描述模型的特性,只是提供进行模拟仿真的条件。试验条件通过特定的experiment 标注保存在模型中。
将初始值a分别设为0和2得到的结果如下图所示:
