c语言中的函数二分法求根 用c语言编写二分法求根

C语言中二分法求根if(c*d0)
{
a=m;
c=n;
}
else
{
b=m;
d=n;
}
改为
if(m*d0)
{
a=m;
c=m;
}
else
{
b=m;
d=m;
}
二分法求平方根 C语言在给定的区间单调,对应的函数就可以用二分法计算根 。平方根函数符合这个条件,当然可以用二分法求解 。
上述程序片段是一段伪代码 , - 表示赋值 。
done=1代表根已求出 。
a,b代表求根的区间,初始值a=0,b=一个比可能值要大的数 , 题目中举例说2的16次方,其实只要取x就足够了 。
c代表当前假定的根 。
do循环就是一个二分的过程,直到done=1或者c=c_old结束 。
在实际使用时,if (c*c == x)及 (c != c_old)都应该改成判断两个数的差是否小于给定的误差限,否则实数的相等比较会出现判断错误的 。
c语言二分法求方程根用二分法求方程在(-10,10)之间的根:2x^3-4x^2+3x-6=0.
解:x1=x0=(x1+x2)/2=x2
程序:
【c语言中的函数二分法求根 用c语言编写二分法求根】#includestdio.h
#includemath.h
int main()
{
float x0,x1,x2,fx0,fx1,fx2;
do
{
printf("输入x1,x2的值:");
scanf("%f,%f", x1, x2);
fx1 = 2*x1*x1*x1 - 4 * x1*x1 + 3 * x1 - 6;
fx2 = 2 *x2*x2*x2 - 4 *x2*x2 + 3 * x2 - 6;
} while (fx1*fx20);
do
{
x0 = (x1 + x2)/2;
fx0 = 2 * x0*x0*x0 - 4 * x0*x0 + 3 * x0 - 6;
if (fx0*fx10)
{
x2 = x0;
fx2 = fx0;
}
else
{
x1 = x0;
fx1 = fx0;
}
} while (fabs(fx0)= 1e-5);
printf("x=%5.2f\n",x0);
return 0;
}
c语言二分法求根二分法计算函数f(x)=x*x*x*x+2*x*x*x-x-1;
本程序在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=0;k=n0;k++)
{ x=(a+b)/2;
h=(b-a)/2;
y=f(x);
if(h10e-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;
}
}
}
C语言编程 二分法求方程的根这段代码是求解方程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缩小迭代区间,继续迭代!
C语言二分法求方程的根没听说过二分法能够求根,二分法只是对于有序数组的查找方法 , 并不能去求解任意方程的根(只可以求解在某个区间单调递增或递减的函数曲线对应方程的根),较为通用的方程求根方法是牛顿法 。
关于c语言中的函数二分法求根和用c语言编写二分法求根的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读