作业帮 > 综合 > 作业

急.用matlab解非常系数的非分方程数值解.56.1*x*D2y+56.1*Dy+56.626*y=0

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/10/01 21:31:07
急.用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=0
“假设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
再问: 那改成这样能解么? 56.1*(0.02-x)*D2y+56.1*Dy-56.626*y=0 x取(0,0.02)。x=0时y=200,x=0.02时Dy=0. 主要是要图啊。。。看懂了为什么我是nan,但是还是不懂为什么没图。这样改会有意义么?
再答: 这样可以,但是x=0.02时Dy=0.这个条件我还不清楚怎么转换,我测试了一系列 y'(0),并打出了一些图,我取两张给你看一下。 代码如下: function my_solve() [x,y]=ode45(@vdpol,[0,0.02],[200,-200]); %% 你可以改 y'(0) = -200 这个值,测试一下 y1=y(:,1); y2=y(:,2); figure; hold on; plot(x,y1,'r-+'); plot(x,y2,'b-+'); hold off; figure; plot(y1,y2); end function yp=vdpol(x,y) yp=[y(2);(-56.1*y(2)+56.626*y(1))/56.1/(0.02 - x)]; end 还有一张插不了了,你运行一下就知道了