#include #include #include //#define f(x) (x+sin(x)-1) #define f(x) ((x)*(x)) //#define f(x) ((x)*exp(x)*(x)*exp(x)) int main() { int count = 1000 , i=0; double precision = 1e-10 ; //num為選擇解哪個方程式 double mid , lower=-20 , upper=10, num=2; printf("迭代\t區間\t\t\t\t中間值\n"); printf("-------+-------------------------------+-------------\n"); if(f(num)==(num+sin(num)-1)){ while (upper - lower > precision && i < count ) { mid = (lower + upper) / 2.0; printf("#%d\t[%.10f,%.10f]\t解=%.10f\n",i+1,lower,upper,mid); if (fabs(f(mid)) < precision) { break; } i++; if ( f(mid) * f(lower) < 0) { upper = mid; } else { lower = mid; } } } if(f(num)==(num*num)){ while (upper - lower > precision && i < count ) { mid = (lower + upper) / 2.0; printf("#%d\t[%.10f,%.10f]\t解=%.10f\n",i+1,lower,upper,mid); printf("\nf(mid)=%.10f, f(lower)=%.10f, f(upper)=%.10f\n",f(mid),f(lower),f(upper)); if (fabs(f(mid)) < precision) { break; } i++; if ( f(mid) > precision) { if(mid>0){ upper = mid; } else if(mid<0){ lower = mid; } } } } if(f(num)==((num)*exp(num)*(num)*exp(num))){ while (upper - lower > precision && i < count ) { mid = (lower + upper) / 2.0; printf("#%d\t[%.10f,%.10f]\t解=%.10f\n",i+1,lower,upper,mid); // printf("mid=%.10f,f(mid)=%.10f\n",mid,f(mid)); if (fabs(f(mid)) < precision) { break; } i++; if ( f(mid) > precision) { if(mid>0){ upper = mid; } else if(mid<0){ lower = mid; } } } } printf("\n方程式的解為%f\n",mid); printf("\n驗算結果f(mid)的值為%f",f(mid)); return 0; }