アプリ版:「スタンプのみでお礼する」機能のリリースについて

DSolve[y''[x] == a^2*y[x], y[x], x]
をmathematicaで実行すると、
{{y[x] -> \[ExponentialE]^(a x) C[1] + \[ExponentialE]^(-a x) C[2]}}
という解が得られます。
x→無限大でy[x] = 0になる条件を加えて同じ微分方程式を解きたいのですが、
DSolve[{y''[x] == a^2 *y[x], y[Infinity] == 0}, y[x], x]
を実行すると、
DSolve::bvlim: For some branches of the general solution, unable to \
compute the limit at the given points. Some of the solutions may be \
lost. >>
というエラーメッセージが出て計算することができません。

無限大の条件を含む微分方程式をmathematicaを使って解く方法を教えてください。

A 回答 (3件)

すべて計算機まかせにするのは…


aの正負によりますが、a> 0として
e^(a*x)、e^(-a*x)それぞれの項の極限を考えてみるとどうですか?
    • good
    • 0

Mathematica はよく知らないのだが、エラーメッセージから見て、


a の符号が判らないことが問題なのかなと思う。
a の符号が変わっても、第一項と第二項が入れ替わるだけだから、
a≧0 に限定してしまえば、解決するような気がする。
DSolve の条件式に a>=0 と書けるのだろうか? それが無理なら、
a^2 を b^4 で置き換える手は、どうだろう。
(質問も、この回答も、かなりスレ違いっぽいけれど。)
    • good
    • 0

ご参考までに。



y = c[1] exp(ax)+c[2] exp(-ax)
という一般解において、a≧0としてかまいません。(aが負のときは-aが正になりますから)

a>0のとき
第一項はx→+∞で
c[1] exp(ax)→(c[1]の符号)×∞

第二項はx→+∞で
c[2] exp(-ax)→0

となるので、x→∞でy = 0となる解は一般にc exp(-ax) 但しa>0
の形になります。

またa=0のときは
exp(ax)=exp(-ax)=1

ですのでy = c[1]+c[2]=(定数)
すなわちy=0のみが解となります。
しかしこれはy=c exp(-ax)でc=0の場合でもあるので、結局y=c exp(-ax)、但しa>0, cは任意の定数、が条件を満たす一般の解になります。

mathematicaを用いる場合、aが正か負かでx→∞で exp(-ax)の挙動が全く変わってしまうので、エラーメッセージが出たんだと思われます。この場合a>0として解く、特にa=1の場合を解かせて一般のaに対する解は自分で定数倍を付ける、というのがよいと思います。

それ以外の方法だと、自分でプログラムを組むしかないでしょう。しかしプログラムを組むのは多少なりとも手間ひまかかりますし、mathematicaは多くの計算をやってくれるので、自分でアナログ計算する部分とmathematicaにやらせる部分を分けてやることをお勧めします。
    • good
    • 0
この回答へのお礼

ありがとうございます。

a=9
DSolve[{y''[x] == a^2 *y[x], y[Infinity] == 0}, y[x], x]

というようにaに正の数を指定することでうまく計算することができました。

でも、簡単な計算だとこれでも良いのですが、代数で計算することはできないのでしょうか?


DSolve[{y''[x] == a^4 *y[x], y[Infinity] == 0}, y[x], x]
DSolve[{y''[x] == Abs[a]^2 *y[x], y[Infinity] == 0}, y[x], x]
DSolve[{y''[x] == a^2 *y[x], y[Infinity] == 0, a>0}, y[x], x]

など、それらしいコマンドを試してみましたが、うまく計算することができませんでした。
良い方法があれば教えてください。

お礼日時:2013/03/22 16:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!