c语言求一元二次方程的近似解

来源:百度知道 编辑:UC知道 时间:2024/05/09 07:09:28
麻烦高手编一个小程序

求一元二次方程 x平方+x-1=0 的大于0的近似解,精度0.001。
手工算法是这样,令方程左边=f(x),
当x1=0,f(x)<0
当x2=1, f(x)>0
所以取x3=(x1+x2)/2,得f(x3)<0
所以取x4=(x2+x3)/2,...
...
直到x(n)-x(n-1)<0.001
x(n)就是想要的结果。

请高手帮忙!

#include<stdio.h>
double f(double x)
{
return x*x+x-1;
}

void main()
{
double xnj1,xn,temp;
xnj1=0;
xn=1;
while(xn-xnj1>=0.001)
{
temp=(xnj1+xn)/2;
if(f(temp)>0)
xn=temp;
else
xnj1=temp;
}
printf("%.3f\n",xn);
}

是一定要用你说的这种算法吗?如果不是的话直接从0.001循环,循环到符号位变化,比较变化前变化后的两个数取差最小的不就好了么

参考
http://zhidao.baidu.com/question/39397721.html
typedef double (*Fun)(double);

int sign(double x)
{
return x > 0.0 ? 1 : x < 0.0 ? -1 : 0;
}

double bisection(double a, double b, Fun f) //二分法
{
double m, fa, fb, fm;
fa = f(a); fb = f(b);
if(sign(fa) == sign(fb))
{
printf("error\n");
return 0.0;
}
while(fabs(b - a) > 1e-12)
{