急.用matlab解非常系数的非分方程数值解.56.1*x*D2y+56.1*Dy+56.626*y=0x取(0,0.02).x=0时Dy=0,x=0.02时y=200.我假设x=0时y=100来解,解不出来,y显示全部为Nan.我的程序:M文件:function yp=vdpol(x,y);yp=[y(2);-(56.1*y
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/06 01:41:09
![急.用matlab解非常系数的非分方程数值解.56.1*x*D2y+56.1*Dy+56.626*y=0x取(0,0.02).x=0时Dy=0,x=0.02时y=200.我假设x=0时y=100来解,解不出来,y显示全部为Nan.我的程序:M文件:function yp=vdpol(x,y);yp=[y(2);-(56.1*y](/uploads/image/z/5253852-12-2.jpg?t=%E6%80%A5.%E7%94%A8matlab%E8%A7%A3%E9%9D%9E%E5%B8%B8%E7%B3%BB%E6%95%B0%E7%9A%84%E9%9D%9E%E5%88%86%E6%96%B9%E7%A8%8B%E6%95%B0%E5%80%BC%E8%A7%A3.56.1%2Ax%2AD2y%2B56.1%2ADy%2B56.626%2Ay%3D0x%E5%8F%96%EF%BC%880%2C0.02%EF%BC%89.x%3D0%E6%97%B6Dy%3D0%2Cx%3D0.02%E6%97%B6y%3D200.%E6%88%91%E5%81%87%E8%AE%BEx%3D0%E6%97%B6y%3D100%E6%9D%A5%E8%A7%A3%2C%E8%A7%A3%E4%B8%8D%E5%87%BA%E6%9D%A5%2Cy%E6%98%BE%E7%A4%BA%E5%85%A8%E9%83%A8%E4%B8%BANan.%E6%88%91%E7%9A%84%E7%A8%8B%E5%BA%8F%EF%BC%9AM%E6%96%87%E4%BB%B6%EF%BC%9Afunction+yp%3Dvdpol%28x%2Cy%29%3Byp%3D%5By%282%29%3B-%2856.1%2Ay)
急.用matlab解非常系数的非分方程数值解.56.1*x*D2y+56.1*Dy+56.626*y=0x取(0,0.02).x=0时Dy=0,x=0.02时y=200.我假设x=0时y=100来解,解不出来,y显示全部为Nan.我的程序:M文件:function yp=vdpol(x,y);yp=[y(2);-(56.1*y
急.用matlab解非常系数的非分方程数值解.56.1*x*D2y+56.1*Dy+56.626*y=0
x取(0,0.02).x=0时Dy=0,x=0.02时y=200.
我假设x=0时y=100来解,解不出来,y显示全部为Nan.
我的程序:
M文件:
function yp=vdpol(x,y);
yp=[y(2);-(56.1*y(2)+56.626*y(1))/56.1/x];
程序:
[x,y]=ode45('vdpol',[0,0.02],[100,0]);
y1=y(:,1);
y2=y(:,2);
plot(x,y1,x,y2,'--')
pause,
plot(y1,y2),grid,
做出图没曲线.
急.用matlab解非常系数的非分方程数值解.56.1*x*D2y+56.1*Dy+56.626*y=0x取(0,0.02).x=0时Dy=0,x=0.02时y=200.我假设x=0时y=100来解,解不出来,y显示全部为Nan.我的程序:M文件:function yp=vdpol(x,y);yp=[y(2);-(56.1*y
“假设x=0时y=100来解”是不合理的,
因为 x=0时Dy=0,x=0.02时y=200 已经给定边界条件,你再给它假设边界条件时,解就不一样了.
另外,ode只能计算已知初值的微分方程(如 y(0) = y0, y'(0) = y1, ...),对于y(0.02) = 200的边界值,需要转化为初值,再求解.不能直接假设.
而且,这个微分方程不能从 0 开始计算,如果从 0 开始,yp(2)由于 ''/56.1/x''会变为无穷,因而后面再迭代会产生 inf 参与的计算,从而y显示为Nan.
解法如下:
56.1*x*y''+56.1*y'+56.626*y=0,代入 x = 0,
得到 56.1*y'(0) + 56.626*y(0) = 0,
因为 y'(0) = 0,所以 y(0) = 0,(初值y(0))
也就是 ODE45 的初始条件为:y(0) = 0,y'(0) = 0
虽然得到了初始值,但是还是有问题,因为如果从 0 开始
第一次代入时,
y(1) = y(0) = 0;
y(2) = y'(0) = 0;
yp(2) = -(56.1*y(2)+56.626*y(1))/56.1/x
= -(56.1*0+56.626*0)/56.1/0 (出现了 0/0,因而后面无论怎么算都是 NaN)
= NaN
以下是我修改的代码,一样没有曲线,因为问题就是如上所述,函数在 0 时没有意义
function my_solve()
[x,y]=ode45(@vdpol,[0,0.02],[0,0]);
y1=y(:,1);
y2=y(:,2);
figure;
plot(x,y1,x,y2,'--');
figure;
plot(y1,y2);
end
function yp=vdpol(x,y)
yp=[y(2);-(56.1*y(2)+56.626*y(1))/56.1/x];
end
虽然米看懂,但我觉得你X,Y的赋值貌似倒过来了
很遗憾,我不会