[問題] 請問解ODE使用if 已回收
大家好:
我想請問一下在解ODE的時候有辦法利用
每解出來的一組解,用if寫判斷式,然後做方程式的切換嗎?
例如我有一組ODE
dy=[y(5:8,1);-2.*B*y(1:4,1)]
B為4*4未知常數矩陣, 然後我要讓B在我所設定的條件下用已知的B1,B2去切換
假設我給的時間 t=0:0.01:4 (td=0.01 )
我先跑前兩組解 t=0 t=0.01
if t <= 0.01
B=B1
end
dy=[y(5:8,1);-2.*B*y(1:4,1)] run到0.01秒
當t=0.02秒時
我用0.01秒跑出來的解y(3,1) 去判斷
如果y(3,1)>0 則0.01秒的解,變換係數B=B2 ,跑t=0.02秒,並重跑 t=0.01秒的解
如果y(3,1)<0 則0.01秒的解就保持,直接跑 t=0.02,
重複這樣的判斷模式
也就是從0.01秒以後,每跑一個時間間格我就要檢驗上一組的解是否是我要的
if t>0.01 & y(3,1) <= 0
B=B2
t=t-td:td:t % 判斷出上一組解不是我要的,所以將係數換B2
重跑t=t-td
與t=t的解
elseif t>0.01 & y(3,1) > 0
B=B1 %判斷出上一組的解是我要的,所以將係數維持
B1不變跑t=t
end
================================================
整個程式大約如下
function dy=ptt(t,x)
global B1 B2
if t<0.01
B=B1
elseif t>0.01 && y(3,1)<0
t=t-td:td:t %重跑上一時間點的解與目前該時間點的解
B=B2
elseif t>0.01 && y(3,1)<0
B=B1
end
dy=[y(5:8,1);-2.*B*y(1:4,1)]
============================
是可以跑,不過我不知道我這樣寫是否會有問題,
兩條不同方程式互換,那解不就會變的不連續?
,這樣跑出來感覺不是很正確
MATLAB用的方法好像都跟上一組的解會有關係??
請問有人跑過類似這樣程序的ODE嗎?
謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.66.117
→
05/20 22:57, , 1F
05/20 22:57, 1F
→
05/20 23:10, , 2F
05/20 23:10, 2F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 3 篇):