声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1394|回复: 3

[编程技巧] ODE45如何解微分方程组

[复制链接]
发表于 2014-6-25 01:28 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 牛小贱 于 2014-6-25 11:06 编辑
  1. function yp=unforce1(t,y)
  2. m=10;   % mass
  3. k=10+7*cos(4*t);    % stiffnes in this case: kp=7; omeg=4
  4. yp=[y(2);-k/m*y(1)];
  5. end


  6. tspan=[0 500]
  7. y0=[5,0];      % initial displacement
  8. [t,y]=ode45('unforce1',tspan,y0);  % ode45 simulatio
复制代码
上面是我自己写的用来求解单个微分方程的代码。但是我现在要解微分方程组,比如kp和omeg都是从1到8的变量。其余条件都不变。我可以手动设置kp和omeg的值从1到8。让程序运行64次。 但是一旦kp和omeg的值变大,手动计算太浪费时间了。所以来这里请教一下高人,如何让程序能快速有效的得到计算结果。

另外,我初步的更改了一下function的代码:
  1. function yp=unforce2(t,y)
  2. m=10;   % mass
  3. yp=zeros(64,1);
  4. for kp=1:8
  5.     for omeg=0.5:0.5:4  % 0.5 to 4
  6.         k=10+kp*cos(omeg*t); % stiffness
  7.         yp(n)=[y(2);-k/m*y(1)];
  8.     end
  9. end
  10. end
复制代码

我从网上查到一个arrayfun的函数好像能让上面的代码变的更简便一点。但是不是很会。

有高手能帮我么?


回复
分享到:

使用道具 举报

 楼主| 发表于 2014-6-25 02:22 | 显示全部楼层
补充一下,我解微分方程是为了计算微分方程对应的系统的能量。所以,不同的微分方程有不同的系统能量。我最终是想看随着kp和omeg的变化,系统能量是如何变化的。
发表于 2014-6-27 22:39 | 显示全部楼层
不知道lz追求的是程序简单还是效率高,如果是效率的话,对于循环次数较少,for循环效率可能更高一些
发表于 2014-7-13 08:04 | 显示全部楼层
你那样改没改对。应该是在主函数里用循环的。

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-12-1 13:27 , Processed in 0.058805 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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