这次要接触一个新的求解ode的方法,就是使用simulink的积分器求解。
1.还是做我们研究过的一个例子(在初识matlab微分方程(2)中采用的)。
Dx=y+x(1-x^2-y^2);
Dy=-x+y*(1-x^2-y^2)
初值x=0.1;y=0.2;
积分器中设置初始条件;f(u)中指定Dx,Dy的计算公式。
运行这个仿真,scope中可以看到两个变量的时程如下:
在WorkSpace里可以得到tout和yout,执行plot(yout(:,1),yout(:,1))得到与ode45求解相似的结果如下
2.这部分解决一个使用ode求解器dde23没法求解的一类延迟微分方程(中性微分方程)。
形如x'(t)=f(x'(t-t1),x(t),x(t-t2),x(t-t3))这类方程。dde23是无法求解的,但是可以借助simulink仿真求解。
看下面的这个例子。
x'(t)=A1*x(t-t1)+A2*x'(t-t2)+B*u(t)
t1=0.15;t2=0.5
A1=[-12 3 -3] A2=[0.02 0 0] B=[0]
[106 -116 62] [0 0.03 0] [1]
[207 -207 113] [0 0 0.04] [2]
在continuous里找到transport Delay,就可以实现对于信号的延迟,因此可以建立如下仿真模型
从而在scope中可以得到如下仿真结果
OK~初识微分方程到了这里我想应该可以做个终结,因为我想作为零基础的材料来看,到这里也就可以了。以后还可能再有微分方程的内容,还请感兴趣的朋友多捧场吧。
最后,大力推荐一本书薛定宇老师的《高等应用数学问题的Matlab求解》,确实很经典。学习Matlab的时间也不算短了,可是每次翻看这本书总是能让我有温故而知新的感觉,是我目前见过的最好的Matlab书。强烈推荐!(对于从来没有接触过matlab的人来说或许有点儿难,但是如果你以后要用matlab的话买一本绝对不会后悔的。)