• ベストアンサー

mathmaticaで連立方程式を解く

mathmaticaで次のような連立方程式をSolventを用いて解こうとしたのですがうまくいきませんでした。どうすればうまくいきますか? -0.82a+b+f+0.8g=0, a-b+c=0,b-c+d=0, c-d+e=0, d-e+f=0, e-f+a=0, 0.8a-0.82g=0, a^2+b^2+c^2+d^2+e^2+f^2+g^2=1

質問者が選んだベストアンサー

  • ベストアンサー
  • info22
  • ベストアンサー率55% (2225/4034)
回答No.2

#1です。 A#1の補足質問の回答 >同じ要領で下の計算をしようとしたらまた答えが出なくなりました。 なぜ解けないか? それは、未知数より方程式の数か1つ多いからです。 その余分な1つ分の方程式が1次独立でなく、他の方程式は全部1次独立であれば、未知数の数と一次独立な方程式の数が同数になって解けます。 理論的には、未知数7個、方程式8個で1次独立な方程式が1つ混じっているのであれば、解けますが、実数の数値計算の場合、実数の定数の打切り誤差が入るため、一次独立でない方程式がなくなって、8個の一次独立な方程式になって、変数は7個となれば、方程式は解が存在しない不能な状態に陥ってしまいます。 解決方法は、2つ考えられます。 方法1)どれか1つの方程式を抜くことです。残りの7つの方程式を連立にして解けば、解が出せるでしょう。このやり方では計算機の数値計算の誤差のオーダーは推測ができません。 方法2)誤差分としての未知数hを1つ追加して、(小数点以下の数値を含む実数係数を持つ)1つの方程式の左辺にhを挿入し、そしてそのhを解くべき未知数の組に加えると解が出せます。そしてhの値からどの位のオーダーの誤差が入っているかの推測ができます。 方法2)で最初の方程式の左辺にhを加えて、連立方程式をwxMaximaで18桁の精度で解いてみた所、a~fの解が小数点第1位の桁から有効桁数が現れる正負の数値だったのに対し、hは小数点第8位から有効桁数が現れる数値として出てきています。つまり、計算精度の桁数は7桁位と推測されます。 方程式の係数に見かけ上、有効桁数16桁の係数が使われた方程式も、実質の計算精度は有効桁数が8桁程度しかないということを物語っているかと思います。多分8番目の式は理論式だと思われるので誤差は無いと思いますが、他の方程式の係数が本当に16桁目まで正確に求められているかが問題になります。本来ゼロまたは16桁以下になるべきhが、実際は10^(-8)のオーダーででて来るということは、係数にそれだけの誤差が含まれていると考えて良いかと思います。 数値計算では、冗長な式(一次独立でない方程式)が冗長で無い一時独立でない方程式に変貌して解けなくなることが起こります。補足質問の連立方程式の数値計算がまさにそれに該当します。覚えておけば、今後役立つでしょう。 基本といえば基本的なことですが、方程式の数と未知数の数が一致しないと、解が不能になったり、不定になって、特定の解が求まらなくなるということです。

2001049838
質問者

お礼

返信が遅くてごめんなさい。 2つ目の方法で解くことができました。 今回のことはとてもためになりました、ありがとうございます。

その他の回答 (1)

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.1

mathmaticaは今は使える環境に無いの分かりませんが MapleやwxMaximaでのsolveでは解けました。 式をコピーアンドペーストで貼り付けてやるとエラーになりますので、 定数と変数の積のところに掛け算記号「*」(アスタリスク)を入れてやれば解けると思います。 また、定数の0.82を82/100, 0.8を8/10のように書いてやると答えが実数でなく分数(有理数)形式で表示してくれますのですっきりします。 やってみて結果を補足に書いて見てください。 結果は次のように2組の解が出てきました。 [a=0,b=-1/2,c=-1/2,d=0,e=1/2,f=1/2,g=0], [a=0,b=1/2,c=1/2,d=0,e=-1/2,f=-1/2,g=0]

2001049838
質問者

お礼

ありがとうございました。 おかげさまで同じ回答にたどり着きました。 どうやらスペースの入れ忘れで掛け算ができてなかったっぽいです。 しかしまた問題ができてしまったので、 できればもう少し教えてください。 同じ要領で下の計算をしようとしたらまた答えが出なくなりました。 In[13]= Solve[{-2.0330486504573965*a + b + f + 0.4*g == 0, a - 2.2330486504573965*b + c == 0, b - 2.2330486504573965*c + d == 0, c - 2.2330486504573965*d + e == 0, d - 2.2330486504573965*e + f == 0, e - 2.2330486504573965*f + a == 0, 0.4*a - 0.2330486504573965*g ==0, a*a + b*b + c*c + d*d + e*e + f*f + g*g == 1}, {a, b, c, d, e, f, g}] Out[13]= {} こうなったんですがこれはどこが問題なんでしょう?

関連するQ&A