用二分法求下面方程在(-10,10)之間的根:2x3-4x2+3x-6=0
程式設計思路:仿照二分查找,将區間劃分為兩部分,記錄區間左右端點,得到中點。每次運算将中點帶入方程:
- 結果>0:根應該向小一點的值拟合,high=mid;
- 結果<0:根應該向大一點的值拟合,low=mid;
對于跳出循環的條件,我首先是認為low和high應該無限逼近:while(fabs(low-high)>1e-5),當循環體内結果=0後,便使用break跳出循環:if(temp==0) break;但是沒有得到答案。
後來修改之後,便得到答案了。
1 #include<stdio.h>
2 #include<string.h>
3 #include<math.h>
4
5 int main(){
6 double low=-10,high=10,mid;
7 double temp=10;
8 while(fabs(temp)>1e-5){
9 mid=(low+high)/2;
10 temp=((2*mid-4)*mid+3)*mid-6;
11 printf("%lf ",mid);
12 printf("%lf\n",temp);
13 if(temp>0) high=mid;
14 else if(temp<0) low=mid;
15 }
16 printf("%lf",mid);
17 return 0;
18 }
和官方答案不同,害怕會有疏漏的地方,如果讀到這裡的你有想法或建議,歡迎指正~