bella_jing 发表于 2008-9-8 10:44

请问: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应该在哪里怎么赋值才是我想表达的那个意思呢?
先谢谢各位了~

sigma665 发表于 2008-9-8 12:09

回复 楼主 bella_jing 的帖子

我觉得一般function都是从头开始运行的

messenger 发表于 2008-9-8 12:26

我倒是觉得是从2开始执行

为什么不把p放到主程序中呢?

bella_jing 发表于 2008-9-8 12:57

回复 板凳 messenger 的帖子

把p放到主程序中,那不是就是要通过函数传递把P传给子程序了么?那p还会根据不同的循环x值而变化么?

bella_jing 发表于 2008-9-8 12:59

回复 沙发 sigma665 的帖子

那就还有个问题,时间t由主程序传递到子程序时,是个矩阵(里面很多值)然后在每次循环时调用下个值使用,
还是作为一个数,一次使用一个,每次不一样?

科技在线 发表于 2008-9-8 13:03

应该是从2开始,你把这两段颠倒一下先后顺序试试

octopussheng 发表于 2008-9-8 19:43

按照1-2的顺序写程序是正确的!
页: [1]
查看完整版本: 请问:matlab中ode45的循环从哪里开始?