論よりrunで行ってみましょう8。
newton.BAS |
REM newton.BAS --- Newton法で f(x)=0 の近似解を求める REM 新x=x+Δx, Δx=-f(x)/f'(x) という漸化式で近似解更新 REM 注意! 1000桁モードにしても超越関数は17桁 REM 超越関数を使わなければ 1000 桁モードで高精度の近似値が求められる REM その場合は PRINT USING の書式等を適当に直す REM OPTION ARITHMETIC DECIMAL_HIGH OPTION ARITHMETIC NATIVE REM --------------------------------------------------------------- REM 解きたい方程式 f(x)=0 の左辺 f(x) の定義 FUNCTION F(x) LET F=COS(X)-X REM LET F=x^2-2 END FUNCTION REM f'(x)の定義 FUNCTION dfdx(x) LET DFDX=-SIN(x)-1 REM dfdx=2*x END FUNCTION REM --------------------------------------------------------------- INPUT PROMPT "初期値、要求精度(1e-14など)=": X,EPS REM Newton法を実行 LET MAXITR=100 FOR i=1 TO MAXITR LET dx=-f(x)/dfdx(x) LET x=x+dx PRINT USING "f(--%.################)=---%.##^^^^": x, f(x) IF ABS(dx)<EPS THEN PRINT USING "Δx=---%.##^^^^":dx STOP END IF NEXT I PRINT "修正量 |Δx| は十分小さくなりませんでした。" END |
実行すると、「初期値と要求精度」を尋ねて来るので、 例えば 1,1e-14 と答えます。
newton.TXT |
初期値、要求精度(1e-14など)=1,1e-14 f( 0.7503638678402439)= -1.89E-02 f( 0.7391128909113617)= -4.65E-05 f( 0.7390851333852840)= -2.85E-10 f( 0.7390851332151607)= 0.00E+00 f( 0.7390851332151607)= 0.00E+00 Δx= 0.00E+00 |