2016-09-30 36 views
0

我試圖用函數ode45解決一個相當簡單的ODE(1.命令反應速率),但是雖然我能夠成功地完成,但我並不是100%確定實際發生了什麼。這是參考代碼:使用ode45函數時,odefun的輸入變量是什麼?

x0 = [0.1,0.1]; 
tspan = [0, 10]; 
k = [1, 1]; 

[t_a, x_a] = ode45(@odefun, tspan, x0, [], k); 


plot(t_a, x_a) 
xlabel('t') 
ylabel('x') 
legend('A','B') 

function dxdt = odefun(t,x,k) 
    k1 = k(1); 
    dxdt = zeros(2,1); 
    dxdt(1) = -2*k1*x(1)*x(1); 
    dxdt(2) = k1*x(1)*x(1); 
end 

這將產生預期的結果,但我不明白的是,什麼odefun的輸入參數實際上是(我知道他們代表什麼,但不知道如何創建它們,因爲我從來沒有定義過它們)。文檔對此沒有太大的幫助,所以我想知道,來自哪裏?它們是否由ode45提供?如果是這樣,當odefun是ode45的輸入時可能如何?很顯然,這段代碼並不是完全由我寫的,所以,更具體地說,我很難理解我如何知道我必須使用x(1)。

感謝您的幫助!

+0

該文檔很清楚「odefun」是什麼。它說:「要解決的功能,指定爲定義要集成的功能的功能句柄。」至於'x(1)'完全取決於你的函數。 – Matt

+1

此代碼無法運行。具體來說'dxd'應該是'dxdt'。此外,初始條件只有一個值,但你的'odefun'提供兩個輸出,這意味着你有一個微分方程組。請仔細檢查您的帖子並使用正確的代碼進行更新。 – rayryeng

+0

對不起,從編輯器複製時我很sl I,我糾正了它,並希望更清楚。 @Matt也許我有一些基本的問題,理解handel正在做什麼(我正在閱讀它一段時間,但我不認爲我完全掌握了它在這個特定的上下文中)。但我仍然沒有看到輸入來自哪裏。對不起,如果這是愚蠢的 – YumTum

回答

0

tx輸入由ode45根據您提供的t和x的初始值生成。 ode45用新的t和x值來調用函數,因爲它可以解決問題,新值基於函數的輸出。

相關問題