怎么用matlab的ode命令解下面的方程?
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/16 12:22:38
怎么用matlab的ode命令解下面的方程?
![](http://img.wesiedu.com/upload/e/a7/ea7d5de083cfef713ac99125084c3790.jpg)
上述方程我用matlab解后发现数值解和精确解差别较大,求帮助
![](http://img.wesiedu.com/upload/e/a7/ea7d5de083cfef713ac99125084c3790.jpg)
上述方程我用matlab解后发现数值解和精确解差别较大,求帮助
![怎么用matlab的ode命令解下面的方程?](/uploads/image/z/18568513-1-3.jpg?t=%E6%80%8E%E4%B9%88%E7%94%A8matlab%E7%9A%84ode%E5%91%BD%E4%BB%A4%E8%A7%A3%E4%B8%8B%E9%9D%A2%E7%9A%84%E6%96%B9%E7%A8%8B%3F)
数值解求解和解析解求解都完全没有问题的,可能是你解题的方法错了.这道题中自变量为x,状态变量为y,y'.(注意到自变量不是t,状态变量不是x.这道题就解决一半了)首先编写m函数如下:function f=fun1(t,x,n)
f(1,1)=x(2);
f(2,1)=-(t^2-n^2)/t^2*x(1)-x(2)/t;
end然后再编写求解脚本文件(也是m文件,m文件分函数文件和脚本文件两种)如下:
clear
clc
%% 数值解
x0=[2;-2/pi];
[t,x]=ode45(@fun1,[pi/2,10*pi/2],x0,[],1/2);
plot(t,x)
hold on
%% 解析解
syms x y
y1=dsolve('x^2*D2y+x*Dy+(x^2-1/4)*y=0','Dy(pi/2)=-2/pi,y(pi/2)=2','x')
y2=diff(y1)
x1=linspace(pi/2,10*pi/2,200);
y1=subs(y1,x,x1);
y2=subs(y2,x,x1);
plot(x1,y1,'r',x1,y2,'g')最后画出图形如下:
其实图中有四条曲线,可以看出数值解的y和y'和解析解的y和y'几乎一致.在命令空间可以得到函数的解析解为y(1),其导数为y(2)y1 =
pi^(1/2)*2^(1/2)/x^(1/2)*sin(x)
y2 =
-1/2*pi^(1/2)*2^(1/2)/x^(3/2)*sin(x)+pi^(1/2)*2^(1/2)/x^(1/2)*cos(x) 相关m函数在附件中
f(1,1)=x(2);
f(2,1)=-(t^2-n^2)/t^2*x(1)-x(2)/t;
end然后再编写求解脚本文件(也是m文件,m文件分函数文件和脚本文件两种)如下:
clear
clc
%% 数值解
x0=[2;-2/pi];
[t,x]=ode45(@fun1,[pi/2,10*pi/2],x0,[],1/2);
plot(t,x)
hold on
%% 解析解
syms x y
y1=dsolve('x^2*D2y+x*Dy+(x^2-1/4)*y=0','Dy(pi/2)=-2/pi,y(pi/2)=2','x')
y2=diff(y1)
x1=linspace(pi/2,10*pi/2,200);
y1=subs(y1,x,x1);
y2=subs(y2,x,x1);
plot(x1,y1,'r',x1,y2,'g')最后画出图形如下:
![](http://img.wesiedu.com/upload/9/bb/9bbb9eb01e8775b8b40efe44405f86a8.jpg)
pi^(1/2)*2^(1/2)/x^(1/2)*sin(x)
y2 =
-1/2*pi^(1/2)*2^(1/2)/x^(3/2)*sin(x)+pi^(1/2)*2^(1/2)/x^(1/2)*cos(x) 相关m函数在附件中