MATLAB に基づく微分代数方程式の解法 (完全なコード付き)

目次

1. 微分代数方程式を解く

例1

2. 完全陰的な微分方程式

3. 遅延微分方程式の解法

 例 2


1. 微分代数方程式を解く

例1

初期条件:

x_1(0)=0.8、x_2(0)=x_3(0)=0.1

数値解を求めます。

\begin{件}\dot x_1=-0.2x_1+x_2x_3+0.3x_1x_2\\ \dot x_2=2x_1x_2-5x_2x_3-2x_2^2\\x_1+x_2+x_3-1=0 \end{}

ほどく:

①方法1の解決策

この微分代数方程式を行列形式で表すと、次のようになります。

(1) 関数ファイル 

function dx=c7eqdae(t,x)
dx=[-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)*x(2);x(1)+x(2)+x(3)-1];

(2) メイン実行ファイル

clc;clear;
M=[1 0 0;0 1 0; 0 0 0];
options=odeset;
options.Mass=M; %Mass微分代数方程中的质量矩阵(控制参数)
x0=[0.8;0.1;0.1];
[t,x]=ode15s(@c7eqdae,[0,20],x0,options);
plot(t,x)

操作結果:

②方法2:常微分方程式に変換して解く

これは制約から取得できます。

x_3(t)=1-x_1(t)-x_2(t)

元の式に代入すると、次のようになります。

 (1) 関数ファイル

function dx=c7eqdae1(t,x)
dx=[-0.2*x(1)+x(2)*(1-x(1)-x(2))+0.3*x(1)*x(2);...
    2*x(1)*x(2)-5*x(2)*(1-x(1)-x(2))-2*x(2)*x(2)];

(2) メイン実行ファイル

clc;clear;
x0=[0.8;0.1];
[t1,x1]=ode45('c7eqdae1',[0,20],x0);
plot(t1,x1,t1,1-sum(x1'))

 操作結果:

2. 完全陰的な微分方程式

ode15i は完全に暗黙的な微風方程式を解くことができます。フォーマット:

%格式1
[t,y]=ode15i(odefun,tspan,y0,yp0,options)

%格式2
[y0_new,yp0_new]=decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0,options)
%decic 为ode15i计算一致的初始条件

次のコマンドを使用して、特定の関数の詳細を表示できます。

edit hbldae.m

edit ihbldae.m

3. 遅延微分方程式の解法

遅延微分方程式系の一般的な形式は次のとおりです。

暗黙的なルンゲ クッタ アルゴリズム dde23() の形式は次のとおりです。

sol=dde23(f1,τ,f2,[t0,tf])
%sol为结构体数据,sol.x为时间向量,sol.y为状态向量
%f1为延迟微分方程
%τ=[τ1,···,τn]
%f2为t≤t0时的状态变量值函数

 例 2

遅延微分方程式系の数値解を求めます。

ほどく:

状態変数を選択します:

x_1(t)=x(t)、x_2(t)=y(t)、x_3(t)=\ドット y(t)

これにより、一次微分方程式系が得られます。

2 つの時定数を定義します。

\year_1=1、\year_2=0.5

(1) 関数を書く

function dx=c7exdde(t,x,z)
xlag1=z(:,1); %第一列表示提取x(τ1)
xlag2=z(:,2);
dx=[1-3*x(1)-xlag1(2)-0.2*xlag2(1)^3-xlag2(1);...
    x(3);4*x(1)-2*x(2)-3*x(3)];

(2) メイン実行ファイル

clc;clear;
lags=[1 0.5];
tx=dde23('c7exdde',lags,zeros(3,1),[0,10]);
plot(tx.x,tx.y(2,:)) %与ode45()等返回的x矩阵不一样,这是按行排列的

操作結果:

次のコマンドを呼び出して、関数の特定の情報を表示することもできます。

edit ddex1
%具体的例子,编辑器的代码

なお、境界値問題はコンピュータでも解くことができます。

2 次微分方程式の境界値問題の数学的記述は次のとおりです。

y''(x)=F(x,y,y')

この方程式の解は、指定された区間 [a;b] で、次を満たす次の 2 つの境界条件の下で検討されます。

おすすめ

転載: blog.csdn.net/forest_LL/article/details/124570056