- ベストアンサー
C言語でニュートン法を用いた方程式の近似解を求めるプログラム
- C言語でニュートン法を用いて、方程式x^3(xの3乗)-4=0の近似解を求めるプログラムです。実数解との誤差は0.0001以下とします。
- プログラムは、初期値を入力し、ニュートン法を使って近似解を求めます。方程式の導関数は3x^2(3*xの二乗)です。
- プログラムの流れは、初期値を設定し、近似解を計算する過程を繰り返し行います。最終的に近似解が求められます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これはBASICですね。それも、Visual Basicのような新しいものではなく、昔からあるやつ。パソコンが電源ONでROMから起動してたころの。今だと十進BASICが該当するでしょうか。 このタイプのBASICの変数の型を考えたら、明示されていないものには整数は使わないで、浮動小数点型にするのが妥当。floatってことになるんだろうけど、特に理由が無ければdoubleを使うのが、誤差が少なくてよい。 とうぜん、INPUTで入力する値も実数だろうからatoiは使えない。手を抜くならscanfで。 DEF は関数の定義だけど、式で表せる程度の単純なものしか定義できない。 LETは代入で、省略可能なことが多い。 IF ABS(A-B)<=.0001 THEN 170 って書き方のときは、 ~THEN GOTO 170の意味。 ベタ移植すればこんな感じ #include <stdio.h> #include <math.h> double F(double X) { return X*X*X-4;} double G(double X) { return 3*X*X;} int main() { double A,B ; L120: printf("初期値:") ; scanf("%lf",&A); /* INPUT PROMPT "初期値":A */ L130: B=A-F(A)/G(A) ; /* LET B=A-F(A)/G(A) */ L140: if ( fabs(A-B) <= .0001 ) { goto L170 ; } /* IF ABS(A-B)<=.0001 THEN 170 */ L150: A=B ; /* LET A=B */ L160: goto L130 ; /* GOTO 130 */ L170: printf("近似解: %g\n" , B) ; /* PRINT "近似解";B */ L180: return 0 ; /* END */ }
その他の回答 (1)
- Mzi
- ベストアンサー率38% (5/13)
そのBASICをC言語に変換したら以下のようになると思う。 >|c| #define F(X) X*X*X-1 #define G(X) 3*X*X int main ( int argc, char *argv[] ){ char a; char b[10]; int i, A; printf( "初期値:" ); i=0; while ((a = getchar()) != EOF) { b[i] = a; i++; } b[i] = (char)0; A = atoi( b ); float B=0; while( abs( a-b ) > .0001 ){ B=A-F(A)/G(A); } printf( "近似解: %f\r\n", B ); return 0; }