[問題] 請問解ODE使用if 已回收

看板MATLAB作者 (貓與鋼琴)時間14年前 (2010/05/20 22:19), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/3 (看更多)
大家好: 我想請問一下在解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
方程式切換的意思是啥?把原始問題 PO 上來吧!
05/20 22:57, 1F

05/20 23:10, , 2F
原始的 好!我整理一下
05/20 23:10, 2F
文章代碼(AID): #1BzKKCQc (MATLAB)
文章代碼(AID): #1BzKKCQc (MATLAB)