1

Mathematica NDSolveの制約について質問があります

2 つの線形微分方程式がある場合

NDSolve[x'[t]= A x[t]+B y[t], 
        y'[t]= C x[t]+D y[t], 
        x[0]==0.002, y[0]==0.005, {x,y}, {t,0.10000}]

制約を課すにはどうすればよいですか

x[t]+y[t] == 1 

いつでも

ありがとう

4

2 に答える 2

2

答えは、一般的にはできないということです。これは Mathematica の制限ではなく、数学の制限です。

3 つの方程式を同時に解こうとしています。

x' = Ax+By
y' = Cx+Dy
1 = x + y

a,b,c,dMathematica の問題を避けるために小文字を使用します。

ベリサリウスが示唆するように、手動で置換する必要はありません。そのうちの任意の 2 つを選択して、Mathematica に解を求めることができます。

a = 1; b = 2; c = 3; d = 4; x0 = 0.2; y0 = 0.8;

NDSolve[{x'[t] == a x[t] + b y[t], y'[t] == c x[t] + d y[t], 
 x[0] == x0, y[0] == y0}, {x[t], y[t]}, {t, 0, 1000}];
Plot[Evaluate[ReplaceAll[{x[t], y[t]}, %]], {t, 0, 0.01}]

NDSolve[{x'[t] == a x[t] + b y[t], x[t]+y[t]==1, 
 x[0] == x0, y[0] == y0}, {x[t], y[t]}, {t, 0, 1000}];
Plot[Evaluate[ReplaceAll[{x[t], y[t]}, %]], {t, 0, 0.01}]

NDSolve[{y'[t] == c x[t] + d y[t], x[t]+y[t]==1,
 x[0] == x0, y[0] == y0}, {x[t], y[t]}, {t, 0, 1000}];
Plot[Evaluate[ReplaceAll[{x[t], y[t]}, %]], {t, 0, 0.01}]

これらのいずれかが機能するためには、定数を指定する必要があることに注意してくださいa,b,c,d,x0,y0(そして、2 番目と 3 番目の定数の合計を 1 にする必要があります) x0y0

あなたが尋ねたように、私はNDSolveを使用していますが、DSolve代わりにこれらのいずれかを解決することもできます(定数の固定値の有無にかかわらず):

Clear[a,b,c,d,x0,y0];

DSolve[{x'[t] == a x[t] + b y[t], y'[t] == c x[t] + d y[t], 
 x[0] == x0, y[0] == y0}, {x[t], y[t]}, t]

DSolve[{x'[t] == a x[t] + b y[t], x[t]+y[t]==1, 
 x[0] == x0, y[0] == 1-x0}, {x[t], y[t]}, t]

DSolve[{y'[t] == c x[t] + d y[t], x[t]+y[t]==1,
 x[0] == x0, y[0] == 1-x0}, {x[t], y[t]}, t]

ただし、3 つの関数方程式と 2 つの関数を使用すると、それらすべてを同時に解くことはできないことに注意することが非常に重要です。によって生成される 3 つのグラフNDSolveと によって生成される 3 つの解のセットDSolveが異なるのはそのためです。1-x0後者の 2 つのケースでは、初期値として指定することにより、明示的に x[0]+y[0]=1 を強制する必要があることに注意してください。

3 つの方程式があるため、システムが矛盾しているか過剰決定されているかのいずれかになります。3 つすべてを同時に解こうとすると、Mathematica はエラーを返します。

NDSolve::overdet:
"There are fewer dependent variables, {x[t],y[t]}, than equations, so the
system is overdetermined."

(同様ですDSolve。)

の選択a=1,b=2,c=3,d=4により、一貫性がなくなります (したがって、3 つのグラフは一致しません)。または何かをいじって、それらがどのように関係しているかを確認することができますがManipulate、3 つの方程式すべてについて解を強制的に一致させる方法 (仮にあったとしても) を決定するために、私が思いついた基本的な方法が 2 つあります。

  1. 微分するだけ1=x+yです。これは、つまり、全体に0=x'+y'制限があることを意味します。これは実際には元の制約と矛盾しています。ax+by=cx+dyy=(c-a)/(b-d)xx+y=1

  2. DEx'=ax+byとの線形システムを考えy'=cx+dyます。解が直線になるためには、固有ベクトルの方向にあり、原点を通らなければなりません。あなたの制約x+y=1はこれらの基準を満たさない線であるため、2 つの DE の解は代数方程式を満たしません。

PS 元のコードにタイプミスがあると思います。あなたはおそらくはいしたい{t,0,10000}ですか?

于 2014-08-25T17:19:21.280 に答える
-1

例を試してください:

DSolve[{x'[t] == A x[t] + B (1 - x[t]), x[0] == 2/10}, x[t], t]
于 2013-06-11T13:17:08.517 に答える