c 二分法求方程
时间: 2025-05-19 10:10:42 浏览: 15
### C语言实现二分法求解方程
以下是基于给定区间 `(-10, 10)` 使用二分法求解方程 \(2x^3 - 4x^2 + 3x - 6 = 0\) 的完整代码示例:
```c
#include <stdio.h>
#include <math.h>
// 定义函数 f(x) = 2x^3 - 4x^2 + 3x - 6
float function(float x) {
return ((2 * x - 4) * x + 3) * x - 6;
}
int main() {
float a = -10, b = 10, mid, fa, fb, fm;
// 计算两端点的函数值
fa = function(a);
fb = function(b);
// 判断是否有根存在
if (fa * fb > 0) {
printf("在区间 [%f, %f] 上无解。\n", a, b);
return 0;
}
// 开始迭代过程
do {
mid = (a + b) / 2; // 中间点
fm = function(mid); // 中间点对应的函数值
if (fm == 0 || fabs(fm) < 1e-5) { // 如果满足精度条件,则停止循环
break;
} else if (fa * fm < 0) { // 根位于左半部分
b = mid;
fb = fm;
} else { // 根位于右半部分
a = mid;
fa = fm;
}
} while (fabs(b - a) >= 1e-5); // 控制误差范围
printf("方程的一个近似解为:x = %.5f\n", mid);
return 0;
}
```
#### 说明
上述程序实现了二分法的核心逻辑,具体如下:
- 首先定义目标函数 \(f(x)\),并计算初始区间的两个端点处的函数值[^1]。
- 若两者的乘积大于零 (\(f(a) \cdot f(b) > 0\)),则表明该区间内不存在实数根;反之继续执行算法。
- 进入`do...while`循环结构,在每次迭代过程中重新设定新的子区间以及更新中间位置\(mid\)及其对应函数值直到达到指定精确度为止。
此方法简单易懂且收敛稳定,适用于连续单调变化的一元非线性方程式寻找单一数值型解答的情况。
阅读全文
相关推荐














