怎么用matlab的ode命令解下面的方程?上述方程我用matlab解后发现数值解和精确解差别较大,求帮助

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 20:11:46
怎么用matlab的ode命令解下面的方程?上述方程我用matlab解后发现数值解和精确解差别较大,求帮助

怎么用matlab的ode命令解下面的方程?上述方程我用matlab解后发现数值解和精确解差别较大,求帮助
怎么用matlab的ode命令解下面的方程?

上述方程我用matlab解后发现数值解和精确解差别较大,求帮助

怎么用matlab的ode命令解下面的方程?上述方程我用matlab解后发现数值解和精确解差别较大,求帮助

数值解求解和解析解求解都完全没有问题的,可能是你解题的方法错了.

这道题中自变量为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函数在附件中