• ベストアンサー

二分法(FORTRAN)

大学の情報処理演習で、FORTRANのプログラミングをやっています。 で、二分法の問題なんですが、X^3-X-1の解で、[0.2] にあるものを計算するプログラムを作る課題が出されたのですが、うまくいきません。 そこで、自分の作ったプログラムを添削してください。 program nibunnhou1 c real x1,x2,c,x,f,r f(x)=x**3-x-1 c x1=0.000 x2=2.000 r=f(x1) c write(6,*)'start' c do n=1,100 c=(x1+x2)/2 if(r*f(c).gt.0) then x1=c else x2=c end if c if(f(c).lt.0.0000) go to 1 continue end do c 1 write(6,*)'ans=' write(6,*) c c stop end です。これだと、答えが「1.」とかになってしまいます。 お願いします。

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

  • ベストアンサー
  • sak_sak
  • ベストアンサー率20% (112/548)
回答No.1

これって、f()が配列になってませんか? function f(… とやるべきなのでは? > real x1,x2,c,x,f,r > f(x)=x**3-x-1

disabled1128
質問者

お礼

早速の回答どうもありがとうございます。 real x1,x2,c,x,r function f(x) とやってみましたが、エラーが出てしまいました。 ほとんど素人なので、詳しく教えていただけるとありがたいです。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • sak_sak
  • ベストアンサー率20% (112/548)
回答No.5

No.2は、 real function f(x) real x f(x)=x**3-x-1 return end とやればよかったのかも

disabled1128
質問者

お礼

条件変えてみたらできました! こんな遅くにほんとどうもありがとうございました。

disabled1128
質問者

補足

sak_sakさん colderさん こんな遅くにどうもありがとうございました。 お二方への感謝の気持ちには順位などつけられませんので、回答順という形にさせていただきます。 本当にどうもありがとうございました。

すると、全ての回答が全文表示されます。
  • sak_sak
  • ベストアンサー率20% (112/548)
回答No.4

やっぱりだいぶ忘れてました。 というか、その関数のやり方は学生時代に使ってなかったかも。 No.3の方の仰るとおりですね。 No.1,2は忘れてください。 if(f(c).lt.… のところは収束の判定ですね。 if(abs(f(c)).lt.0.00001) go to 1 とかってことでいいのかな。

すると、全ての回答が全文表示されます。
  • colder
  • ベストアンサー率43% (30/69)
回答No.3

>if(f(c).lt.0.0000) go to 1 単にループから脱出する条件がおかしいだけかと。

disabled1128
質問者

お礼

たしかに! おかしいですね! 条件変えてみたらできました! 本当にどうもありがとうございました!

すると、全ての回答が全文表示されます。
  • sak_sak
  • ベストアンサー率20% (112/548)
回答No.2

以下の4行を、endの後に書きます。 real function f(x) real x f(x)=x**3-x-1 end それから最初にあった realの行の「f,」と、 f(x)=x**3… のところは消してください。 だいぶ忘れているので、エラーが出たら補足欄に書いてください。

disabled1128
質問者

補足

たびたびの回答どうもありがとうございます。 やってみましたが、 real function f(x) 1 (continued): f(x)=x**3-x-1 2 Invalid declaration of or reference to symbol 'f' at (2) [initially seen at (1)] というエラーが出てしまいます。 よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A