簡體   English   中英

解耦合非線性微分方程

[英]Solving coupled nonlinear differential equations

我有一個微分方程如下:

%d/dt [x;y] = [m11 m12;m11 m12][x;y]
mat = @(t) sin(cos(w*t))
m11 = mat(t) + 5 ; 
m12 = 5;
m21 = -m12 ;
m22 = -m11 ;

因此,我的矩陣特別依賴於t。 由於某種原因,我很難用ode45解決這個問題。 我的想法如下(我想在定義的時間T求解x,y):

t = linspace(0,T,100) ; % Arbitrary 100
x0 = (1 0); %Init cond
[tf,xf] = ode45(@ddt,t,x0)

function xprime = ddt(t,x)
ddt = [m11*x(1)+m12*x(2) ; m12*x(1)+m12*x(2) ]
end

我得到的第一個錯誤是

Undefined function or variable 'M11'.  

有沒有一種更清潔的方式可以執行此操作?

我假設您正在腳本中運行它,這意味着您的函數ddt本地函數,而不是嵌套函數 這意味着它無權訪問矩陣變量m11等。另一個問題是,您將需要在ddt內的特定t值處評估矩陣變量,而當前代碼則不這樣做。

這是另一種適合您的設置方式:

% Define constants:
w = 1;
T = 10;
t = linspace(0, T, 100);
x0 = [1 0];

% Define anonymous functions:
fcn = @(t) sin(cos(w*t));
M = {@(t) fcn(t)+5, 5; -5 @(t) -fcn(t)-5};
ddt = @(t, x) [M{1, 1}(t)*x(1)+M{2, 1}*x(2); M{1, 2}*x(1)+M{2, 2}(t)*x(2)];

% Solve equations:
[tf, xf] = ode45(ddt, t, x0);

暫無
暫無

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

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