[已解决] Ode45迭代过程中如何进行分段求解

[复制链接]
可乐八戒 发表于 2021-9-13 19:39:24
Ode45在迭代过程中,其中的变量值随时间发生变化,能否在迭代过程中根据变量值的大小关系,选择相应的微分方程组继续进行迭代计算。
例如:
初始值为(x0,y0),此时x0<y0,选择微分方程组(1)进行迭代计算,变量值x和y随时间发生变化,当出现x>=y时选择微分方程组(2)继续进行迭代计算,如此反复。

最佳答案


EngineerLeon 发表于 2021-9-16 09:44:11
可乐八戒 发表于 2021-9-14 11:40
谢谢您的回答,变量值随时间发生变化,之间的大小关系在迭代过程中会交替改变,不知道如果用if可以解决交 ...

这有什么解决不了的?你试过没有就产生了解决不了的想法?
  1. clear;
  2. [ t, y ] = ode45( @MyOdeFun, [ 0 : 0.05 : 12 ], [ 0, 1 ] );
  3. plot( t, y, '-' )
  4. function Output = MyOdeFun( t, y )
  5. F = @( t, y ) [ - y( 2 ); y( 1 ) ];
  6. G = @( t, y ) [ - 10 * y( 2 ); y( 1 ) ];
  7. if y( 1 ) < y( 2 )
  8.     Output = F( t, y );
  9. else
  10.     Output = G( t, y );
  11. end
  12. end
复制代码

我实在想不通,又不是多复杂的事情,自己写个代码也花不了几分钟,为什么就不肯自己去试一试?

5 条回复


EngineerLeon 发表于 2021-9-14 10:28:59
这不是你自己往 odefun 里面加个 if 控制就能解决的事情吗?

可乐八戒 发表于 2021-9-14 11:40:13
EngineerLeon 发表于 2021-9-14 10:28
这不是你自己往 odefun 里面加个 if 控制就能解决的事情吗?

谢谢您的回答,变量值随时间发生变化,之间的大小关系在迭代过程中会交替改变,不知道如果用if可以解决交叉迭代的问题么。
例如:在[t0,t1]中,初始点为[x0,y0],此时x0<y0,采用方程组(1)进行迭代计算,迭代值一直是x<y。直到t1时,迭代到[x1,y1],此时出现x1>=y1,马上用最近的迭代值[x1,y1]为初始点,选择方程组(2)继续进行迭代计算。

EngineerLeon 发表于 2021-9-16 09:44:11
可乐八戒 发表于 2021-9-14 11:40
谢谢您的回答,变量值随时间发生变化,之间的大小关系在迭代过程中会交替改变,不知道如果用if可以解决交 ...

这有什么解决不了的?你试过没有就产生了解决不了的想法?
  1. clear;
  2. [ t, y ] = ode45( @MyOdeFun, [ 0 : 0.05 : 12 ], [ 0, 1 ] );
  3. plot( t, y, '-' )
  4. function Output = MyOdeFun( t, y )
  5. F = @( t, y ) [ - y( 2 ); y( 1 ) ];
  6. G = @( t, y ) [ - 10 * y( 2 ); y( 1 ) ];
  7. if y( 1 ) < y( 2 )
  8.     Output = F( t, y );
  9. else
  10.     Output = G( t, y );
  11. end
  12. end
复制代码

我实在想不通,又不是多复杂的事情,自己写个代码也花不了几分钟,为什么就不肯自己去试一试?
回复此楼

可乐八戒 发表于 5 天前
EngineerLeon 发表于 2021-9-16 09:44
这有什么解决不了的?你试过没有就产生了解决不了的想法?

我实在想不通,又不是多复杂的事情,自己写个 ...

谢谢您的回答

可乐八戒 发表于 4 天前
EngineerLeon 发表于 2021-9-16 09:44
这有什么解决不了的?你试过没有就产生了解决不了的想法?

我实在想不通,又不是多复杂的事情,自己写个 ...

应该是交替迭代计算,而不是一个初值同时迭代计算,根据变量大小关系输出结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表