- ベストアンサー
ニュートン法による3連立非線型方程式の解法プログラム
- ニュートン法を使用して3つの未知数の解を求めるためのC言語プログラムを教えてください。
- 代入法などの手計算では解くのが困難な非線型方程式を、プログラミングによって効率的に解く方法を教えていただきたいです。
- 具体的な例として、「2*x*x*x + 4*x*y + cos(z) = 0」「x*x*y*z + logz + 2*y = 0」「2*x*x + y*z +z*z*z +4 + e~(-xy) =0」の3連立非線型方程式を解くためのプログラムを教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>F(x, y, z) = x*x*x + y*cos(z) + x*y この F の (xo, yo, zo) における偏微係数 (Fx = ∂F(xo, yo, zo)/∂x など)なら、 数式表示のままで偏微分するのが楽チンかも。 Fx = 3*xo^2 + yo Fy = cos(zo) + xo Fz = -yo * sin(zo)
その他の回答 (2)
>.... ニュートン法においては式が長かろうが短かろうが複雑だろうが必ず各式を微分しなければならないということですか?... 一言でいえば "Yes" です。 やりかたはいろいろあるでしょうけど、ともかく変化率が必要。 ・数式の段階で偏微分。 ・近接二点の差から偏微係数(近似値)を勘定。 実は、「解の存在性」のほうが難問なのですが…。 線型関数かそれに近い場合でないと、見極め難いのでしょうね。
お礼
なるほど。。丁寧なお返事ありがとうございます。 あつかましいようですがもう一つ質問させてください。 もし下記のような数式があった場合は、 x*x*x + y*cos(z) + x*y = 0 この式を分解してx,y,zの塊にした後それぞれdx、dy、dz、と微分するのでしょうか? 無知ですいません。よろしくお願いします。
記法を一般化して、 F(x, y, z) = 0 G(x, y, z) = 0 H(x, y, z) = 0 としましょう。 初期近似解 (xo, yo, zo) にて、 F(xo, yo, zo) = ao G(xo, yo, zo) = bo H(xo, yo, zo) = co になったとします。 ・Newton ふうの改善解 (x1, y1, z1) = (xo+dx, yo+dy, zo+dz) を求める一法(局所的線形化)を…。 F, G, H の (xo, yo, zo) における偏微係数 (たとえば、∂F/∂x を Fx と書く) を使い、 Fx*dx + Fy*dy + Fz*dz = -ao Gx*dx + Gy*dy + Gz*dz = -bo Hx*dx + Hy*dy + Hz*dz = -co と連立させ、その解 (dx, dy, dz) を求める。 (x1, y1, z1) = (xo+dx, yo+dy, zo+dz) が Newton ふうの改善解。
お礼
回答ありがとうございます! 上記の回答と言うことは、ニュートン法においては式が長かろうが短かろうが複雑だろうが必ず各式を微分しなければならないということですか? 理解が悪くてすいません。よろしくお願いします。。
お礼
偏微分ですか。なるほど。。 丁寧にありがとうございます。チャレンジしてみます。