C语言求解一元三次方程实根:牛顿迭代法

C语言中没有内置函数可以直接求解一元三次方程的实根。本文将介绍如何使用牛顿迭代法来逼近方程的实根,并提供完整的C语言代码示例。

牛顿迭代法是一种常用的数值计算方法,用于逼近函数的零点。其基本思想是:

  1. 从一个初始猜测值 x 开始。
  2. 在当前点 (x, f(x)) 处作函数的切线。
  3. 切线与 x 轴的交点作为下一个猜测值 x。
  4. 重复步骤 2 和 3,直到满足预设的精度要求。

以下是使用牛顿迭代法求解一元三次方程实根的C语言代码:

#include <stdio.h>
#include <math.h>

// 定义一元三次方程
double f(double x, double a, double b, double c, double d) {
    return a * pow(x, 3) + b * pow(x, 2) + c * x + d;
}

// 定义一元三次方程的导数
double f_prime(double x, double a, double b, double c) {
    return 3 * a * pow(x, 2) + 2 * b * x + c;
}

// 使用牛顿迭代法求解一元三次方程的实根
double newton_method(double x, double a, double b, double c, double d) {
    while (fabs(f(x, a, b, c, d)) > 1e-6) {
        x -= f(x, a, b, c, d) / f_prime(x, a, b, c);
    }
    return x;
}

int main() {
    double a, b, c, d;
    double x1, x2, x3;

    printf('请输入一元三次方程的系数 (a, b, c, d): ');
    scanf('%lf %lf %lf %lf', &a, &b, &c, &d);

    // 使用牛顿法求解实根
    x1 = newton_method(-100, a, b, c, d);  // 初始猜测值:-100
    x2 = newton_method(x1 + 1, a, b, c, d); // 从上一个根附近开始寻找下一个根
    x3 = newton_method(x2 + 1, a, b, c, d); // 从上一个根附近开始寻找下一个根

    printf('一元三次方程的实根为:
');
    printf('x1 = %.2lf
', x1);
    printf('x2 = %.2lf
', x2);
    printf('x3 = %.2lf
', x3);

    return 0;
}

代码解释:

  1. f(x, a, b, c, d) 函数定义了一元三次方程的表达式。
  2. f_prime(x, a, b, c) 函数定义了一元三次方程的导数表达式。
  3. newton_method(x, a, b, c, d) 函数实现了牛顿迭代法,传入初始猜测值 x 和方程系数,返回逼近的实根。
  4. main 函数中,首先读取用户输入的方程系数,然后调用 newton_method 函数三次,分别使用不同的初始猜测值来逼近三个实根。

需要注意的是:

  1. 牛顿迭代法的收敛性取决于初始猜测值的选取。
  2. 该代码仅适用于求解具有三个实根的一元三次方程。

希望本文能帮助你理解如何在C语言中使用牛顿迭代法求解一元三次方程的实根。


原文地址: https://www.cveoy.top/t/topic/oX4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录