Nwafu-OJ-1506 Problem 9 阶段2考试题目3 二分法解方程
创始人
2024-03-01 11:34:31
0

问题 : 阶段2考试题目3 二分法解方程

时间限制: 1 Sec  内存限制: 128 MB
提交: 4537  解决: 1017
[提交][状态][讨论版]

题目描述

编写程序,用非线性方程二分法求解函数BiRoot(),求任意方程f(x)=0在区间[a,b]之间的一个解,精确到10-6。
函数原型为:double BiRoot(double (*fun)(double), double, double)。
二分法求解的基本思路如下图所示,对于区间[a,b]上连续且f(a)•f(b)<0的函数y=f(x),通过计算a,b中点的函数值,不断把区间一分为二,并舍弃无解的半段区间,并更新a,b,使两个端点逐步逼近零点,迭代的终止条件是计算的函数值小于10-6,最终得到符合精度要求的近似解。
例:如a=-5, b=0,且f(x)= x3-10x2+3x+20.0则函数返回-1.209
如a=0, b=3, 且f(x)= x3-6x-1则函数返回2.529

提示

f(a)•f(b)>0,则意味着方程在[a,b]之间可能无解,输出信息“error! a,b have the same sign.\n”后,可直接结束程序。

该题目可参考教材P317,tabulate.c代码。

代码实现

#define _CRT_SECURE_NO_WARNINGS 1#include 
#include double BinarySearch(double (*f)(double),double, double);
double BiRoot(double (*f)(double), double a, double b);double BinarySearch(double (*f)(double),double a, double b)
{double x;x = (a + b) / 2.0;if (x - a < 1E-6)   /* 此处填空 */return x;else{if (f(a) * f(x) > 0)return BinarySearch(f,x, b);    /* 此处填空 */elsereturn BinarySearch(f,a, x);    /* 此处填空 */}
}double BiRoot(double (*f)(double), double a, double b) {double x;scanf("%lf%lf", &a, &b);if (f(a) * f(b) > 0)     /* 此处填空 */{printf("error! a,b have the same sign.\n");return -1;}x = BinarySearch(f, a, b);  /* 此处填空 */return x;
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...