c语言求一元二次方程的近似解
发布网友
发布时间:2022-05-11 04:42
我来回答
共5个回答
热心网友
时间:2024-02-09 09:28
#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);
}
热心网友
时间:2024-02-09 09:29
是一定要用你说的这种算法吗?如果不是的话直接从0.001循环,循环到符号位变化,比较变化前变化后的两个数取差最小的不就好了么
热心网友
时间:2024-02-09 09:29
参考
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)
{
m = a + (b - a) * 0.5;
fm = f(m);
if(sign(fa) == sign(fm))
{
a = m;
fa = fm;
}
else
{
b = m;
fb = fm;
}
}
return m;
}
热心网友
时间:2024-02-09 09:30
我写了一个,可以求形如aX平方+bX=c的一元二次方程的大于0的解
//----------------------------
//@Author 百度空间 radestor
//----------------------------
#include "stdafx.h"
//一元二次方程的三个参量a、b、c
const double a = 1;
const double b = 1;
const double c = 1;
const double definition = 0.001;//精确度
bool Lower(double fValue)
{
return (fValue * a + b) * fValue < c;
}
double Computer()
{
double fXn2 = 0;//最终结果
double fXn1 = 0;
while (true)
{
if(Lower(fXn2)) //寻找第一次变号,确定整数位
{
++fXn2;//不变号累加
}
else
while (true)
{
double fTemp = (fXn2 + fXn1) / 2;//设置fXn1
if(Lower(fTemp))
fXn1 = fTemp;
else
fXn2 = fTemp;
//判断是否精确到0.001
if (fXn2 - fXn1 < definition)
{
return fXn2;
}
}
}
}
void main()
{
printf("结果是:%.3f", Computer());
};
热心网友
时间:2024-02-09 09:30
printf("结果是:%.3f", Computer());