声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2440|回复: 2

[其他相关] Matlab程序调用时出现错误,求高手指导一下(关于ode23)

[复制链接]
发表于 2012-2-23 22:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
本帖最后由 牛小贱 于 2014-2-27 11:30 编辑

调用程序如下( m文件):
  1. function dy = fun1(t,y,flag,u)
  2. if y(1)>=1
  3.     a=0.1*cos(u*t)-y(1)+1;
  4. elseif y(1)<1&y(1)>-1
  5.     a=0.1*cos(u*t);
  6. elseif y(1)<=-1
  7.     a=0.1*cos(u*t)-y(1)-1;
  8. end
  9. dy=zeros(2,1);
  10. dy=[y(2);a];
复制代码
主程序:
  1. u=[0.5, 2.0];
  2. for j=1:2
  3. [t,y] = ode23(@fun1,[0 5] , [2 0],[],u(j));
  4. figure
  5. plot(y(:,1),y(:,2));
  6. end
复制代码



回复
分享到:

使用道具 举报

 楼主| 发表于 2012-2-24 08:56 | 显示全部楼层
自己顶一下
发表于 2014-2-27 11:18 | 显示全部楼层
本帖最后由 牛小贱 于 2014-2-27 11:28 编辑

正确的程序应该是这样的:
调用程序如下( m文件):
  1. function dy = fun1(t,y,flag,u)
  2. u=[0.5,2.0];
  3. for j=1:2
  4.     if y(1)>=1
  5.     a=0.1*cos(u(j)*t)-y(1)+1;
  6. elseif y(1)<1&y(1)>-1
  7.     a=0.1*cos(u(j)*t);
  8. elseif y(1)<=-1
  9.     a=0.1*cos(u(j)*t)-y(1)-1;
  10.     end
  11. end
  12. dy=zeros(2,1);
  13. dy=[y(2);a];
复制代码

主程序:
  1. [t,y] = ode23(@fun1,[0 5] ,[2 0]);
  2. figure
  3. plot(y(:,1),y(:,2));
复制代码
另外,补充一点:ode23ode45 MATLAB中的用法
ode23:使用二阶龙格-库塔法求微分方程,调用格式为:
[ty]=ode23(‘fname’,tspan,y0)
ode45:使用四阶龙格-库塔法求微分方程,调用格式为:
[ty]=ode45(‘fname’,tspan,y0)
其中fname为由M函数定义的线性或者非线性微分方程的句柄函数名。tspan形式为[t0,tf],表示求解区间。y0是初始状态列向量。ty分别给出时间向量和相应的状态向量。
希望对你有所帮助!!!

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-7 20:24 , Processed in 0.049493 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表