请问:matlab中ode45的循环从哪里开始?
比如,我的主程序(简单写下,为了便于理解我提的问题^_^)=ode45('mm',dt,x0,[]);'
然后被调用的函数为
1. function xdot=mm(t,x,flag)
下面有一堆赋值,甚至用到了要求的数值微分里的数,呃。。。比如
p=sqrt(x(1)+x(2));
ifp<1
f=1
elsef=0
2. xdot=zeros(4,1);
xdot(1)=x(2);
xdot(2)=-a1/b1*x(2)-1/(b.^2)*(x(1)-f*x(9))+d*cos(e);
xdot(3)=x(4);
xdot(4)=-ia1/b1*x(4)-1/(b.^2)*(x(3)-f*x(11))+d*sin(e);
问:当我调用mm这个函数时,ode45所执行的循环,是从1.处开始每次循环,还是只从2处开始循环?因为我的p赋值其实是根据每次循环而改变的,要是从2。处循环,我的p值相当于只赋了一次值,就没有意义了。
另:如果是从2开始的循环,那我的p应该在哪里怎么赋值才是我想表达的那个意思呢?
先谢谢各位了~
回复 楼主 bella_jing 的帖子
我觉得一般function都是从头开始运行的 我倒是觉得是从2开始执行为什么不把p放到主程序中呢?
回复 板凳 messenger 的帖子
把p放到主程序中,那不是就是要通过函数传递把P传给子程序了么?那p还会根据不同的循环x值而变化么?回复 沙发 sigma665 的帖子
那就还有个问题,时间t由主程序传递到子程序时,是个矩阵(里面很多值)然后在每次循环时调用下个值使用,还是作为一个数,一次使用一个,每次不一样? 应该是从2开始,你把这两段颠倒一下先后顺序试试 按照1-2的顺序写程序是正确的!
页:
[1]