声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1914|回复: 6

[综合讨论] 请问:matlab中ode45的循环从哪里开始?

[复制链接]
发表于 2008-9-8 10:44 | 显示全部楼层 |阅读模式

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

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

x
比如,我的主程序(简单写下,为了便于理解我提的问题^_^)
     [t,x]=ode45('mm',dt,x0,[]);'
然后被调用的函数为
1.      function xdot=mm(t,x,flag)
          下面有一堆赋值,甚至用到了要求的数值微分里的数,呃。。。比如
       p=sqrt(x(1)+x(2));
              if  p<1
                  f=1
             else  f=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应该在哪里怎么赋值才是我想表达的那个意思呢?
先谢谢各位了~
回复
分享到:

使用道具 举报

发表于 2008-9-8 12:09 | 显示全部楼层

回复 楼主 bella_jing 的帖子

我觉得一般function都是从头开始运行的
发表于 2008-9-8 12:26 | 显示全部楼层
我倒是觉得是从2开始执行

为什么不把p放到主程序中呢?
 楼主| 发表于 2008-9-8 12:57 | 显示全部楼层

回复 板凳 messenger 的帖子

把p放到主程序中,那不是就是要通过函数传递把P传给子程序了么?那p还会根据不同的循环x值而变化么?
 楼主| 发表于 2008-9-8 12:59 | 显示全部楼层

回复 沙发 sigma665 的帖子

那就还有个问题,时间t由主程序传递到子程序时,是个矩阵(里面很多值)然后在每次循环时调用下个值使用,
还是作为一个数,一次使用一个,每次不一样?
发表于 2008-9-8 13:03 | 显示全部楼层
应该是从2开始,你把这两段颠倒一下先后顺序试试
发表于 2008-9-8 19:43 | 显示全部楼层
按照1-2的顺序写程序是正确的!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-18 13:06 , Processed in 0.057259 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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