全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
1200 4
2015-04-05
y(i,6)=-178075801.6*y(i,4)*y(i,5)+490910.1296*y(i,3)*y(i,2)+1128974.05+7481.104004*sin(2.047t);
为什么MATLAB7.0程序运行到上面一行出错了?感觉也没什么错误啊

ODE45_main文件:
clc;clear
tspan=[0,1];
y0=[0; 0;0;0;0];
[t,y]=ode45('ODE45_fun',tspan,y0);

[m,n]=size(y);
for i=1:m
    y(i,6)=-178075801.6*y(i,4)*y(i,5)+490910.1296*y(i,3)*y(i,2)+1128974.05+7481.104004*sin(2.047t);

end
data=[t,y];
save ODE45_data.txt data -ascii
subplot(2,3,1),plot(t,y(:,1)),title('y(1)')
Xlabel('t');Ylabel('y');
subplot(2,3,2),plot(t,y(:,2)),title('y(2)')
Xlabel('t');Ylabel('y');
subplot(2,3,3),plot(t,y(:,3)),title('y(3)')
Xlabel('t');Ylabel('y');
subplot(2,3,4),plot(t,y(:,4)),title('y(4)')
Xlabel('t');Ylabel('y');
subplot(2,3,5),plot(t,y(:,5)),title('y(5)')
Xlabel('t');Ylabel('y');
subplot(2,3,6),plot(t,y(:,6)),title('y(6)')
Xlabel('t');Ylabel('y');

grid on

ODE45_fun文件:
function  dy=ODE45_fun(t,y)
dy(1)=-1.918298553*y(3)*y(4)-121.6697369*y(5)*y(2)+0.006472085*y(2)*y(2)+15.25250926*y(5)*y(5)-0.518363603*sin(2.047t)+0.001124759;

dy(2)=0.007229182*y(5)*y(1)-0.013867729*y(3)-0.005151943*sin(2.047t)+33.43424564*y(4)*y(5)-0.092169794*y(3)*y(2)-0.698266828;

dy(3)=72.10986245*y(2)+0.52129529*y(4)*y(1)+0.025471074*y(3)+921.886526*y(4)/y(1)-0.47870471*y(4)+0.025471074*y(1)*t-0.38220722*cos(2.047t)-4.62279911;

dy(4)=-57.37263009*y(5)+0.001053501*y(3)*y(1)+20.28825016/y(1)-0.001053501*y(3)+0.064741605*y(4)+20.28825016*t-0.006201915*sin(2.047t)-3651.904822;
  
dy(5)=0.017284293*y(4)+0.00278644*y(1)*y(2)-0.551218454*y(2)*y(5)*y(5)+0.010839281*y(2)*y(2)*y(5)+0.020353114*cos(2.047t)+0.110594984;
dy=[dy(1);dy(2);dy(3);dy(4);dy(5)];
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-4-6 08:27:50
2.047t改为2.047*t,t范围改为0-180,Error in ==> ODE45_main at 8【即 y(i,6)=-178075801.6*y(i,4)*y(i,5)+490910.1296*y(i,3)*y(i,2)+1128974.05+7481.104004*sin(2.047*t);】  
还有:[t,y]=ode45('ODE45_fun',tspan,y0);   没有错误吧

Warning: Failure at t=5.501826e-001【【【【y0=换不同的初始值,Failure at t不同】】】】.  Unable to meet integration tolerances without reducing the step size below the smallest value allowed (1.776357e-015) at time t.
the smallest value allowed怎么设置大一些?可以牺牲一些准确度
> In ode45 at 355
  In ODE45_main at 4
??? Subscripted assignment dimension mismatch.

Error in ==> ODE45_main at 8
   y(i,6)=-178075801.6*y(i,4)*y(i,5)+490910.1296*y(i,3)*y

(i,2)+1128974.05+7481.104004*sin(2.047*t);
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-4-7 15:31:58
程序y(i,6)=-178075801.6*y(i,4)*y(i,5)+490910.1296*y(i,3)*y(i,2)+1128974.05+7481.104004*sin(2.047*t);
的  %+7481.104004*sin(2.047*t);
变成:y(i,6)=-178075801.6*y(i,4)*y(i,5)+490910.1296*y(i,3)*y(i,2)+1128974.05;
可以出下图结果(但是t设定180,只是出来到5.5)




【如果】行末加上+7481.104004*sin(2.047*t);就会出错:
Warning: Failure at t=5.422028e-006.  Unable to meet integration tolerances without reducing the step size below the smallest value allowed (1.355253e-020) at time t.
> In ode45 at 355
  In ODE45_main at 4
??? Subscripted assignment dimension mismatch.

Error in ==> ODE45_main at 8
y(i,6)=-178075801.6*y(i,4)*y(i,5)+490910.1296*y(i,3)*y(i,2)+1128974.05+7481.104004*sin(2.047*t);
【另外】sin(2.047*t);变成sin(t);也出错:
Warning: Failure at t=5.422028e-006.  Unable to meet integration tolerances without reducing the step size below the smallest value allowed (1.355253e-020) at time t.
> In ode45 at 355
  In ODE45_main at 4
??? Subscripted assignment dimension mismatch.

Error in ==> ODE45_main at 8
    y(i,6)=-178075801.6*y(i,4)*y(i,5)+490910.1296*y(i,3)*y(i,2)+1128974.05+7481.104004*sin(t);
为什么?  怎么改
(必须得有sin(2.047*t)一项)

编辑程序为:
编辑ODE45_main:
clc;clear
tspan=[0,180];
y0=[1e-5;0;0;0;0];
[t,y]=ode45('ODE45_fun',tspan,y0);

[m,n]=size(y);
for i=1:m
    y(i,6)=-178075801.6*y(i,4)*y(i,5)+490910.1296*y(i,3)*y(i,2)+1128974.05  %  +7481.104004*sin(2.047*t);
%    y(i,4)=-3*y(i,2)*y(i,3)-4*y(i,1)*y(i,3)+8*y(i,1)*y(i,3);
end
data=[t,y];
save ODE45_data.txt data -ascii
subplot(2,3,1),plot(t,y(:,1)),title('y(1)')
Xlabel('t');Ylabel('y');
subplot(2,3,2),plot(t,y(:,2)),title('y(2)')
Xlabel('t');Ylabel('y');
subplot(2,3,3),plot(t,y(:,3)),title('y(3)')
Xlabel('t');Ylabel('y');
subplot(2,3,4),plot(t,y(:,4)),title('y(4)')
Xlabel('t');Ylabel('y');
subplot(2,3,5),plot(t,y(:,5)),title('y(5)')
Xlabel('t');Ylabel('y');
subplot(2,3,6),plot(t,y(:,6)),title('y(6)')
Xlabel('t');Ylabel('y');
% plot(t,y(:,1),'bo',t,y(:,2),'rx',t,y(:,3),'gv',t,y(:,4),'r-');
grid on

编辑ODE45_fun:
function  dy=ODE45_fun(t,y)
dy(1)=-1.918298553*y(3)*y(4)-121.6697369*y(5)*y(2)+0.006472085*y(2)*y(2)+15.25250926*y(5)*y(5)-0.518363603*sin(2.047t)+0.001124759;

dy(2)=0.007229182*y(5)*y(1)-0.013867729*y(3)-0.005151943*sin(2.047t)+33.43424564*y(4)*y(5)-0.092169794*y(3)*y(2)-0.698266828;

dy(3)=72.10986245*y(2)+0.52129529*y(4)*y(1)+0.025471074*y(3)+921.886526*y(4)/y(1)-0.47870471*y(4)+0.025471074*y(1)*t-0.38220722*cos(2.047t)-4.62279911;

dy(4)=-57.37263009*y(5)+0.001053501*y(3)*y(1)+20.28825016/y(1)-0.001053501*y(3)+0.064741605*y(4)+20.28825016*t-0.006201915*sin(2.047t)-3651.904822;
  
dy(5)=0.017284293*y(4)+0.00278644*y(1)*y(2)-0.551218454*y(2)*y(5)*y(5)+0.010839281*y(2)*y(2)*y(5)+0.020353114*cos(2.047t)+0.110594984;

dy=[dy(1);dy(2);dy(3);dy(4);dy(5)];
附件列表
MATLAB.jpg

原图尺寸 166.01 KB

MATLAB.jpg

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-4-7 16:12:33
进一步修改:
sin(2.047*t);变成sin(2.047*t(i));
没出错,但:
Warning: Failure at t=5.422028e-006. Unable to meet integration tolerances without reducing the step size below the smallest value allowed (1.355253e-020) at time t.
> In ode45 at 355
In ODE45_main at 4
其中,In ODE45_main at 4 为[t,y]=ode45('ODE45_fun',tspan,y0);
我在想如何设置允许的the smallest value allowed 大一些,则就可以继续运行了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-4-7 16:13:14
关键是怎么设置?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群