2013-05-08 201 views
1

我想用Matlab中的函數ode45來求解一個帶有三個微分方程的系統。我真的不明白我得到的錯誤,我可以用一些幫助來理解我做錯了什麼。在Matlab中求解微分方程,ode45

微分方程如下:

F1 = -k1y1+k2(y2-y1) 
F2 = -k2(y2-y1)+k3(y3-y2) 
F3 = -k3(y3-y2) 

而且我在Matlab代碼是這樣的:

function dz = kopplad(t, z) 
global m1 m2 m3 k1 k2 k3 
dz = [z(2) 
-k1*z(1)/m1 + k2*(z(2)-z(1))/m1 
z(4) 
-k2*(z(2)-z(1))+k3(z(3)-z(2))/m2 
z(6) 
-k3(z(3)-z(2))/m3]; 

global m1 m2 m3 k1 k2 k3 
m1 = 0.75; m2 = 0.40; m3 = 0.65; 
k1 = 0.85; k2 = 1.1; k3 = 2.7; 
[t, z] = ode45(@kopplad, [0, 50], [0 -1 0 1 0 0]); 
plot(t, z(:,1)) 
hold on 
plot(t,z(:,3),'--') 
plot(t,z(:,5),'*') 
legend('y_1', 'y_2', 'y_3'); 
hold off 

我recieving的錯誤有以下幾種:

Attempted to access k3(1.00002) ; index must be a positive integer or logical.

Error in kopplad (line 3) dz = [z(2)

Error in ode45 (line 262) f(:,2) = feval(odeFcn,t+hA(1),y+f*hB(:,1),odeArgs{:});

Error in diffekv (line 6) [t, z] = ode45(@kopplad, [0, 50], [0 -1 0 1 0 0]);

+2

你能分享你收到的錯誤嗎?可能它會幫助其他人理解你的問題的原因是什麼。 – Vadim 2013-05-08 20:26:04

+2

沒有實際告訴我們你得到了什麼錯誤,你現在強迫其他人嘗試執行你的代碼。讓我們容易,給我們一個提示!包含COMPLETE錯誤消息。讓我們輕鬆就意味着給你答案會更快/更容易。 – 2013-05-08 20:47:30

+0

我收到的錯誤如下: 試圖訪問k3(1.00002);索引必須是正整數或邏輯。 錯誤kopplad(第3行) DZ = [Z(2) 錯誤ODE45(線262) F(:,2)= feval(odeFcn,T + HA(1)中,y + F *爲hB (:,1),odeArgs {:}); diffekv中的錯誤(第6行) [t,z] = ode45(@ kopplad,[0,50],[0-1 0 1 0 0]); – Bobbie 2013-05-09 08:53:26

回答

0

自從我做了一些Matlab編程以來,一段時間過去了,但據我記憶,您應該將變量傳遞給函數如果我理解你以正確的方式編碼,則寫入@(x,y)kopplad(x,y)。如果其餘的(全局變量和方程)是正確的,一切都會好的。