簡體   English   中英

在 Matlab 中求解矩陣值微分方程

[英]Solve a matrix valued differential equation in Matlab

我正在嘗試解決 ODE 的dF/dt = A*F, F_initial = eye(9)的特定系統。 作為一個 Matlab 新手,我試圖以某種方式使用實現的ode45函數,我在網上找到了有用的建議。 然而,他們都假設 A 是常數,而在我的情況下,矩陣At的函數,換句話說, A隨着每個時間步長而變化。

我已經單獨解決了A並將其存儲在一個 9x9xN 數組中(因為我的網格是t = 0:dt:2N=2/dt是時間步數,而A(:,:,i)對應於它的第 i 個時間步的值)。 但是我無法在ode45實現這個數組來最終解決我的 ODE。

歡迎任何幫助,如果我在解釋我的問題時遺漏了任何重要內容,請告訴我。 謝謝

首先,使用ode45時F必須是列向量。 你永遠不會通過設置 F_initial = eye(9) 得到結果,你需要 F =ones(9,1)。

此外,ode45 (此處的文檔,檢查 tspan 部分)不一定在您提供的時間步長處評估您的函數,因此您無法預先計算 A 矩陣。 在這里,我將假設 F 是一個列向量,A 是一個作用於它的矩陣,可以在每個時間步計算。 如果是這種情況,那么我們可以在傳遞給 ode45 的函數中包含 A,如下所示:

F_initial = ones(9,1);
dt = 0.01;
tspan = 0:2/dt:2;
[t, F] = ode45(@(t,F) foo(t, F, Ainput), tspan, F_initial);

function f = foo(t, F, Ainput)
    A = calculate_A(t, Ainput);
    f = A*F;
end

function A = calculate_A(t, Ainput)
    %some logic, calculate A based on inputs and timestep
    A = ones(9,9)*sqrt(t)*Ainput;
end

@(x) f(x,y) 基本上創建了一個新的匿名函數,它允許您將 y 視為計算中的常量。

希望這對您有所幫助,如果我誤解了什么或者您有其他問題,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM