1 #include<stdio.h> 2 #include<math.h> 3 4 //计算一元三次方程的根大致分布位置 5 6 //计算的方程为 x*x*x-8*x*x+12*x-30=0 7 8 //计算函数值 9 float f(float x) 10 { 11 return ((x-8.0)*x+12.0)*x-30.0; 12 } 13 14 //计算弦与坐标x轴的交点 15 16 float xpoint(float x1,float x2) 17 { 18 return ((x1*f(x2)-x2*f(x1)))/(f(x2)-f(x1)); 19 } 20 21 //求解区间内是否有实根 22 23 float root(float x1,float x2) 24 { 25 float x,y,y1; 26 y1=f(x1); 27 do 28 { 29 x=xpoint(x1,x2); 30 y=f(x); 31 if(y*y1 > 0) //同号 32 { 33 y1=y; 34 x1=x; 35 } 36 else 37 { 38 x2=x; 39 } 40 }while(fabs(y)>=0.0001); 41 return x; 42 } 43 44 int main(void) 45 { 46 float x1=6,x2=8; 47 48 //此处应当加入判断,只有当输入的区间端点使f()的同号的时候才进行进一步计算 49 50 float x; 51 52 x=root(x1,x2); 53 54 printf("root in 6-8 is %5f\n",x); 55 return 0; 56 }
主要就是根的计算的问题,如何判断和重新划分区间是个比较难的地方。
计算交点的公式:
时间: 2024-10-25 14:11:25