vibration1996 发表于 2011-1-19 10:04:38

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

如果odefun中需要从主程序接受其他输入参数,比如m,c,k等等,如何实现?
多谢!

qibbxxt 发表于 2011-1-19 10:08:32

本帖最后由 qibbxxt 于 2011-1-19 10:09 编辑

一个简单例子,供参考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=;
=ode45(@(t,x)lorenzeq(t,x,beta,rou,sig),,x0);

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

vibration1996 发表于 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=;
=ode ...
qibbxxt 发表于 2011-1-19 10:08 http://forum.simwe.com/images/common/back.gif

qibbxxt 发表于 2011-1-19 13:39:47

3# vibration1996
那你传入一个向量就可以了啊
真是不明白你的意思
帮助文件里面介绍的很详细,如果方程中有f(t)的话,该怎么做,请lz仔细看看

vibration1996 发表于 2011-1-21 00:05:32

搞定了,
但是除了t,y(或者叫t,x) 能否输出一些其他计算中产生的变量
这个一直不知道怎么弄,多谢!

[
quote] 3# vibration1996
那你传入一个向量就可以了啊
真是不明白你的意思
帮助文件里面介绍的很详细,如果方程中有f(t)的话,该怎么做,请lz仔细看看
qibbxxt 发表于 2011-1-19 13:39 http://forum.simwe.com/images/common/back.gif
页: [1]
查看完整版本: ODE45调用的函数odefun只能有两个变量(t,y)吗