matlab笔记:一元微分方程求解

为什么要在这里写这东西。。还不是怕自己忘了。。


主要是ode45的用法。。这个函数用来解决微分方程组

先上代码

tspan=[1:0.01:10];
X0=[0;15];
delta=@(x,y) [y(2);-29*y(1)-4*y(2)];
[T,X]=ode45(delta,tspan,X0);
plot(T,X(:,1));
plot(T,X(:,2));

先声明一点,y(1)表示原函数,y(2)才表示导数,y(3)表示二阶导。。以此类推

然后解释一下代码。。

第一行就是定义一个函数规则(叫function handle?有兴趣以后了解一下),感觉就是类似于c++里面的虚函数吧,仅仅是为了传参而生。。

他这个函数就是返回一个列向量,内容可以自己定义

在被ode45调用时,这个列向量delta代表的含义是

y(2)=delta(1)

y(3)=delta(2)

y(4)=delta(3)

.....


有时候我们对一些导数是没什么需求的,例如上例只有一个微分方程,所以只表示成了y(3)=xxx的形式。。

而对y(2)的方程已经是形式上的存在,令y(2)=y(2)该方程就废了。。


说说再ode45的返回值和参数。。

第一个参数代表函数名,也可以是定义了函数的文件名,不过为了定义一个函数专门写个文件感觉没什么必要就是。

第二个参数是一个行向量,可以算是定义域了吧,就是在求解微分方程自变量的取值范围

第三个参数是一个列向量,表示初值,就是x=tspan(1)时各函数值取值为多少什么的。。

然后就是返回值,第一个返回值就是tspan'

第二个返回值是一个矩阵

X(i,j)表示x取T(i)时的j阶导数

所以可以看出ode45并没有真正求解微分方程,他只是把特定点(给定的tspan)的导数值求出来而已。。

不过只要tspan各数间距够小,就能用plot画出图像。。对求解问题也是非常有帮助。。

你可能感兴趣的:(数学建模)