我想求解以矩陣形式撰寫的 ode 方程。A=[-0.0178 0 -10;0 -0.2352 10;1 -1 0];和B=[0.3313 -8.9335;0 3.7245;0 0]。變數是x=[x1;x2;x3];。輸入是u=[v;f];。xdot=[x1dot;x2dot;x3dot];. 最后 ode 變為 - xdot=A x B u,初始條件為x0=[0;0;0];。輸入為 v=0.05 和 f=0;
如何通過 ode45 的匿名函式求解這個方程。另一個問題是,如果有更大的矩陣比如 100 階,那么很難撰寫單獨的形式,那么如果它們是特定形式,例如 xdot=A x B u,我該如何解決,其中 xdot 是 n * 1,A 是n * n,x 是 n * 1,B 是 n * m,u 是 m * 1。
uj5u.com熱心網友回復:
默認求解器假定 ode 是時間相關的(通常不是)。另外,我喜歡從非常籠統的開始,所以我會在一個單獨的檔案(可能是 mySystem.m)中創建一個函式,其中包含五個變數:t、x、u、A 和 B。它看起來像
function dx = mySystem(t, x, u, A, B)
dx = ... (Insert system equations)
end
然后在您定義 A、B 和 u 以及您最終想要使用類似 ode45 的腳本中,我將創建此函式的匿名實體,該實體具有 ode45 所需的輸入,即 t 和 x。它看起來像:
A = ...;
B = ...;
u = ...;
f = @(t, x) mySystem(t, x, u, A, B);
現在,這個 f 可以很容易地用于 ode45:
tspan = [t0, tf];
x0 = ...;
[t, y] = ode45(@f, tspan, x0);
如果您現在需要更改 B 或 A 或 u,您只需在腳本中進行,您可以將 mySystem 重用于其他問題。
我確實意識到 mySystem 是一個單行函式,也可能是一個匿名函式,但其??他 ode 可能不適合一行,需要一個單獨的檔案。這樣編程變得更加一致。它是由你決定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/437393.html
下一篇:使用MATLAB的廣義特征值問題
