- 締切済み
プログラム
アドバイスをもとにいろんなサイトを見てみたんですが、なんとなくはわかるんですがこれから先どうしたら良いかわかりません。a,bを入力する画面まではいくんですが、それから先の結果がでないんです。何がいけないんですか? #include <stdio.h> double func(double x){ double y; y=x*x*x-3*x*x+9*x-8; return(y); } int main(){ double EPS=0.00005; double a, b, c; char t; int i=0; do{ printf(" a = "); scanf("%lf%c", &a, &t); printf(" b = "); scanf("%lf%c", &b, &t); if(func(a)*func(b) >= 0){ printf(" f(a)*f(b)>0\n\n"); } }while(func(a)*func(b) >= 0); if(b-a<0){ c=a; a=b; b=c; } while(b-a>EPS){ c=a-((b-a)/(func(b)-func(b)))*func(a); if(func(c)*func(a)<0){ b=c; }else{ a=c; } i++; printf(" %d\t%20.15f\n",i,c); }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- keikan
- ベストアンサー率42% (75/176)
>>c=a-((b-a)/(func(b)-func(a)))*func(a); この式はどこからでてきたのでしょうか? この式では(b-a)が0に近づいていきません。 #3さんのようにされてはいかが?
- yasuch
- ベストアンサー率41% (27/65)
コンパイルエラーなんかじゃなかったんですね。 失礼しました。 はさみうち法って、こんな感じではかなったんでしたっけ? c=(a+b)/2; if(func(a)*func(c)<0){ b=c; }else{ a=c; }
- yasuch
- ベストアンサー率41% (27/65)
なんていうコンパイルエラーが出てるのでしょうか。 最後の閉じカッコ '}' が足りないからでは?
- yasuch
- ベストアンサー率41% (27/65)
下記の行で func(b)-func(b) は、ゼロになってしまいますよ。 c=a-((b-a)/(func(b)-func(b)))*func(a);
お礼
ありがとうございました。しかしfunc(b)-func(a)に直したところやはり何かがいけないようでうまくコンパイルされません。何がいけないんでしょうか・・
補足
エラーが出るわけではなくて、a、bを入力するまではコンパイルされるのですが、肝心のyが0に近くなるときのxの値が計算されないのです・・。これでははさみうち法の意味が全くなくて・・。どうプログラムを変えたらよいですか?