本程序在turbo c或c++下编译:
#include "stdio.h"
#include <math.h>
float f(float x)
{float y
y=x*x*x*x+2*x*x*x-x-1
return y
}
void main()
{float a=0,b=0,h,y,x
int k,n0
printf("please input qujian a and b")
scanf("%f%f%d",&a,&b,&n0)/*输入含根区间a,b,循环次数n0 */
for(k=0k<=n0k++)
{ x=(a+b)/2
h=(b-a)/2
y=f(x)
if(h<10e-6||fabs(y)<10e-6)
{ printf("k=%d,x=%f,y=%f",k,x,y)
break; }/*输出分半次数k,函数的根x,及x对应的函数值.*/
else
{if(f(a)*f(x)<0)
b=x
else a=x
}
}
}
这段代码是求解方程f(x)=0在区间[-10,10]上的根的数值解。方法的思想就是:一直选取区间中间的数值,如果发现中间的函数值与一侧函数值,异号,那么说明解在这个更小的区间中,采用eps=1e-5作为区间的极限大小,通过迭代的方法求解这个方程的数值解。
所以了解了上述思想,那么else
if(f(a)*f(c)<0)
b=c
说明的是
f(a)和f(c)异号,那么使用b=(a+b)/2缩小迭代区间,继续迭代;同理else
a=c说明f(a)和f(c)同号,那么使用a(a+b)/2缩小迭代区间,继续迭代!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)