私はプログラミングを始めたばかりの初心者です。学校でいま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
No.2ベストアンサー
- 回答日時:
ちょっと書き換えてみました、こんな感じでどうでしょう
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
DIM文で解をすべて求めることは出来ましたが、その場合、収束回数が累計で出てきていましたが、BLUEPIXYさんのプログラムでやってみたところ個々に対応した収束回数も表示できました。RETURN+GOSUBのサブルーチンはこのように使えばいいのですね。とても勉強になりました、有難うございました。
No.1
- 回答日時:
どのようなエラーか解りませんが、プログラムの基本は
「入力→計算→出力」です。とのような方法でも質問の内容は達成出きると思います。
「一度に列挙」とは「一度に出力」と解せば次のようななります。
「6回入力→6回計算→6回出力」そのほか「6回繰り返し(入力→計算)→6回出力」などもあります。ここでは始めの手順を取ります。
各3つの部分が分離していますので入力値と出力値を保存する必要があり、一般的には配列変数を使うことになります。
以下では感じからN88-BASIC(86)と仮定して。
(以下プログラム)
120 REM*******ニュートン・ラフソン法*********
DEFDBL A-Z 'すべての変数を培精度実数にする(何もしないと単精度実数になっていて素人考えでは数値計算には向かないのでは?)
SN%=6 'サンプル数
DIM VIN[SN%] '入力値を格納
DIM VOUT[SN%] '出力値を格納
DIM VCOUNT%[SN%] '計算回数を格納
'---入力---
FOR I%=1 TO SN%
140 PRINT USING "##番目の試行値は";I%;
INPUT;VIN[I%] 'INPUTは使用しなかったので記述の仕方は忘れました(^^;)
145 PRINT VIN[I%]
NEXT
'---計算---
150 ER=.00001# 'ER=.00001
FOR I%=1 TO SN%
130 N%=0 'N=1
X1=VIN[I%]
X0=X1+ER*100# '判定の都合で、元のIF文なら不要だった
WHILE ABS(X1-X0)>=ER
230 X0=X1 :N%=N%+1
180 FX=X0*X0-333
190 DFX=2*X0
200 X1=X0-FX/DFX
240 WEND 'GOTO 180
VOUT[I%]=X1 : VCOUNT%[I%]=N%
NEXT
'---表示---
FOR I%=1 TO SN%
250 PRINT VOUT[I%],VCOUNT%[I%]
NEXT
280 END
あとプログラムの構成は
定数や定義の設定
プログラム本体
サブルーチン(今回は入力部分、計算部分、出力部分)
などに分離すると改造・変更などが容易になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 線形代数の対称行列についての問題がわからないです。 2 2023/01/08 14:59
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Ruby プログラミング 3 2023/06/09 14:30
- 数学 原始関数の存在性の証明について 数学科の3回生です。院試の勉強でつまづいたので助けてほしいです。 R 6 2022/11/13 19:19
- Visual Basic(VBA) 順列をランダムに発生するプログラム 1 2022/11/16 12:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
変数の値が勝手に変化する原因
-
C言語 バッファについて。
-
fortran if文
-
Matlabについて質問2
-
このプログラムを修正してくだ...
-
_dupenv_s関数でメモリリーク
-
プログラミング
-
ruby
-
Fortran90についての質問です。
-
JCLの基本について教えてください
-
c言語のプログラミング 2つの整...
-
Cプログラミング
-
Vba 実数および実数タイプの変...
-
0除算して、落ちるプログラムと...
-
VBAで仕様書は書きますか?
-
あるプログラムのコマンドライ...
-
パックマンプログラム
-
正しい五十音順について
-
C++ で、「)」が必要 というエ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
変数の値が勝手に変化する原因
-
JCLの基本について教えてください
-
Sublime Text 3でのFortranプロ...
-
プログラミング
-
fortran if文
-
ruby
-
Fortran90についての質問です。
-
COBOLのピリオド
-
3つの整数のうち奇数のみを表示...
-
main関数終了時のreturnの意味は?
-
c言語のプログラミング 2つの整...
-
360度を超える角度
-
整数格子点を列挙するプログラム
-
N88basicを用いたGPIB制御
-
ProC 固定SQLでNULLってどう表...
-
Fortran "実引数の型が仮引数の...
-
PICのプログラムでsrandを使う...
-
Matlabについて質問2
-
4桁の数値を逆に表示されるプ...
おすすめ情報