一元三次方程求解:解题方法与C语言实现

本文将介绍如何求解形如'ax³ + bx² + cx + d = 0'的一元三次方程的实根,并提供一个C语言程序实现。

问题描述

给出一个一元三次方程 ax³ + bx² + cx + d = 0,其中a, b, c, d均为实数。假设该方程存在三个不同的实根,且根的范围在-100至100之间,根与根之差的绝对值 ≥ 1。要求由小到大依次输出这三个实根,精确到小数点后两位。

解题方法

一元三次方程的求解方法有很多,本文采用 判别式法 来求解实根。

判别式法 的核心是利用判别式 Δ 的值来判断方程根的类型:

  • Δ > 0:方程有一个实根和一对共轭复根
  • Δ = 0:方程有一个实根和两个重根
  • Δ < 0:方程有三个不同的实根

C语言实现

以下是用C语言编写的程序来求解一元三次方程的实根:

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

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

    scanf("%lf %lf %lf %lf", &a, &b, &c, &d);

    p = (3 * a * c - b * b) / (3 * a * a);
    q = (2 * pow(b, 3) - 9 * a * b * c + 27 * a * a * d) / (27 * a * a * a);
    delta = pow(q / 2, 2) + pow(p / 3, 3);

    if (delta > 0) {
        double sqrt_delta = sqrt(delta);
        double u = cbrt(-q / 2 + sqrt_delta);
        double v = cbrt(-q / 2 - sqrt_delta);

        x1 = u + v - b / (3 * a);
        printf("%.2lf ", x1);

        double real_part = -(u + v) / 2 - b / (3 * a);
        double imaginary_part = sqrt(3) * (u - v) / 2;
        x2 = real_part + imaginary_part * I;
        x3 = real_part - imaginary_part * I;
        printf("%.2lf %.2lf\n", creal(x2), creal(x3));
    } else if (delta == 0) {
        double u = cbrt(-q / 2);

        x1 = 2 * u - b / (3 * a);
        x2 = -u - b / (3 * a);
        printf("%.2lf %.2lf %.2lf\n", x1, x2, x2);
    } else {
        double u = cbrt(sqrt(-delta));
        double v = acos(-q / (2 * u));

        x1 = 2 * u * cos(v / 3) - b / (3 * a);
        x2 = 2 * u * cos((v + 2 * M_PI) / 3) - b / (3 * a);
        x3 = 2 * u * cos((v + 4 * M_PI) / 3) - b / (3 * a);
        printf("%.2lf %.2lf %.2lf\n", x1, x2, x3);
    }

    return 0;
}

代码解释

  1. 输入系数: 程序首先读取四个实数 a, b, c, d,分别表示一元三次方程的系数。

  2. 计算判别式: 程序根据系数计算判别式 Δ,并根据 Δ 的值判断根的类型。

  3. 求解实根: 根据判别式 Δ 的值,程序分别计算三种情况下方程的实根。

    • Δ > 0: 程序计算实根 x1,并利用复数运算求解复根 x2 和 x3。
    • Δ = 0: 程序计算两个相同的实根 x1 和 x2。
    • Δ < 0: 程序利用三角函数计算三个不同的实根 x1, x2, x3。
  4. 输出结果: 程序按照从小到大的顺序输出三个实根,精确到小数点后两位。

总结

本文介绍了如何利用判别式法求解一元三次方程的实根,并给出了C语言实现代码。希望本文能帮助你更好地理解一元三次方程的求解方法。

一元三次方程求解:解题方法与C语言实现

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

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