前提・実現したいこと
【C言語】2x^2 - 12sin(x) = 0
の解のうち,0より大きいものを二分法で精度10-6で求めるプログラムを書きました。
普通、検算結果は限りなく0に近づくはずですが、
実際やってみたら、検算結果がf(xm) = -1.172601
になるのでコードが当たっているのか心配です。
このコードであってると思いますか?
###前置き
はじめにf(x) = 2x^2 - 12sin(x)
グラフはエクセルで作ったところ以下のようになったので、
初期値はそれぞれxa = 2
,xb = 3
としました。
###ソースコード
c
1#include <stdio.h> 2#include <math.h> 3#define EPS 1.0e-6 4float f(float x); 5int main(void) 6{ 7 float xa,xb,xm; 8 printf("xa="); 9 scanf("%f",& xa); 10 printf("xb="); 11 scanf("%f",& xb); 12 printf("f(x)="); 13 printf("%.6f\n", f(xa)); 14 15 do{ 16 xm = (xa+xb)/2; 17 printf("%.6f\n", xm); 18 if( f(xa)*f(xb) < 0 ){ 19 xb = xm; 20 }else{ 21 xa = xm; 22 } 23 }while( xb-xa>EPS ); 24 25 printf(“xm = %.6f”, xm); 26 printf("検算の結果\nf(xm)=%.6f\n", f(xm)); 27 printf("よって解はx=%.6f\n", xm); 28} 29 30float f(float x){ 31 float y; 32 y = 2*x*x-12*sin(x); 33 return(y); 34} 35
以上、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/16 17:37