MATLAB ode45解微分方程(组)不能得到预期结果。 5
下面涉及的两个二阶微分方程都不是刚性(stiff)方程。functiondy=vdp1000(t,y)dy=zeros(2,1);dy(1)=y(2);dy(2)=5*y...
下面涉及的两个二阶微分方程都不是刚性(stiff)方程。
function dy = vdp1000(t,y)
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = 5*y(2) - 4*y(1);%这个方程组实际是y''-5y'+4y=0转化来的
%已保存为m文件,然后用以下语句调用
[T,Y] = ode45(@vdp1000,[0:0.1:10],[2,5]);
plot(T,Y(:,1),'o');hold on
u=0:0.01:10;
plot(u,exp(u)+exp(4*u),'-')
%这是初始条件为y(0)=2,y'(0)=5时的解析解
看下图,数值结果显然不对。
换一个方程还是不对
function dy = vdp1000(t,y)
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = 2*y(2) - 2*y(1);%这个方程组实际是y''-2y'+2y=0转化来的
%已保存为m文件,然后用以下语句调用
[T,Y] = ode45(@vdp1000,[0:0.1:10],[1,2]);
plot(T,Y(:,1),'o');hold on
u=0:0.01:10;
plot(u,exp(u).*(sin(u)+cos(u)),'-')
%这是初始条件为y(0)=1,y'(0)=2时的解析解 展开
function dy = vdp1000(t,y)
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = 5*y(2) - 4*y(1);%这个方程组实际是y''-5y'+4y=0转化来的
%已保存为m文件,然后用以下语句调用
[T,Y] = ode45(@vdp1000,[0:0.1:10],[2,5]);
plot(T,Y(:,1),'o');hold on
u=0:0.01:10;
plot(u,exp(u)+exp(4*u),'-')
%这是初始条件为y(0)=2,y'(0)=5时的解析解
看下图,数值结果显然不对。
换一个方程还是不对
function dy = vdp1000(t,y)
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = 2*y(2) - 2*y(1);%这个方程组实际是y''-2y'+2y=0转化来的
%已保存为m文件,然后用以下语句调用
[T,Y] = ode45(@vdp1000,[0:0.1:10],[1,2]);
plot(T,Y(:,1),'o');hold on
u=0:0.01:10;
plot(u,exp(u).*(sin(u)+cos(u)),'-')
%这是初始条件为y(0)=1,y'(0)=2时的解析解 展开
1个回答
2015-09-16
展开全部
首先,不要求你多么的精通matlab,但能够理解你的代码中的那几条注释语句就可以了,否则就不要继续往下看了。。。
测试结果:代码没问题,没有语法错误;算法没问题,可以用45阶龙格库塔求解;精度没问题,该方程可以使用ode45默认精度;运行没问题,64位win8.1系统matlabR2015a完美运行,结果正确无误。
由于你的结果基本上为0,怀疑是vdp1000函数文件的问题,检查步骤如下:运行前关闭m文件编辑器,此时没有弹出提示保存;重新启动matlab,没有弹出一些警告窗口或文字;在Command Windows窗口输入open vdp1000.m,回车后成功的打开了该文件;再次核对代码是否正确完整;运行调用语句,没有出现橙色或红色的警告语句。
每个分号前半句是操作,后半句是结果,如果有出入,那么就是问题所在了。如果结果还不对的话再说吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询