找回密码
 注册
Simdroid-非首页
查看: 101|回复: 4

ODE45调用的函数odefun只能有两个变量(t,y)吗

[复制链接]
发表于 2011-1-19 10:04:38 | 显示全部楼层 |阅读模式 来自 美国
如果odefun中需要从主程序接受其他输入参数,比如m,c,k等等,如何实现?
多谢!
发表于 2011-1-19 10:08:32 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
本帖最后由 qibbxxt 于 2011-1-19 10:09 编辑

一个简单例子,供参考
  1. clear;clc;close all
  2. lorenzeq=@(t,x,beta,rou,sig)[-beta*x(1)+x(2)*x(3);-rou*x(2)+rou*x(3);-x(1)*x(2)+sig*x(2)-x(3)];
  3. beta=2;rou=5;sig=20;
  4. t_final=100;
  5. x0=[0 0 1e-10];
  6. [t,x]=ode45(@(t,x)lorenzeq(t,x,beta,rou,sig),[0,t_final],x0);
复制代码

PS:方法比较多,可以在ode45输入参数后面继续加参数,也可以用全局变量,也可以用内嵌函数共享变量

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-1-19 13:10:43 | 显示全部楼层 来自 美国
本帖最后由 vibration1996 于 2011-1-19 13:27 编辑

多谢指教!
在此基础上另一个问题:假设sig是随时间t变化的已知的量,如何修改上边这个程序?
比如说: t = 0,1,2,3,4,5
            sig 对应这些时间点是一个无规律的测试得到数据:8, 29, 1,32,58
如何把这些无规律的实测数据传到ode里边去呢?
再次感谢!
我用sig(  t/dt)来取sig对应的值,但是如果t采用的是变步长的,那么sig的值如何传
***这样做不对!

一个简单例子,供参考clear;clc;close all
lorenzeq=@(t,x,beta,rou,sig)[-beta*x(1)+x(2)*x(3);-rou*x(2)+rou*x(3);-x(1)*x(2)+sig*x(2)-x(3)];
beta=2;rou=5;sig=20;
t_final=100;
x0=[0 0 1e-10];
[t,x]=ode ...
qibbxxt 发表于 2011-1-19 10:08
回复 不支持

使用道具 举报

发表于 2011-1-19 13:39:47 | 显示全部楼层 来自 河北廊坊
3# vibration1996
那你传入一个向量就可以了啊
真是不明白你的意思
帮助文件里面介绍的很详细,如果方程中有f(t)的话,该怎么做,请lz仔细看看
回复 不支持

使用道具 举报

 楼主| 发表于 2011-1-21 00:05:32 | 显示全部楼层 来自 美国
搞定了,
但是除了t,y  (或者叫t,x) 能否输出一些其他计算中产生的变量
这个一直不知道怎么弄,多谢!

[
quote] 3# vibration1996  
那你传入一个向量就可以了啊
真是不明白你的意思
帮助文件里面介绍的很详细,如果方程中有f(t)的话,该怎么做,请lz仔细看看
qibbxxt 发表于 2011-1-19 13:39 [/quote]
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 13:22 , Processed in 0.045754 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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