2015-08-23 65 views
0

所以我想創建一個龍格庫塔功能,這是我的代碼:ODE龍格庫塔MATLAB錯誤

function [t,U] = RK(f, n, eta, interv) 
h = (interv(2)-interv(1))/n; 
t = interv(1):h:interv(2); 

v(1) = eta(1); 
w(1) = eta(2); 
for i=1:n 
    k1 = f([v(i),w(i)]); 
    k2 = f([v(i),w(i)]+h*k1/2); %f(t(i)+h/2, u(:,i)+h*k1/2); 
    k3 = f([v(i),w(i)]+h*k2/2); 
    k4 = f([v(i),w(i)]+h*k3); 

    v(i+1) = v(i) + h*(k1(1)+2*k2(1)+2*k3(1)+k4(1))/6; 
    w(i+1) = w(i) + h*(k1(2)+2*k2(2)+2*k3(2)+k4(2))/6; 
end 
U = [v;w]; 
end 

其中u爲2行n + 1列的矩陣,這裏的問題當我嘗試執行此功能,例如:

RK(sin, 10, [0,1], [5,15]) 

我得到的錯誤not enough input arguments但是當我嘗試執行由罪惡每一件事情的作品中的代碼,腳本和更換f和我得到在U矩陣 燦有人告訴我們什麼是解決方案?

+1

您試圖將罪名用作匿名函數。我沒有任何這方面的經驗,但是這裏散佈着關於這方面的信息。 – Adriaan

+0

謝謝A. Visser我只是把@添加到RK中(@sin,....) –

+0

然後我會做出回答。 – Adriaan

回答

2

您正在使用sin作爲函數句柄。只需添加@符號,即可設置。

RK(@sin, 10, [0,1], [5,15])