大家在各类工程或者科学研究场景中经常会遇到需要对常微分方程进行仿真的场景,而我们一般用Matlab的simulink功能模块去搭建方程的模型,但使用Matlab软件的成本还是较高的,本文将解答如在IAuto中快速的进行常微分方程模型仿真,以如下微分方程为例进行说明:
上述为一个二阶常微分方程,其中初始值y'(0)=0,y(0)=2;
在IAuto中有两种方式可以绘制常微分方程的仿真曲线,第一种为数学曲线编辑器中的表达式脚本,第二种通过流程编辑器中仿真节点的关系来搭建(类似simulink那样搭建流程关系);本文将教大家在IAuto用第一种方式对该数学模型进行仿真;
第一步:打开IAuto软件后新建一个.iax文件,新增一个空白的数学曲线编辑器,并将.iax文件保存在桌面;
第二步:将仿真模型的框架代码复制并粘贴在表达式脚本输入框中(注意这个框架代码适用于所有的常微分方程的仿真):
let dx = 10/500;//定义图表中点的t轴间距,t轴范围值除以点数
let n = 10000;
let dxn = dx/n;//定义运算步长
if(x==0){//当时间为0时定义初始值
IA.y = 2;
IA.y1 = 0;
}else{
for(let i=1;i<=n;i ){
let t = x-dx i*dxn;
//核心方程代码
}
}
IA.y;
第三步:在该图例的更多设置中将变量x的取值范围设置为[0,10],点数设置为500;
第四步:在完成上面三步后就可以编写微分方程的表达式脚本,首先将y的最高阶项系数变为1换算得到:
然后在第二步的核心代码区域中添加该微分方程写成表达式脚本:
IA.y2 = 0.25*(3*IA.y - 2*IA.y*IA.y)*IA.y1-IA.y//其中IA.y2、IA.y1、IA.y为自定义全局变量
第五步:对第四步的y''(对应的表达式脚本中全局变量IA.y2)进行积分得到y'(对应于全局变量IA.y1),如下:
IA.y1 = IA.y2*dxn;//表达式脚本积分很简单只需要累加其导数与运算增量的乘积
第六步:对第五步的y'(对应的表达式脚本中全局变量IA.y)进行积分得到y(对应于全局变量IA.y),如下:
IA.y = IA.y1*dxn;//表达式脚本积分很简单只需要累加其导数与运算增量的乘积
第七步:将这三行核心代码放入第二步的核心代码区域后,点击“绘图”按钮;
let dx = 10/500;//定义图表中点的t轴间距,t轴范围值除以点数
let n = 10000;
let dxn = dx/n;//定义运算步长
if(x==0){//当时间为0时定义初始值
IA.y = 2;
IA.y1 = 0;
}else{
for(let i=1;i<=n;i ){
let t = x-dx i*dxn;
//核心方程代码
IA.y2 = 0.25*(3*IA.y - 2*IA.y*IA.y)*IA.y1-IA.y//其中IA.y2、IA.y1、IA.y为自定义全局变量
IA.y1 = IA.y2*dxn;//表达式脚本积分很简单只需要累加其导数与运算增量的乘积
IA.y = IA.y1*dxn;//表达式脚本积分很简单只需要累加其导数与运算增量的乘积
}
}
IA.y;
如下图所示,就得到这个常微分方程y=f(x)的数据关系仿真曲线;
是不是非常简单,因为第二步中为框架代码,其核心代码就三行,如果我们要对三阶微分方程(y''')进行仿真,也是一样的道理,注意框架代码用于定义步长、初始值、输出值等;将三阶项用表达式脚本编辑输入后,对其进行三次积分得到y即可;
IA.y3 = 表达式脚本;//
IA.y2 = IA.y3*dxn; //对三阶积分后得到二阶
IA.y1 = IA.y2*dxn; //对二阶积分后得到一阶
IA.y = IA.y1*dxn; //对一阶积分后得到y
这里要注意在x==0时的初始值设定中需要添加IA.y2项;
依次类推对y''''四阶常微分方程的表达式脚本如下:
IA.y4 = 表达式脚本;//
IA.y3 = IA.y4*dxn; //对四阶积分后得到二阶
IA.y2 = IA.y3*dxn; //对三阶积分后得到二阶
IA.y1 = IA.y2*dxn; //对二阶积分后得到一阶
IA.y = IA.y1*dxn; //对一阶积分后得到y
当然,IAuto多功能软件还包含其他三类编辑器(流程编辑器、思维导图编辑器、甘特图编辑器),也可广泛应用基础办公绘图领域;
,