• 締切済み

fortran ニュートン法

program main real*8 x,xold,y,yold,func,dfunc,dx real*8 eps integer nmax nmax=100 eps=1.0d-9 *initial xold=2.0 do n=1,max yold=xold**2-2 x=xold-yold/xold*2 err=abs(x-xold) if(0.01>err)then write(6,*)x stop'Ended with succes' else y=x**2-2 xold=y end if end do write(6,*)x end を実行すると 4.94065645841246544E-324 という結果になってしまいます。 1.41421356 という解がほしいのに、、 ずっと考えたのですがどこがおかしいかわかりません お願いします、どうすれば正しい解が得られますか?

みんなの回答

  • bran111
  • ベストアンサー率49% (512/1037)
回答No.3

要するにmaxが充てられていない。 プログラムそのものよりも何をしたいか、数式で示した方がわかりやすい。ニュートン法はf(x)=0を解くのに x(n)=x(n-1)-f(x(n-1))/f'(x(n-1)) として、iteration により収束値を求めそれを解とする方法と記憶しているが、 この場合、f(x),f'(x)は何か、出発値を何にとったか、その辺を確認してもらいたい。

回答No.2

xold=y 変数名がxoldだからxを代入しないといけないのでは?

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

maxが初期化されていない。