• ベストアンサー

5元連立方程式を解きたい

複雑な方程式を解きたいと考えています。 方程式は、未知数は5つ、関係式も5つあるので、 解析的に解くことが可能な5元連立方程式だと思います。 複雑、といっても、高度な関数などが登場するのではなく (せいぜい三角関数程度)、項の数がかなり多いだけです。 とりあえず手計算を試みたのですが、 項を書き下すことすら難しいような状況で、 そのまま計算を進めても、結局、解まで辿り着けたことはありません (数人で挑戦したのですが、みんな駄目でした)。 フリーの数式処理ソフト Maxima も導入して計算させてみたのですが、 エラーを吐いてしまい、やはり解は求まりませんでした (誤植等が無いか何度も確認しましたが、駄目でした)。 他の、有償のソフトならば解ける可能性はあるでしょうか? また、方程式が解析的に解けるものなのかどうかを 判断する方法などがありましたら、お教え下さい。

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

  • ベストアンサー
  • inara
  • ベストアンサー率72% (293/404)
回答No.5

pdfファイルは、URLを直接アドレスバーに入力することで読めました。最小2乗法ですね。私も仕事で、測定データを非線形関数でfittingするときに同じような計算(残差2乗和を偏微分)をしたことがあります。 数式処理ソフト(Maple)で挑戦してみました。 dSax~dSby までは計算可能です(ものすごい長い式)が、この連立方程式の解は出てきませんでした。 そこで、手動操作で変数を減らすために、dSax=0 を a2x について解かせてみましたが、この段階ですでに解が出てきません。 ここであきらめるのも癪(しゃく)なので、途中の変数の次数を調べてみました。Mapleには式の中の変数の最高次数を求めるコマンド degree(式, 変数)があります。 ある変数(文字式)を有理文字式(文字式/文字式)で表したとき、そこに含まれている5変数 a2x, a2y, a2z, b2x, b2y の最高次数をそれぞれ N1, N2, N3, N4, N5, N6 として、その変数を 分子(N1,N2,N3,N4,N5) /分母(N1,N2,N3,N4,N5) と書き表すことにします。 すると、L1~L6 は 分子(4,4,4,2,2)/分母(4,4,4,0,0) でしたので、その次の計算 S = (L1-d1)^2 + (L2-d2)^2 + (L3-d3)^2 + (L4-d4)^2 + (L5-d5)^2 + (L6-d6)^2 では、S は分子(8,8,8,4,4)/分母(8,8,8,0,0) となるはずです(Mapleでは、この段階で最高次数計算が不能となった)。 さらに、S を微分したものは、商の微分法を考えれば、分子、分母とも、最高次数は 16 になると思われます(Mapleでは文字式自身は出ますが、式が複雑すぎて、項別にまとめたり、因数分解はできません。展開された恐ろしく長い式を手計算でまとめるのはちょっと無理)。 したがって問題の5元連立方程式は、5個の「16次多項式/16次多項式=0」を解くということになります。特殊な場合には解析解があるかもしれませんが、一般的には解析的に解けないかもしれません。 Mapleは文字式操作は得意かと思っていましたが、これくらいで計算不能となるとは思いませんでした。私の使ったMapleがVersion5で、しかもStudent版(学生用に機能制限された廉価版)だったせいかもしれませんが、もし、Mapleの最新の正式版をお持ちの方があれば、以下にMapleのコードを書きますので、解は出るのか、どこまで文字式計算可能か調べてみてください。 alpha1:=a1x1*a2x + a1y1*a2y + a1z1*a2z:beta1:=a1x1*(b2x-b1x1) + a1y1*(b2y-b1y1) + a1z1*(b2z-b1z1):gamma1:=a2x* (b2x-b1x1) + a2y* (b2y-b1y1) + a2z* (b2z-b1z1):alpha2:=a1x2*a2x + a1y2*a2y + a1z2*a2z:beta2:=a1x2*(b2x-b1x2) + a1y2*(b2y-b1y2) + a1z2*(b2z-b1z2):gamma2:=a2x* (b2x-b1x2) + a2y* (b2y-b1y2) + a2z* (b2z-b1z2):alpha3:=a1x3*a2x + a1y3*a2y + a1z3*a2z:beta3:=a1x3*(b2x-b1x3) + a1y3*(b2y-b1y3) + a1z3*(b2z-b1z3):gamma3:=a2x* (b2x-b1x3) + a2y* (b2y-b1y3) + a2z* (b2z-b1z3):alpha4:=a1x4*a2x + a1y4*a2y + a1z4*a2z:beta4:=a1x4*(b2x-b1x4) + a1y4*(b2y-b1y4) + a1z4*(b2z-b1z4):gamma4:=a2x* (b2x-b1x4) + a2y* (b2y-b1y4) + a2z* (b2z-b1z4):alpha5:=a1x5*a2x + a1y5*a2y + a1z5*a2z:beta5:=a1x5*(b2x-b1x5) + a1y5*(b2y-b1y5) + a1z5*(b2z-b1z5):gamma5:=a2x* (b2x-b1x5) + a2y* (b2y-b1y5) + a2z* (b2z-b1z5):alpha6:=a1x6*a2x + a1y6*a2y + a1z6*a2z:beta6:=a1x6*(b2x-b1x6) + a1y6*(b2y-b1y6) + a1z6*(b2z-b1z6):gamma6:=a2x* (b2x-b1x6) + a2y* (b2y-b1y6) + a2z* (b2z-b1z6): t11:= (beta1-alpha1*gamma1)/(1-alpha1^2):t21:= (alpha1*beta1-gamma1)/(1-alpha1^2):t12:= (beta2-alpha2*gamma2)/(2-alpha2^2):t22:= (alpha2*beta2-gamma2)/(2-alpha2^2):t13:= (beta3-alpha3*gamma3)/(3-alpha3^2):t23:= (alpha3*beta3-gamma3)/(3-alpha3^2):t14:= (beta4-alpha4*gamma4)/(4-alpha4^2):t24:= (alpha4*beta4-gamma4)/(4-alpha4^2):t15:= (beta5-alpha5*gamma5)/(5-alpha5^2):t25:= (alpha5*beta5-gamma5)/(5-alpha5^2):t16:= (beta6-alpha6*gamma6)/(6-alpha6^2):t26:= (alpha6*beta6-gamma6)/(6-alpha6^2):r1x1:= t11*a1x1 + b1x1:r1y1:= t11*a1y1 + b1y1:r1z1:= t11*a1z1 + b1z1:r2x1:= t21*a2x + b2x:r2y1:= t21*a2y + b2y:r2z1:= t21*a2z + b2z:r1x2:= t12*a1x2 + b1x2:r1y2:= t12*a1y2 + b1y2:r1z2:= t12*a1z2 + b1z2:r2x2:= t22*a2x + b2x:r2y2:= t22*a2y + b2y:r2z2:= t22*a2z + b2z:r1x3:= t13*a1x3 + b1x3:r1y3:= t13*a1y3 + b1y3:r1z3:= t13*a1z3 + b1z3:r2x3:= t23*a2x + b2x:r2y3:= t23*a2y + b2y:r2z3:= t23*a2z + b2z:r1x4:= t14*a1x4 + b1x4:r1y4:= t14*a1y4 + b1y4:r1z4:= t14*a1z4 + b1z4:r2x4:= t24*a2x + b2x:r2y4:= t24*a2y + b2y:r2z4:= t24*a2z + b2z:r1x5:= t15*a1x5 + b1x5:r1y5:= t15*a1y5 + b1y5:r1z5:= t15*a1z5 + b1z5:r2x5:= t25*a2x + b2x:r2y5:= t25*a2y + b2y:r2z5:= t25*a2z + b2z:r1x6:= t16*a1x6 + b1x6:r1y6:= t16*a1y6 + b1y6:r1z6:= t16*a1z6 + b1z6:r2x6:= t26*a2x + b2x:r2y6:= t26*a2y + b2y:r2z6:= t26*a2z + b2z: L1:= (r1x1-r2x1)^2 + (r1y1-r2y1)^2 + (r1z1-r2z1)^2:L2:= (r1x2-r2x2)^2 + (r1y2-r2y2)^2 + (r1z2-r2z2)^2:L3:= (r1x3-r2x3)^2 + (r1y3-r2y3)^2 + (r1z3-r2z3)^2:L4:= (r1x4-r2x4)^2 + (r1y4-r2y4)^2 + (r1z4-r2z4)^2:L5:= (r1x5-r2x5)^2 + (r1y5-r2y5)^2 + (r1z5-r2z5)^2:L6:= (r1x6-r2x6)^2 + (r1y6-r2y6)^2 + (r1z6-r2z6)^2: S:=(L1-d1)^2+(L2-d2)^2+(L3-d3)^2+(L4-d4)^2+(L5-d5)^2+(L6-d6)^2: dSax:=diff(S, a2x):dSay:=diff(S, a2y):dSaz:=diff(S, a2z):dSbx:=diff(S, b2x):dSby:=diff(S, b2y): solve({dSax=0, dSay=0, dSaz=0, dSbx=0, dSby=0}, {a2x, a2y, a2z, b2x, b2y});

hiro2pzbt
質問者

お礼

自分が Maxima で計算してみたときも、 dSax~dSby, つまり微分までは出来たのですが、 これを展開させようとすると詰まってしまう状況でした (もちろん、方程式を計算させても解は出ない)。 しかしまぁ、なんと最高次数 16 ですか! 5 程度かなとか考えていた自分は甘過ぎたようです。 解析解を望むのは、ちょっと難しそうですね。 正式版の Maple を入手できたら、書いていただいたコードを 計算させてやりたいと思います。 計算の挑戦のみならず、丁寧な考察までしていただいて、 本当にありがとうございました。

その他の回答 (4)

  • inara
  • ベストアンサー率72% (293/404)
回答No.4

equation.pdf のほうは、「このページは準備中です」と出て読めないのですが、これは equation.txt と同じでしょうか。 equation.txt は読めます(しかし大変な5元連立方程式ですね)。 関数の定義の部分は、Mapleと定義式が若干違いますが理解可能です。diff(S(), a2x, 1) の意味は、関数 S() を a2x で1階微分するという意味ですね? solve のところは括弧の使い方の違いだけですので、これも理解できます。 コードの意味は十分理解できますので、さっそく挑戦してみます。質問はこのまま開いておいてください。

hiro2pzbt
質問者

補足

うーん、URLは確実に合ってるんですが、なぜかクリックするのではつながらないようです。 このURLを直接アドレスバーに入力していただければ、OKみたいです。 http://www.geocities.jp/zacolih0083/study/equation.pdf pdfファイルでは、そもそもこの方程式は一体何なのか、ということを解説しています (仲間内で公開したものなので、解説不足な点があるとは思いますが  数式がtxtより読みやすくなってます)。 関数定義は、その通りです。 pdfが読めれば、確認できると思います。 ありがとうございます。よろしくお願いします。

  • inara
  • ベストアンサー率72% (293/404)
回答No.3

計算過程でなく、結果だけが必要なのであれば、手元に数式処理ソフト(Maple)があるので、5元連立方程式を教えていただければ、数式解を解いてみましょう。方程式によっては解析解は見つからないかもしれませんが。

hiro2pzbt
質問者

補足

では、お言葉に甘えて、方程式を紹介させてもらいます。 http://www.geocities.jp/zacolih0083/study/equation.pdf 「これを解けば良い」という形にまとまっていないので、 分かりにくいと思います。すみません。 Maximaで計算させたコードも載せておきます。 http://www.geocities.jp/zacolih0083/study/equation.txt おそらくMapleでは文法が違うので、そのままでは使えないとは思いますが、 参考になればなりよりです。 お時間があるときで構いませんから、 チャレンジしてみていただけると大変助かります。

回答No.2

近似的な数値解でよれば、(かつ、Excel がお手元にあれば)Excel のソルバーをつかうというのもひとつの手かと思います。 下記の URL に少し触れてあるのを見つけました。 (ページの下の方の、「大人は誰も教えてくれない連立方程式の解法」) ただ、数値解析なので、初期条件によってはうまく収束しないとか、そういったことも起こることがあります。

参考URL:
http://www.sun-inet.or.jp/~yaneurao/rsp/rsp29to2F.html
hiro2pzbt
質問者

補足

実は、数値計算はすでに行なっているのです。 一応、C言語を扱えるので、それなりに工夫して近似解を 求められるようにはなったのですが、 究極的にやりたいことは、方程式の各種パラメータを様々に変更し、 その度に解を求める、というものなのです。 その数も数千、数万という数なので、 数値計算ではなかなか実用的なほど効率化できないので、 解析的に求められないか、ご相談させてもらいました。

  • uninin
  • ベストアンサー率20% (26/129)
回答No.1

次数はいかほどでしょうか。

hiro2pzbt
質問者

補足

きちんと把握できていないのですが、 おそらく 5 程度だと思います。

関連するQ&A

  • 2元2次連立方程式

    次の連立方程式の解き方を教えてください。 ax^2+bxy+cy^2=0 dx^2+exy+fy^2=0 ここで、a,b,c,d,e,fは定数とする。2つの未知数に対して、2つの方程式があるので、理論上は解けると思うのですが、自明な解(x,y=0)しか求めることができませんでした。 どなたかこの2元2次の連立方程式の解き方を教えてください。よろしくお願いいたします。

  • 連立方程式について

    連立方程式について 連立方程式の解を求める際、係数を揃えるために、両辺に同じ数をかける時 がありますが、 ふたつの方程式が組み合わさった、連立方程式の場合、一方の方程式ともう一方の方程式に当てはまる解を求めているのに、なぜ一方の式の両辺に同じ数をかけた方程式ともう一方の方程式とを計算できるのですか?数をかける前と後の方程式は同じということですか?そうだとしたら、なぜ数をかけているのに同じということになるのでしょうか。 分かりずらい文章ですみません、、

  • 連立方程式 未知数より方程式の数が多いとき

    線形代数での連立方程式についてです。 今現在線形代数を勉強しているのですが、未知数より方程式の数が多いときはどうなるのでしょうか? 解は一つに定まるか不定になる思うのでしょうか。。。。 なぜなら Guass elimination で計算すると、たとえば (1) (2) 1 2 | 3 1 2 | 3 0 1 | 2 0 1 | 2 0 0 | 0 0 0 | 2 (1)のような場合だと解が一つに定まり、(2)なら不定だになると思うからです。 しかし、ネットで検索すると以下のサイトで、”方程式の個数が未知数の個数よりも多い連立1次方程式は,一般には解が存在しない.”とありました。 http://www.geisya.or.jp/~mwm48961/linear_algebra/simul_eq1.htm なぜでしょうか?

  • 連立方程式の解法

    連立方程式: Ax=B (A;係数行列、x;未知数、B;右辺行列) において detA = 0 であった場合、この解は一義的には定まらない という事なのですが、 このことはSOR法などの反復法も 使えないと言うこと言ってるのですか? detA = 0 の連立方程式はどうしても解けないのですか?

  • 未知数の多い連立方程式

    未知数が9個ある連立方程式を手計算で解きたいのですが、スムーズに解ける方法があれば教えて下さい。

  • 連立方程式について教えて下さい。

    多元連立方程式について教えて下さい。 資料では、次式は、X,Y,Z,Q1,Q2,Q3,Q4が未知数の多元連立方程式で、 Q1=0.5*√(X-Y-0.5) Q2=0.4*√(Y-X-0.3) Q3=0.3*√(Y-Z-0.4) Q4=0.2*√(Z-Y-0.4) ΣQ=Q1+Q2+Q3+Q4=0 Q1+Q2+Q3+Q4=0になるようなX,Y,Zを求めることに帰する、と書いてあるのですが、 このような方程式の解を手計算で求めることはできるのですか? 手計算で可能だとしたら、その解法を教えて下さい。 また、手計算で無理だとしたら、どのように考えればよろしいのですか? なお、参考の書籍&URLなどがありましたら教えて下さい。 どうかよろしくお願いいたします。

  • 連立1次方程式の構成の問題について

     3つの変数(a,b,c)を未知とする、連立1次方程式があり、さらに、(b,c,d)を未知数とするもう1つの連立1次方程式があります。未知数としてb,cの部分は重なっていますが、今のままでは2つの連立1次方程式は全く別ものとなっています。しかし、やはりb,cは共通だと考えた場合、今度は(a,b,c,d)を未知数とする4×4の連立方程式を構成して解くということになります。  つまり、2組の連立1次方程式(3元)から1つの4元の連立1次方程式を作るということになります。この場合、4元連立1次方程式を作る方法は唯一であるはずなのですが、どのように考えたらいいでしょうか。解き方としては逆行列などを作用させて...と考えます。変な行列を作ってしまたら(例えば1つの行が(0,0,0,0)とか)になると逆行列が作れず唯一の解が出ないと思います。でもちょっと考えたら(作り方をまちがえたら?)そうなってしまう可能性があります。このように2つの連立方程式からちょっと大きな別の連立方程式を作って逆行列で解く方法について教えて頂きたいのですが。 なお、3×3は行列式は非ゼロであり、至極無理のないものを考えています。変なマトリックス(係数が10^(-8)とか)は全く想定していません。 最終的にはプログラム化していくことを考えていますが、今はその前段階の考え方についてお尋ねします。 よろしくお願いします。

  • 連立方程式はなぜ解ける?

    中学で連立方程式を習って以来、 「文字2つに式2つだから解けるよね。」とか、「未知数3つに式が3つだから解けるね。」などと当たり前のように学校や塾で言われてきました。 初めは戸惑った記憶があるのですが、何度も言われたり自分で連立方程式を解くうちに「一般に未知数と式の数が同じ(あるいは式の方が多い)ならば解けるのか」ということを経験的に納得してきました。 しかし思い返すと、(私の記憶が正しければ)、学校の教科書に「一般に未知数と式の数が同じ(あるいは式の方が多い)ならば解ける。」なでという記述はなかったと思います。 基本的ながら、数学の一種のセンスとして重要なものの1つだと私は思うのですが、なぜ教科書には載っていないのですか? また、私が中学生に連立方程式の解き方を教えている際に、「文字数2つに式2つだから解けるね。」と言った時、「なんで?」と言われたらなんと答えたらいいのでしょうか? (「経験的に。」としか答えられません・・・。) また、(多分あると思いますが)式と未知数の数が同じでも絶対(どんなに数学が発達しても)解けない連立方程式というのはあるのでしょうか? 尚、当方は高校数学までしか知識ありません・・・。

  • 不定を含む連立方程式

    x * 0 = 0 という方程式では、x は不定(解はすべての数)だと思います。 x * 0 = 1 という方程式では、不能(解はない)だと思います。 では、連立方程式なら、解はどうなるでしょうか? (A) x * 0 = 0 (B) y * 0 = x という連立方程式を解を答えてください。

  • 連立方程式を解きたい!

    気体の実験の結果をまとめるために、たくさんの連立方程式をとかないといけません。しかも、解があるのかもよくわからないのですが・・・。例えば以下のような連立方程式です。 y=(2621.28x-94332.37)/(-207.01x-213.45) y=-(160.73x+40124.02)/(115.06x+786.02) こういう式をたくさん解くために、エクセルでやる方法やフリーソフトなどは無いのでしょうか?がんばって手で解いていくしかありませんか?それとも、上の問題でも簡単に関数電卓などで解けますか?連立ではなくて、因数分解をする手前まではできたのですが、そこから難しくて・・・。 ご存知の方教えてください!!!