BASIC数値解析の収束過程計算結果の表示法について

このQ&Aのポイント
  • BASIC数値解析の収束過程計算結果の表示法について知りたい。具体的な方法がわからない。
  • 収束過程の計算結果を実行画面に表示させるように改良したい。
  • 試行値を変えながら収束回数ごとの計算結果を表示したい。ニュートン・ラフソン法のプログラムです。
回答を見る
  • ベストアンサー

BASIC数値解析の収束過程計算結果の表示法について。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=2172518ここの質問の訂正です。↓のプログラムで収束過程の計算結果を実行画面に表示させるように改良したいのですが、具体的な方法がわからないです。たとえば試行値1の場合ですと、収束回数が9回ですが、収束1回ごとの計算結果を表示させたいです。 (x^2-a=0のaの根を求めるニュートン法のプログラムです。収束した結果は表示できます。) 120 REM*******ニュートン・ラフソン法********* 130 FOR I = 1 TO 6 132 READ X0 134 GOSUB 140 136 NEXT I 138 END 140 PRINT "試行値は";X0 145 N=1 150 ER=.00001 180 FX=X0*X0-333 190 DFX=2*X0 200 X1=X0-FX/DFX 220 IF ABS(X1-X0)<ER THEN 250 230 X0=X1 :N=N+1 240 GOTO 180 250 PRINT X1,N 280 RETURN 300 REM *************試行値************* 310 DATA 1,5,10,50,100,500

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

240 GOTO 180 の前でPRINT すればいいかと思います 例えば、 235 PRINT X1,N

catnapist
質問者

お礼

ご回答有難うございます。その通りやりまして出来ました。

関連するQ&A

  • BASIC数値解析プログラムについて。

    初めまして、私は大学でBASIC初心者でN88互換BASICでのプログラミングを今年から勉強しています。↓のプログラムで収束過程の計算結果を実行画面に表示させたくてFOR~NEXT文でいろいろ試しているのですがエラーが出てしまいます。他の具体的な方法が浮かばないです。初歩的な質問でしたら申し訳ないのですが、BASIC経験者、もしくは現在やられている方でどなたか私にアドバイスをしていただけると助かります。 (x^2-a=0のaの根を求めるニュートン法のプログラムです) 120 REM*******ニュートン・ラフソン法********* 130 FOR I = 1 TO 6 132 READ X0 134 GOSUB 140 136 NEXT I 138 END 140 PRINT "試行値は";X0 145 N=1 150 ER=.00001 180 FX=X0*X0-333 190 DFX=2*X0 200 X1=X0-FX/DFX 220 IF ABS(X1-X0)<ER THEN 250 230 X0=X1 :N=N+1 240 GOTO 180 250 PRINT X1,N 280 RETURN 300 REM *************試行値************* 310 DATA 1,5,10,50,100,500

  • BASICの数値解析(ニュートンラフソン法)について。

     私はプログラミングを始めたばかりの初心者です。学校でいまbasicを勉強しています。BASIC経験者の方、もしくはプログラミングに詳しい方よろしければお願いしたします。 (以下質問)  ニュートン・ラフソン法を用いて根を求めるプログラムについてですが、与えられた式  f(X)=X^2-333=0 で試行値:X0=1,5,10,50,100,500と変えていくとき(*RUN一回のみ)の解が求められないです。試行値を個々に与えて(INPUT6回)求めることはできました。ですが一度に列挙することができません。  私がやってみました方法は 1)試行値を関数(数列化)にしてみる。 2)元々の関数を関数(数列化)にしてみる。 3)IF文もしくはREAD文を用いる。 の3つですが、どの方法を取ってもエラーが止みません><。  基本的なことでしたら申し訳ないのですが、アドバイス、方針、対処策等教えて頂けたら嬉しいです。なお現在までにできているプログラムを書いておきたいと思います。ご参考ください。 (以下プログラム) 120 REM*******ニュートン・ラフソン法********* 130 N=1 140 INPUT"試行値は";X0: 145 PRINT X0 150 ER=.00001 180 FX=X0*X0-333 190 DFX=2*X0 200 X1=X0-FX/DFX 220 IF ABS(X1-X0)<ER THEN 250 230 X0=X1 :N=N+1 240 GOTO 180 250 PRINT X1,N 280 END

  • 数値解析の問題の添削をお願いします

    問1.123456を浮動小数点表示せよ。さらに、有効数字3桁、4桁、5桁でそれぞれ丸めよ 僕の答え 0.123456 * 10^6 0.123 *10^6 0.1235 * 10^6 0.12346 * 10^6 問2. 3^(1/3)の近似値をニュートン法を用いて求めよ。ただし、初期値は,x0=1.0とし、反復課程{x1,x2,x3}を有効数字4けたで計算すること。 僕の答え x1 = 1.667 x2 = 1.471 x3 = 1.443 よろしくお願いします。

  • プログラム作成アドバイス下さい(初心者)

    N88互換BASICのフリーソフトにて作成しています。 正の実数aの平方根ルートa(a^1/2)をニュートンラプソン法で求めるプログラムを組む問題です。下記が手順です。 1、定数aを入力(a>0)、今回解くべき方程式は、f(x)=x^2-a=0であるから、その導関数はf(x)=2xである。 2、初期値X0にaを代入し、X1を求める。 3、X0とX1から、相対誤差E=|(X1-X0)/X0|を求める。 4、X1とEを画面表示する。 5、収束判定定数EPSの値を10^-5とし、これと相対誤差を比較する。 6、EがEPSより大きければ、得られた根は収束が足りないと思われるので、次のX2を求める。(2、へ移動) EがEPSより小さければ、十分な精度で収束したと考え、7へ。 7、最後にSQR(a)を画面表示して終了。 とりあえず下記のように進めましたが続きが分かりません。続きはどのような計算ですか? 10 Rem 正の実数a平方根a^1/2を、ニュートン・ラプソン法で求めるプログラムを組む問題。 20 Cls 30 Print "正の実数の平方根を求めます。" 40 EPS = 0.00001 50 INPUT "a=";A 60 IF A<=0 THEN END ELSE GOTO 70 70 Print "a="; 80 Print USING; "#.####^^^^"; A 面倒なプログラムですが、宜しくお願いします。

  • C言語課題(数値計算)お願いします。

    課題内容 ニュートン法を用いて√2の値を求められるプログラムを作る。 10ケタまで表示する。 書いてみたソースコード #include <stdio.h> #include <stdlib.h> #include <math.h> #define max 1000 //最大繰り返し回数 #define eps 1.0e-10 //収束条件 double f(double x); double df(double x); void newton(void); int main() { newton(); return 0; } void newton(void) { int count; double a,newa; count=0; printf("初期値を入力してください。\n"); scanf("%lf",&a); for(;;) { count++; newa=a-f(a)/df(a); if(fabs(newa-a)<eps) break; a=newa; if(count==max) { printf("収束しませんでした。\n"); exit(1); } } printf("解の値は %f\n収束するのに %d 回かかりました。\n", newa,count); } double f(double x) { return x*x-2; } double df(double x) { return 2x; } コンパイルできません。 間違いとどうすればよいかを教えていただけるとありがたいです!!!

  • 数値解析に関する質問です

    以下のプログラムにおいて 1) 初項の絶対値が大きい方の式を選んで消去する理由は何故か? 2)2元1次連立方程式の解が得られないデータ(例えば,1 2 3と2 4 6)を入力した場合,エラーを表示するようにするにはどうすればよいか? 教えてください。 よろしくお願いします。 #include <stdio.h> #include<math.h> //-------------------------------- void inputdata(double [2][3]); void calsol(double [2][3], double [2]); void elimination(double [2][3], double [2][3]); void outputdata(double [2]); void checksol(double [2][3], double [2]); //--------------------------------- main() { double c[2][3], x[2]; printf("Program of Gaussian elimination \n"); inputdata(c); calsol(c, x); outputdata(x); checksol(c, x); return(0); } //----------------------------- void inputdata(double c[2][3]) { printf("----------------------\n"); printf("Input Data\n"); printf("(a0*x0 + a1*x1 = a2)\n"); printf("\n"); printf("Equation 1\n"); printf("Input a0 a1 a2\n"); scanf("%lf%lf%lf" , &c[0][0], &c[0][1], &c[0][2]); printf("Equation 2\n"); printf("Input b0 b1 b2\n"); scanf("%lf%lf%lf", &c[1][0], &c[1][1], &c[1][2]); } //----------------------------- void calsol(double c[2][3], double x[2]){ double cc[2][3]; elimination(c, cc); x[1]=cc[1][2]; x[0]=cc[0][2]-cc[0][1]*x[1]; } //----------------------------- void elimination(double c2[2][3],double cc[2][3]) { int imax; double c1[3]; if(fabs(c2[0][0])>fabs(c2[1][0])){ imax = 0; } else{ imax = 1; } cc[0][0] = 1; if (imax == 0){ cc[0][1]= c2[imax][1]/c2[imax][0]; cc[0][2]=c2[imax][2]/c2[imax][0]; } else{ cc[0][1]=c2[1][1]/c2[1][0]; cc[0][2]=c2[1][2]/c2[1][0]; c1[0]=0; c1[1]=c2[0][1]-(cc[0][1]*c2[0][0]); c1[2]=c2[0][2]-(cc[0][2]*c2[0][0]); } cc[1][0]=c1[0]; cc[1][1]=1; cc[1][2]=c1[2]/c1[1]; } //----------------------------- void outputdata(double x[2]){ printf("--------\n"); printf("Solutions\n"); printf("x0=%14.6e\n", x[0]); printf("x1=%14.6e\n", x[1]); } //----------------------------- void checksol(double check [2][3],double x[2]) { double crt, clt; int ie; printf("---------\n"); printf("Check Solutions\n"); printf("Left Term Right Term\n"); for(ie=0; ie<=1; ie++) { clt = check[ie][0]*x[0] + check[ie][1]*x[1]; crt = check[ie][2]; printf("%14.6e %14.6e\n", clt,crt); } } 実行結果 Program of Gaussian elimination ---------------------- Input Data (a0*x0 + a1*x1 = a2) Equation 1 Input a0 a1 a2 2 3 13 Equation 2 Input b0 b1 b2 4 8 32 -------- Solutions x0= 2.000000e+00 x1= 3.000000e+00 --------- Check Solutions Left Term Right Term 1.300000e+01 1.300000e+01 3.200000e+01 3.200000e+01

  • 結果の表示

    よろしくお願いします。 プログラミングの勉強をしています。 座標上にx1、x2、y1、y2をとり、この2点間の距離が表示されるプログラムを作っています。 最終的には自分で座標を入力し、以下のように表示されることが目標です。 x1:0 y1:0 x2:1 y2:1 この2点間の距離は1.414214です。 次のように作ってみましたが、1.414・・・となるところが、0.0000・・・となってしまいます。どこを直したらよいでしょうか、お願いいたします。 #include <stdio.h> #include <math.h> main() { int x1 = 0, y1 = 0, x2 = 0, y2 = 0; double A = 0.0, dx = 0.0, dy = 0.0; A = sqrt(dx * dx + dy * dy); dx = x1-x2; dy = y1-y2; printf("x1:"); scanf("%d",&x1); printf("y1:"); scanf("%d",&y1); printf("x2:"); scanf("%d",&x2); printf("y2:"); scanf("%d",&y2); printf("この2点間の距離は%lfです\n", A); }

  • 一行ずつリアルタイムに結果を表示したい

    cgiプログラムで print "<html><body>"; foreach(0..1000000000000){ $n++; print "$n<br>\n"; } print "</body></html>"; というかんじで結果を出力しようとすると 出力の際、処理されたところまでいったん表示され 何分かたってまた、処理されたところまでを表示されます。 例)1~10000表示→3分後に10001~20000を表示 これでは10001が処理できているのかが3分後にならないとわかりません。 そのため出力結果を一行ずつリアルタイムに表示できるようにしたいのですが、 どのように処理したら良いでしょうか? お教え下さい。よろしくお願いします。

    • ベストアンサー
    • CGI
  • perlでサブルーチンへの複数の配列渡し

    perlでサブルーチンに配列を渡しているのですが、 引数としている配列が1個の場合は問題ないのですが、 複数渡すと、第2引数以降が渡りません。 どの様にすれば上手くできますか。 例1 #!/usr/bin/perl @x1 = (14, 11, 5, 12, 8, 15); @x2 = (12, 10, 8, 9); print "main : @x1 \n"; &test(@x1); sub test { my (@arg1) = @_; print "sub : @arg1 \n"; } 結果 main : 14 11 5 12 8 15 sub : 14 11 5 12 8 15 例2 #!/usr/bin/perl @x1 = (14, 11, 5, 12, 8, 15); @x2 = (12, 10, 8, 9); print "main : @x1 \n"; print "main : @x2 \n"; &test(@x1, @x2); sub test { my (@arg1, @arg2) = @_; print "sub : @arg1 \n"; print "sub : @arg2 \n"; } 結果 main : 14 11 5 12 8 15 main : 12 10 8 9 sub : 14 11 5 12 8 15 12 10 8 9 sub : 引数1に全てが設定されて、引数2に設定されていない。

    • ベストアンサー
    • Perl
  • ニュートン法について

    ニュートン法の問題ですが、3の立方根をニュートン法で計算する問題で初期値がX0=1で繰り返し3回までの経過を示す問題です。 f(x+n)=fx(n+1)/fx'(n+1) この式にf(x)=3^(1/3) を代入すればいいのですか? わかる方お願いします。