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时的解析解
展开
 我来答
匿名用户
2015-09-16
展开全部

首先,不要求你多么的精通matlab,但能够理解你的代码中的那几条注释语句就可以了,否则就不要继续往下看了。。。

测试结果:代码没问题,没有语法错误;算法没问题,可以用45阶龙格库塔求解;精度没问题,该方程可以使用ode45默认精度;运行没问题,64位win8.1系统matlabR2015a完美运行,结果正确无误。

由于你的结果基本上为0,怀疑是vdp1000函数文件的问题,检查步骤如下:运行前关闭m文件编辑器,此时没有弹出提示保存;重新启动matlab,没有弹出一些警告窗口或文字;在Command Windows窗口输入open vdp1000.m,回车后成功的打开了该文件;再次核对代码是否正确完整;运行调用语句,没有出现橙色或红色的警告语句。

每个分号前半句是操作,后半句是结果,如果有出入,那么就是问题所在了。如果结果还不对的话再说吧。

追问

我知道问题出在哪了,MATLAB其实自带vdp1000这个函数,ode45调用的是MATLAB自带的那个vdp1000,而不是我写的m文件中的vdp1000,(因为我没有切换工作路径)

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式