2021-01-13 Matlab求解微分代数方程 (DAE)
生活随笔
收集整理的這篇文章主要介紹了
2021-01-13 Matlab求解微分代数方程 (DAE)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Matlab求解微分代數方程 (DAE)
什么是微分代數方程?
微分代數方程是一類微分方程,其中一個或多個因變量導數未出現在方程中。方程中出現的未包含其導數的變量稱為代數變量,代數變量的存在意味著不能將這些方程記為顯式形式 y′=f(t,y)。
ode15s?和?ode23t?求解器可以使用奇異質量矩陣?M(t,y)y′=f(t,y)?來解算微分指數為1的線性隱式問題,包括以下形式的半顯式 DAE
y′0=f(t,y,z)
0 =g(t,y,z)?
在此形式中,由于主對角線存在一個或多個零值,因此代數變量的存在會產生奇異質量矩陣。
?
默認情況下,求解器會自動檢驗質量矩陣的奇異性,以檢測 DAE 方程組。如果提前知道奇異性,則可將 odeset 的 MassSingular 選項設為?'yes'。對于 DAE,還可以使用 odeset 的 InitialSlope 屬性為求解器提供 y′(0)?的初始條件估計值。
舉個例子
其中x1(0)=0.8;x2(0)=x3(0)=0.1;
1)方程寫成DAE形式
2)編程求解
?
%% clcclearclose allodefun = @(t,x)[-0.2*x(1)+x(2)*x(3)+0.3*x(1)*x(2); 2*x(1)*x(2)-5*x(2)*x(3)-2*x(2)^2; x(1)+x(2)+x(3)-1]; %微分方程M = [1 0 0;0 1 0;0 0 0]; % 質量矩陣options=odeset('mass',M); % 定義mass屬性x0=[0.8;0.1;0.1];[t,x]=ode15s(odefun,[0 10],x0,options);figureplot(t,x(:,1),t,x(:,2),t,x(:,3))grid onlegend('x1','x2','x3')?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的2021-01-13 Matlab求解微分代数方程 (DAE)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021-01-13 Linux下安装l
- 下一篇: 2021-01-20 Python编程特