用二分法求方程的根(C语言编写程序)

用二分法求方程的根(C语言编写程序),第1张

#include <stdio.h>

#include <math.h>

int main() {

double x0, x1, x2, f0, f1, f2

do {

printf("请输入两个点:")

scanf("%lf,%lf", &x1, &x2)

f1 = ((2 * x1 - 4) * x1 + 3) * x1 - 6 //换成你自己的 方程

f2 = ((2 * x2 - 4) * x2 + 3) * x2 - 6 //换成你自己的 方程

printf("f1 = %f, f2 = %f\n", f1, f2)

} while (f1 * f2 >0)

do {

x0 = (x1 + x2) / 2

f0 = ((2 * x0 - 4) * x0 + 3) * x0 - 6

if (f0 * f1 <0) {

x2 = x0

f2 = f0

}

else {

x1 = x0

f1 = f0

}

} while (fabs(f0) >= 0.00001)

printf("方程根为:%lf\n", x0)

return 0

}

#include <iostream>

using namespace std

double p(double x)

{

return 2*x*x*x-4*x*x+3*x-6

}

int main()

{

double a,b

cin >>a >>b

double fa = p(a),fb = p(b),fm

do

{

fm = p((a+b)/2)

if(fm==0) break

if(fm*fa<0) b = (a+b)/2

else if(fm*fb<0) a = (a+b)/2

}while(b-a>0.00001)

cout <<((b+a)/2) <<endl

}

------

你的修改过的:

#include <stdio.h>

#include <math.h>

int main()

{

float a=-10.0

float b=10.0

float fc,fa,fb,c

c=(a+b)/2

fc=2*pow(c,3)-4*pow(c,2)+3*c-6

fa=2*pow(a,3)-4*pow(a,2)+3*a-6

fb=2*pow(b,3)-4*pow(b,2)+3*b-6

if (fc==0)

printf("the result is %lf.\n",c)

else

{

do

{

c=(a+b)/2

if(fc==0) break

if (fa*fc<0)

{b=cc=(a+b)/2fc=2*pow(c,3)-4*pow(c,2)+3*c-6fb=2*pow(b,3)-4*pow(b,2)+3*b-6}

else if(fb*fc<0)

{a=cc=(a+b)/2fc=2*pow(c,3)-4*pow(c,2)+3*c-6fa=2*pow(a,3)-4*pow(a,2)+3*a-6}

}

while (b-a>0.1e-6)

printf("the result is %lf.\n",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缩小迭代区间,继续迭代!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7774409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存