エラーの原因が解りません
Posted: 2009年2月08日(日) 18:30
久々に質問をさせていただきます。学校の課題でニュートン法を用いた非線形方程式の解を求めるプログラムを組み立てたのですが、妙な所でエラーが出ました。まず減速を用いないプログラムを作ってみて、それがうまく動いたので次は減速を用いたアルゴリズムを加えました(下のプログラムでコメントで囲っている部分です)。最初はそこがエラーを吐き出しているのかと思ったのですが、どうやら y1 = 1.3 の部分でエラーが出ているようなのです(y1 = 1.3 をコメントアウトするとエラーが出ませんでした)。別にy1の型も間違っていないし、原因が解りません。どこに原因があるのか解らないのでプログラムは丸上げしています。どうか間違いの御指摘のほどよろしくお願いします。emacsからのコピペが出来ないので直接手打ちしていますので綴りミスなど細かい間違いもあるかもしれませんが、そこは無視して下さい。
#include<stdio.h> #include<math.h> double Keisan(double x){ double I; I = tanh(x) + (0.2 * x) + 0.3; return(I); } /*微分の計算*/ double Bibun(double x){ double I; double h; h = 0.0000001; I = (Keisan(x+h) - Keisan(x)) / h; return(I); } int main(void){ double x[10]; double y1.y2,u; int i; x[0] = 1.3; /*xの初期解*/ y1 = 1.3; /*同じくxの初期解*/ x[1] = x[0] - (Keisan(x[0]) / Bibun(x[0])); /*減速を用いないNewton法アルゴリズム*/ while(1){ x[i+1]=x-(Keisan(x)/((Keisan(x)-Keisan(x[i-1]))/(x-x[i-1]))); ++i; if(Keisan(x) < 0.000001 && Keisan(x) > -0.000001) break; } /*減速を用いるアルゴリズム*/ /***************************************** while(Keisan(y1) > 0.001){ y2=y1-u*Keisan(y1)/Bibun(y1); while(fabs(Keisan(y2))>(1-u/4)*fabs(Keisan(y1))){ u=u/2; y2=y1-u*Keisan(y1)/Bibun(y1); } y1=y2; } *****************************************/ printf("x = %.10lf\n",x); printf("A. %.10lf\n",Keisan(x)); //printf("x = %.10lf\n",y1); //printf("A. %.10lf\n",Keisan(y1)); return(0); }