提高篇第20-21课第二题

来源:互联网 发布:nero刻录软件 编辑:程序博客网 时间:2024/05/22 12:50
#include <stdio.h>#include <stdlib.h>//第二题,二分法/*1 确定区间[a, b], 验证f(a)·f(b)<0   2 求区间(a, b)的中点c3 判断(1) 若f(a)·f(c)<0, 则令b = c;(2) 若f(c)·f(b)<0, 则令a = c.4 判断f(c)是否达到精确度ξ:即若┃f(c)┃<ξ,则x = c就是使f(x)接近零点的近似值,否则重复2 - 4.*///思路分析//1.如何确定函数的a b区间是难点,此函数为三次函数,可知只有一个点使f(x)=0,故可以先找一个负数点,逐渐增加x令f(x)>0,从而确定一个基础的范围,但是如果是其他形式的函数可能有多个x轴交点//上面的方法会漏解,大家有什么好的思路,还要先列方程求出范围么T Tdouble fbs(double);double f(double);int main(){double temp = 0;//显然f(0)<0double a, b, c;while (f(temp) <= 0)temp=temp+1;//确定了基础的[a,b]范围为[0,temp]a = 0;b = temp;c = (a + b) / 2;//printf("a=%lf,b=%lf,c=%lf",a,b,c);while (fbs(f(c)) > 1e-5){if (f(a)*f(c) < 0)b = c;else if (f(b)*f(c) < 0)a = c;c = (a + b) / 2;}printf("方程的解为%lf", c);return 0;}double f(double x){double result;result = x*x*x*2 - x*x*5 + x*3 - 6;return result;}double fbs(double x){double result;result = (x >= 0 ? x : -x);return result;}

0 0
原创粉丝点击