• ベストアンサー

C言語のプログラムの問題で質問です。

C言語のプログラムの問題で質問です。 問題は、 与えられた実数(a,b,c,d)に対して、次の連立非線形方程式の解 を「ニュートン法」を用いて解く。 f1(x,y)=y+ax^2-b=0 f2(x,y)=y^2+cx^2-d=0 ただし初期値(a,b,c,d)を入力でき、上記の方程式の解が画面表示されること。 という問題です。まず、どういう方針で作っていくのかが分かりません。 できるのなら参考例を挙げてもらえればありがたいです。お願いします。

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

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

この方程式に限って言えば、ニュートン法を使わずに解けてしまいますね。 a≠0かつc≠0のとき、 double h = c*c - 4*a*(b*c - a*d); if (h < 0.0) { printf("yは複素数解\n"); } else { double y1 = (c + sqrt(h)) / (2*a); double y2 = (c - sqrt(h)) / (2*a); double xx1 = (b - y1) / a; // x^2 double xx2 = (b - y2) / a; // x^2 if (xx1 < 0.0 && xx2 < 0.0) { printf("xは虚数解\n"); } if (xx1 >= 0.0) { printf("(x, y)=(±%f, %f)\n", sqrt(xx1), y1); } if (xx2 >= 0.0) { printf("(x, y)=(±%f, %f)\n", sqrt(xx2), y2); } } 計算誤差などは考慮していません。

その他の回答 (2)

回答No.2

これ参考になりますかね?もう見ましたかね?

参考URL:
http://pc-physics.com/newtonhou1.html
  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

まず、一番最初に考えることは 「自分で、手で計算するときどうやるか?」 です。

naozerojp
質問者

補足

手での計算は考えたのですが、それをプログラムにすると なると、どうも分かりません。 「方針・参考例を挙げてください」と言ったのですが、やはり 実際にプログラムを書いていただけないでしょうか?参考にしたいです。

関連するQ&A

  • C言語のプログラムの問題で質問です。

    C言語のプログラムの問題で質問です。 問題は、 与えられた実数(a,b,c,d)に対して、次の連立非線形方程式の解 を「ニュートン法」を用いて解く。 f1(x,y)=y+ax^2-b=0 f2(x,y)=y^2+cx^2-d=0 ただし初期値(a,b,c,d)を入力でき、上記の方程式の解が画面表示されること。 という問題です。 普通の連立方程式を解くプログラムならできるのですが、ニュートン法 で解くというのが分かりません。 プログラムを教えてください。参考にしたいです。

  • C言語のプログラムについて

    下記は、何言語かわからないです。 これをC言語にするにはどうすればよいでしょうか。 プログラムは、「ニュートン法を用いて、方程式x^3(xの3乗)-4=0の近似解を求めるプログラム。ただし、実数解と、近似解の誤差は、0.0001以下とする。ここで、この方程式の導関数は、3x^2(3*xの二乗)である。」 100 DEF F(X)=X*X*X-4 110 DEF G(X)=3*X*X 120 INPUT PROMPT "初期値":A 130 LET B=A-F(A)/G(A) 140 IF ABS(A-B)<=.0001 THEN 170 150 LET A=B 160 GOTO 130 170 PRINT "近似解";B 180 END 以上です。 ご回答よろしくお願いいたします。

  • ニュートン法をC言語でプログラム

    方程式 cos^2x-0.5=0 (0<x<π) の解をニュートン法で求める という問題をC言語のプログラムを作り計算したいのですが分かりません。 自分で考えてみたプログラムは以下の通りです。 #include <stdio.h> #include <math.h> #define f1(x) cos(x)*cos(x)-0.5 #define f2(x) sin(2*x) /* ニュートン法による方程式の解 */ main() { double x0,x1,a,b,c,d,g,n; a=1; x0=0.7; n=0; while(a>0.0001){ b=x0; d=f1(b); g=f2(b); x1=x0-d/g; c=x1; a=f1(c); n=n+1; printf(" n= %f x1=%f x0=%f\n",n,x1,x0); printf(" a= %f → 解 x= %f \n", a,x1); x0=x1; } } 自分としてはこれが精一杯で、何故間違ってるのか、何をどうすればいいのか、さっぱり分かりません。どういったところが間違ってるのか可能性だけでも示して頂ければ幸いです。 参考として、ニュートン法によるプログラム例として書かれていたものを上げさせて頂きます。 例: e^x-3=0 の解をニュートン法により計算する。 #include <stdio.h> #include <math.h> #define f1(x) exp(x)-3 #define f2(x) exp(x) /* ニュートン法による方程式の解 */ main() { double x0,x1,e,a,b,c,d,g,n; a=1; x0=3; n=0; while(a>0.0001){ b=x0; d=f1(b); g=f2(b); x1=x0-d/g; c=x1; a=f1(c); n=n+1; printf(" n= %f x1=%f x0=%f\n",n,x1,x0); printf(" a= %f → 解  x= %f \n", a,x1); x0=x1; } }

  • C言語で非線形方程式を解くプログラム

    非線型方程式((a*a)+(x*x))(1-x)-bx=0 という式で a=0.07,b=0.10のときの解をすべて解きなさい(プログラムで2分法又はニュートン法を用いて解く)という問題を解きたいのですが色々なサイトを見てもわかりません もしよろしければどなたか教えていただけませんか? よろしくお願いします。

  • 連立方程式の問題

    こんな問題があります。 cがdの2倍のとき、x.yの方程式cx+dy=2が、2組の連立方程式の解で満たされるようにcとdの値を定めなさい。 という問題があります c=2d と置くのですが cx+dy=2のどこに代入すればいいのか 、わかりません( ? _ ? )

  • この連立方程式の問題を教えてください。

    この連立方程式の問題を教えてください。 問題は 連立方程式 xの2乗+yの2乗=a , xの2乗-xy+yの2乗=bがx>0、y>0をみたす解を少なくとも1組持つために実数a,bのみたすべき条件を求め、点(a,b)の存在範囲として図示せよ。 です。

  • この問題の回答、解説お願いします。数C

    この問題の回答、解説お願いします。 問1,正方行列Aの逆行列を消去法で求める解法では,未知行列をXと置いて,AX=Eを満たす行列Xを求めている.XがAの逆行列であるためにはもう一つの条件,XA=Eを満たさなければならない.Xgaこの条件を満たすことを証明せよ。 問2.4次の行列式の定義を述べ,ファンデルモンデの行列式の値を求めよ. |1 x x*2 x*3 | |1 y y*2 y*3 | |1 z z*2 z*3 | |w w*2 w*3 | x*2はxのニ乗でx*3はxの三乗です。y,z,wのもおなじです。 問3,連立方程式{ax + by =0が,x=0,y=0以外の解を持つとき,           {cx + dy =0 |a b|=0が成り立つことを証明せよ。 |c d| {は下の{とつながっています。 。←気にしないでください。すみません。 問4,連立方程式 {a1x + b1y + c1z = 0 {a2x + b2y + c2z = 0 が, x=0,y=0,z=0以外の解を持つとき, {a3x + b3y + c3z = 0 |a1 b1 c1 | |a2 b2 c2 |=0が成り立つことを証明せよ。 |a3 b3 c3 | {は3行つながっています。 わかりづらいと思いますが、よろしくお願いします。

  • 実数解

    3つの2次方程式は少なくとも1つは実数解を持つことを示す問題です。 だたし、a,b,cは実数とします。 (x^2)+3ax+2b-1=0 …(1) (x^2)+2bx+2c-1=0 …(2) (x^2)+2cx+2a-1=0 …(3) (1)の判別式は D/4=(a^2)-2b+1 (2)の判別式は D/4=(b^2)-2c+1 (3)の判別式は D/4=(c^2)-2a+1 となりましたがどのようにして少なくとも1つは実数解ということを探すのでしょうか?

  • Cプログラミングの問題です。ニュートン法を利用して3次方程式の解を求めるプログラミング作成。

    C言語のプログラミング問題です。 ニュートン法を利用して、3次方程式の解を求めるプログラムを作成しなさい。 とのことです。プログラムが得意ではないので、よろしくお願いします。 C言語のプログラミング問題で、ニュートン法を利用して次の3次方程式の解を求めるプログラミングを作成。というものなのですが、プログラミングが苦手でうまくできません。 y=ax^3+bx^2+cx+d (ただし、a>0とする) 任意の係数a,b,c,dを与え、y=0のときの解(実根のみ)を求めるプログラミングを作成せよ。 という問題です。プログラミングの内容を説明しなくてはいけないので、内容のほうも若干詳しく説明していただけると助かります。 どなたか教えてください、よろしくお願いします。

  • 線形代数の問題

    線形代数の問題なんですがわからなくて困ってます! 次の連立1次方程式が(1)ただ一つの解をもつ(2)無数の解をもつ(3)解をもたない、ようにcの値をそれぞれ定めよ X+Y-Z1 2x+3y+cz=3 X+cy+3z=2 なるべく早めにお願いします。

専門家に質問してみよう