急.用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,
做出图没曲线.
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,
做出图没曲线.
“假设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 还有一张插不了了,你运行一下就知道了
因为 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 还有一张插不了了,你运行一下就知道了
急.用matlab解非常系数的非分方程数值解.56.1*x*D2y+56.1*Dy+56.626*y=0
如何运用MATLAB求解方程“d2y/dx2+w^2*sin(x)=0”)的解,其中d2y/dx2为y对x的二阶导数,w
用matlab解:y=dsolve('D2y+exp(-t)*Dy-sin(sqrt(t))*y=exp(-t)*sin
为什么在matlab中y=dsolve('5*(1-x)*D2y=sqrt+Dy*Dy)','y(0)=0,Dy(0)=
matlab求解常微分y=dsolve('D3y-3*D2y-Dy*y=0','y(0)=1 Dy(0)=-1 D2y(
微积分……高阶导数设x=e的-t次方、试变换方程x2*(d2y/dx2)+x*(dy/dx)+y=0
y=dsolve('D2y=(-9.8sin(y))','t')用matlab怎么解出y的轨迹?
用MATLAB解方程(y+2)y'=x,当x=0:1:100时,求y的数值,并画出y的图形,怎么输入命令?
用matlab 解这个方程的数值解,急
如何使用matlab用梯形法解常微分方程dy/dx=y/x-y^2/x,y(1)=0.5,求出其数值解
用matlab求微分方程 y’=-y2+x,y(0)=1的数值解,
matlab 数值解比如有方程 y^3+x^2+3x-2y=1 其中x的区间为0到10 如何让matlab求解数值解y呢