DSolveが私のODEシステムの解決策を見つけられないのはなぜですか?



Why Cant Dsolve Find Solution



解決:

なぜこれが機能しないのかわかりません。誰かが理由を見つけるまで、連立方程式を解くための回避策は次のとおりです。

ode = {x '[t] == x [t] / t-y [t]、y' [t] == x [t] + y [t] / t}

変数変換$ x(t)= t X(t)$および$ y(t)= tY(t)$を使用して、



頌歌/。 {x->((#X [#])&)、y->((#Y [#])&)}(* X [t] + t X '[t] == X [t] -t Y [t]、Y [t] + t Y '[t] == t X [t] + Y [t] *)

これは今では簡単に解決されますDSolve:

DSolve [%、{X [t]、Y [t]}、{t}](* X [t]-> C [1] Cos [t] -C [2] Sin [t]、Y [t] -> C [2] Cos [t] + C [1] Sin [t] *) 

Mathematicaで解く別の方法があります。



begin {align *} x ^ { prime} left(t right)&= frac {x left(t right)} {t} -y left(t right)\ y ^ { prime} left(t right)&= x left(t right)- frac {y left(t right)} {t} end {align *}

次のように書く

$$ dot {X} = AX $$



ここで、$ A = begin {pmatrix} frac {1} {t}&-1 \ 1& frac {-1} {t} end {pmatrix} $。解が$ X left(t right)= X left(0 right)e ^ { int_ {0} ^ {t} A left( tau right)d tau} $であると仮定します。 。ただし、これは(これは行列時変システムであるため)$ A $が$ e ^ { int_ {0} ^ {t} A left( tau right)d tau} $と通勤する場合にのみ機能します。つまり、$$ A left(t right)e ^ { int_ {0} ^ {t} A left( tau right)d tau} = e ^ { int_ {0} ^ {t} A left( tau right)d tau} A left(t right)$$

それが通勤しない場合、物事はもう少し複雑になります。 Mathematicaを使って、この例では実際に通勤していることを確認できるので、幸運です

(mat = {{1 / t、-1}、{1、1 / t}})// MatrixForm(bmat = MatrixExp [Integrate [mat、t]])// MatrixForm

Mathematicaグラフィックス

mat.bmat == bmat.mat

Mathematicaグラフィックス

したがって、Mathematicaにそれを解決するように頼むことができます。MatrixExp

x0 = {c1、c2}; (*積分定数*)(sol = x0.bmat)// MatrixForm

Mathematicaグラフィックス

上記が解決策です。最初の行は$ x(t)$で、2番目の行は$ y(t)$です。

Mathematicaがそれを解決しなかったのはなぜですか?知らない。


バージョン11.1で修正されましたDSolveはそれを直接解決できます

$ Version

11.1.0 for Microsoft Windows(64ビット)(2017年3月13日)

ClearAll [x、t、y]; DSolve [{x '[t] == x [t] / ty [t]、y' [t] == x [t] + y [t] / t}、{y [t]、x [t] }、t] {{x [t]-> t C [1] Cos [t] -t C [2] Sin [t]、y [t]-> t C [2] Cos [t] + t C [1]罪[t]}}