如何利用matlab求解微分方程的表达式

如何利用matlab求解微分方程的表达式,第1张

对于一般的微分方程用matlab的dsolve()函数命令求得其解析值(即函数表达式)。例如
1、求
的解析值。
syms
y(t)
a
dy
=
diff(y);
d2y
=
diff(y,2);
dsolve(d2y
==
-a^2y,
y(0)
==
1,
dy(pi/a)
==
0)
运行结果
y=exp(-at1i)/2
+
exp(at1i)/2
式中li(x)=logint(x)
对数积分
2、求
的解析值。
syms
x(s)
a
x
=
dsolve(diff(x)
==
-ax,
x(0)
==
1)
运行结果
x
=
exp(-as)

如何用matlab求二阶微分方程的图像解。可以按下列方法来求解。

1、自定义二阶微分方程函数,ode_fun(t,y),其格式

function dy=ode_fun(t,y)

dy=[y(2);sin(y(1))/(-002)-004t];

2、利用ode45函数求解[t,y]值

y0=[02,26];

tspan=[0,10];

[t,y]=ode45(@ode_fun,tspan,y0)

3、利用plot函数绘出二阶微分方程的图像解

polt(t,y)

xlabel('t'),ylabel('y(t)','dy/dt');

4、执行结果

如果是常微分方程,可以用dsolve函数。该函数可以解单变量常微分方程或者多变量常微分方程组,所以5个变量也不在话下。调用格式如下:[y1,,yN]=dsolve(eqns)solvesthesystemofordinarydifferentialequationseqnsandassignsthesolutionstothevariablesy1,,yN如果有初始条件,可以把条件一起传给函数来定解:[y1,,yN]=dsolve(eqns,conds)solvesthesystemofordinarydifferentialequationseqnswiththeinitialorboundaryconditionsconds给出一个2个变量的微分方程组求解代码:symsx(t)y(t)z=dsolve(diff(x)==y,diff(y)==-x,x(0)==1,y(0)==1);x=zx,y=zy运行结果为:x=cos(t)+sin(t)y=cos(t)-sin(t)

如何用matlab求解二阶微分方程,对于一般的微分方程(组)可以用dsolve()函数求得其解析解或数值解,对于较复杂的微分方程(组)可以用ode45()函数求得其数值解。

例如:微分方程用dsolve和ode45计算t=01,02时y的值。

y = dsolve('D2y+05Dy+2y =0','Dy(0)=0,y(0)=1')

t=01; y1=eval(y)

t=02; y2=eval(y)

==============================================================

t0=[1;0];tspan=[0,20];

[t1,y1]=ode45(@ ode_fun,tspan,t0);

disp('t      y      dy')

for i=1:3

   t=double(t1(i));y=double(y1(i,1));dy=double(y1(i,2));

   disp([num2str(t),'      ',num2str(y),'      ',num2str(dy)]) 

end

function f = ode_fun(t,y)   %自定义的微分方程函数,文件名,ode_funm

f=[y(2);-05y(2)-2y(1)];

end

==============================================================

运行结果

1可以解析求解的微分方程。
dsolve()
调用格式为:
y=dsolve(f1,f2,,fmO;
y=dsolve(f1,f2,,fm,'x');
如下面的例子,求解了微分方程
syms t;
u=exp(-5t)cos(2t-1)+5;
uu=5diff(u,t,2)+4diff(u,t)+2u;
syms t y;
y=dsolve(['D4y+10D3y+35D2y+50Dy+24y=87exp(-5t)cos(2t-1)+92exp(-5t)sin(2t-1)+10'])
yc=latex(y)
将yc的内容copy到latex中编译,得到结果。
关于Matlab的微分方程,直到今天才更新第2篇,实在是很惭愧的事——因为原因都在于太懒惰,而不是其他的什么。
在上一篇中,我们使用dsolve可以解决一部分能够解析求解的微分方程、微分方程组,但是对于大多数微分方程(组)而言不能得到解析解,这时数值求解也就是没有办法的办法了,好在数值解也有很多的用处。
数值分析方法中讲解了一些Eular法、 Runge-Kutta 法等一些方法,在matlab中内置的ode求解器可以实现不同求解方法的相同格式的调用,而不必太关心matlab究竟是用什么算法完成的。
这一回我们来说明ode45求解器的使用方法。
1ode45求解的上手例子:
求解方程组
Dx=y+x(1-x^2-y^2);
Dy=-x+y(1-x^2-y^2)
初值x=01;y=02;
先说明一下最常用的ode45调用方式,和相应的函数文件定义格式。
[t,x]=ode45(odefun,tspan,x0);
其中,Fun就是导函数,tspan为求解的时间区间(或时间序列,如果采用时间序列,则必须单调),x0为初值。
这时,函数文件可以采用如下方式定义
function dx=odefun(t,x)
对于上面的小例子,可以用如下的程序求解。
function jixianhuan
clear;clc
x0=[01;02];
[t,x]=ode45(@jxhdot,[0,100],x0);
plot(x(:,1),x(:,2))
function dx=jxhdot(t,x)
dx=[
x(2)+x(1)(1-x(1)^2-x(2)^2);
-x(1)+x(2)(1-x(1)^2-x(2)^2)
];

太多不好说。你去看这个>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12665407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存