|
#include<stdio.h>
#include<math.h>
void main()
{
//二分法求非線性方程的根
//想出這些解法的人真是厲害,什么二分,迭代,...
//程序中存在循環和判斷
float a,b,c=(a+b)/2;//現在知道兩個端點,設定一個代數式c,簡化程序
float m,n,p;//端點的函數值
printf("please input 端點值,用逗號隔開\n");
scanf("%f,%f",&a,&b);
m=2*a*a*a-4*a*a+3*a-6;
n=2*b*b*b-4*b*b+3*b-6;
p=2*c*c*c-4*c*c+3*c-6;
for(;fabs(c-a)>=0.000001;)//給定一個誤差e-5
{
if((2*c*c*c-4*c*c+3*c-6)==0)break;//跳出循環
else if(p*m<0)
{b=c;
c=(a+b)/2;
}
else
{a=c;
c=(a+b)/2;
}
m=2*a*a*a-4*a*a+3*a-6;//為什么我一挪過來就行了呢,可能是如果不挪過來,mnp值不變
n=2*b*b*b-4*b*b+3*b-6;
p=2*c*c*c-4*c*c+3*c-6;
}
printf("root=%6.2f\n",c);//用6.2f把尾巴截斷
}
|
|