dポイントプレゼントキャンペーン実施中!

大学の情報処理演習で、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.」とかになってしまいます。
お願いします。

A 回答 (5件)

これって、f()が配列になってませんか?


function f(…
とやるべきなのでは?

> real x1,x2,c,x,f,r
> f(x)=x**3-x-1
    • good
    • 0
この回答へのお礼

早速の回答どうもありがとうございます。

real x1,x2,c,x,r
function f(x)

とやってみましたが、エラーが出てしまいました。

ほとんど素人なので、詳しく教えていただけるとありがたいです。

お礼日時:2005/12/16 00:35

No.2は、


real function f(x)
real x
f(x)=x**3-x-1
return
end

とやればよかったのかも

この回答への補足

sak_sakさん
colderさん
こんな遅くにどうもありがとうございました。

お二方への感謝の気持ちには順位などつけられませんので、回答順という形にさせていただきます。

本当にどうもありがとうございました。

補足日時:2005/12/16 01:55
    • good
    • 1
この回答へのお礼

条件変えてみたらできました!

こんな遅くにほんとどうもありがとうございました。

お礼日時:2005/12/16 01:54

やっぱりだいぶ忘れてました。


というか、その関数のやり方は学生時代に使ってなかったかも。
No.3の方の仰るとおりですね。
No.1,2は忘れてください。

if(f(c).lt.…
のところは収束の判定ですね。
if(abs(f(c)).lt.0.00001) go to 1
とかってことでいいのかな。
    • good
    • 1

>if(f(c).lt.0.0000) go to 1


単にループから脱出する条件がおかしいだけかと。
    • good
    • 1
この回答へのお礼

たしかに!

おかしいですね!
条件変えてみたらできました!

本当にどうもありがとうございました!

お礼日時:2005/12/16 01:53

以下の4行を、endの後に書きます。


real function f(x)
real x
f(x)=x**3-x-1
end

それから最初にあった
realの行の「f,」と、
f(x)=x**3…
のところは消してください。

だいぶ忘れているので、エラーが出たら補足欄に書いてください。

この回答への補足

たびたびの回答どうもありがとうございます。

やってみましたが、

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)]

というエラーが出てしまいます。
よろしくお願いします。

補足日時:2005/12/16 01:24
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!