2017-07-17 45 views
0

步驟在我想在MATLAB使用for循環來解決以下DDE:具有小時間求解DDE for循環

xdot(t) = Ax(t) + BKx(t-h) 

其中:

A = [0 1 ; -1 0.1]; 
B = [0 ; 1]; 
h = 0.2; 
K = [-0.0469 -1.7663]; 
t = [0 5] 

與常規方法解決,這是簡單和結果是可以接受的。

sol = dde23(ddefun,lags,history,tspan,options,varargin) 

但是,當我嘗試使用for循環解決它時,結果是錯誤的。這是我for循環的簡單代碼。

time = 0:0.001:5; 
for i = 2:5001 
x(:,1) = [1 -1]; 
history(:,1) = [1 -1]; 
[t h] = ode23(@(t,h)histExam1(t,h,A,B,K),[time(i-1) time(i)],history(:,i-1)); 
history(:,i)= h(end,:); 
sol = dde23(((@(t,y,z)ddefun(t,y,z,A,B,K))),0.2,history(:,i),[time(i-1) time(i)]); 
x(:,i)=sol.y(:,end); 
end 

我認爲,這段代碼唯一的問題是我的時間步長和延遲輸入。我對這兩個代碼都使用相同的dde函數,所以它不會成爲問題。我想在for循環中解決DDE的原因是「BK」值,它與狀態相關(不在此簡單示例中),並且在每個時間步中我需要更新「BK」。
enter image description here

上面用傳統方法繪製的正確答案。 enter image description here 上面畫出了我使用「for循環」的錯誤答案。 有趣的是,正確答案對延遲很敏感。但延遲不會影響第二種方法的答案。

+0

你的時間跨度是從0到5的第一sectio:TSPAN = [0 5],但隨後在循環它開始在[0.001〜0.002] .. 。那是你要的嗎?它也看起來像你有兩個輸入你的滯後,0和02,是否正確? – Flynn

+0

是的,循環在0.001到0.002之間,延遲是0.02。對這樣的方程進行建模是否可行?不,我只有一次延遲。 BKx(t-h)其中h = 0.02。 – Cena

+0

好吧,首先確保代碼中的0,02實際上是0.02。然後通過一個循環,打印出你得到的結果與你應該得到的結果,以便我們看到你遇到的問題類型。 – Flynn

回答

0

好的。經過數週的思考,終於找到了解決方案。 只需:

sol = dde23(((@(t,y,z)ddefun(t,y,z,A,B,K))),0.2,[1;-1],[0 time(i)]); 

讓神奇的事情發生。 該代碼可以幫助您在每個時間步更新狀態。我希望它能在將來幫助你。

一切順利,

新浪