求解一元三次方程的程序
时间: 2023-09-04 12:11:21 浏览: 271
以下是一个 MATLAB 程序,用于求解一元三次方程的实数解:
```mat
function [x1, x2, x] = solve_cubic(a, b, c, d)
% 求解一元三次方程 ax^3 + bx^2 + cx + d = 0 的实数解
% 判断 a 是否为 0
if a == 0
error('a 不能为 0。');
end
% 归一化
b = b / a;
c = c / a;
d = d / a;
% 计算 p 和 q
p = c - b^2 / 3;
q = d + 2 * b^3 / 27 - b * c / 3;
% 计算 Delta
Delta = q^2 / 4 + p^3 / 27;
if Delta > 0
% Delta > 0,有一个实数解和两个共轭复数解
u = nthroot(-q / 2 + sqrt(Delta), 3);
v = nthroot(-q / 2 - sqrt(Delta), 3);
x1 = u + v - b / 3;
x2 = -(u + v) / 2 - b / 3 + 1i * (u - v) / 2 * sqrt(3);
x3 = -(u + v) / 2 - b / 3 - 1i * (u - v) / 2 * sqrt(3);
elseif Delta == 0
% Delta = 0,有一个实数解和一个二重根
u = nthroot(-q / 2, 3);
x1 = 2 * u - b / 3;
x2 = -u - b / 3;
x3 = x2;
else
% Delta < 0,有三个实数解
theta = acos(-q / 2 / sqrt(-p^3 / 27));
x1 = 2 * sqrt(-p / 3) * cos(theta / 3) - b / 3;
x2 = 2 * sqrt(-p / 3) * cos((theta + 2 * pi) / 3) - b / 3;
x3 = 2 * sqrt(-p / 3) * cos((theta - 2 * pi) / 3) - b / 3;
end
```
该程序接受四个输入参数 a、b、c、d,分别表示一元三次方程的系数,返回三个输出参数 x1、x2、x3,分别表示方程的实数解。
该程序采用了公式法求解一元三次方程的实数解,具体实现过程见注释。
阅读全文