费拉里法求解一元四次方程

从初中接触函数和方程开始,我们就经常和一元二次方程打交道,几乎不会遇到需要求解一元三次方程或一元四次方程的问题。前段时间我看到一篇涉及到解一元四次方程的文献,我这么厉害,肯定要自己去解它一解。后来发现这个问题没有想象中的简单,网上一搜发现400多年前一个意大利小伙费拉里(Ferrari)解决了这个问题,求解方法很简单。

费拉里法求解一元四次方程_第1张图片 图1 函数f(x)图像


绘制以上图像的Python程序如下

import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(-5,5,50)
y = x**4 + 6*x**2 - 60*x + 36  # 一元四次函数f(x)=x^4+6x^2-60x+36

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.title('$f(x)=x^4+6x^2-60x+36$')
plt.grid(True)
plt.show()

卡尔达诺(Cardano),也有翻译成卡尔丹的,卡尔丹公式就是以他的名字命名的,一位数学家给了卡尔达诺一个世界性的问题,这个问题是求解以下方程:
$$x^4+6x^2+36=60x \tag{1}$$
卡尔达诺没有解决这个问题,他将这个问题交给了费拉里,费拉里解决了这个问题。这个问题可以归纳为x^4+ax^2+bx+c=0这种形式的一元四次方程求解问题。
$$(x^2+a)^2 = ax^2-bx+a^2-c \tag{2}$$
引入变量y,上式等价于
$$(x^2+a+y)^2 = (2y+a)x^2-bx+y^2+2ay+a^2-c \tag{3}$$
引入变量y是为了将上式右边配成完全平方式,所用将上式右端看成关于x的方程,其判别式等于0可求得满足条件的y。令上式右端关于x的方程的\Delta=0,可得
$$(-b)^2-4(2y+a)(y^2+2ay+a^2-c)=0 \tag{4}$$
整理可得关于y的一元三次方程my^3+ny^2+ky+l=0,试着在头脑中想象f(y)=my^3+ny^2+ky+l的函数图像,很明显可以得到一元三次方程至少有一个实数解,该解可由卡尔丹公式求得,形如y^3+\alpha y+\beta=0的一元三次方程的实数解\eta由下式求得
$$\eta=\sqrt[3]{-\frac{\beta}{2}+\sqrt{\Delta}} + \sqrt[3]{-\frac{\beta}{2}-\sqrt{\Delta}} \tag{5}$$
其中
$$\Delta=\frac{\alpha^3}{27}+\frac{\beta^2}{4} $$
\eta带入上式(3)可得
$$(x^2+h)^2 = (\xi x+\zeta)^2$$
其中h=a+\eta,\xi=\sqrt{2\eta+a},\zeta=-b/(2\sqrt{2\eta+a})。这样就把一元四次方程降次成一元二次方程
$$x^2+h\pm(\xi x+\zeta)=0 \tag{6}$$
x的解为
$$
x_{1,2} = \frac{-\xi\pm\sqrt{\xi^2-4(h+\zeta)}}{2} \tag{7}
$$
$$
x_{3,4} = \frac{\xi\pm\sqrt{\xi^2-4(h-\zeta)}}{2} \tag{8}
$$
MATLAB求解原方程的代码如下

a = 6;
b = -60;
c = 36;

alpha = -a^2/12 - c;
beta = -a^3/108 + a*c/3 - b^2/8;
delta = alpha^3/27 + beta^2/4;
Z = nthroot(-beta/2+sqrt(delta),3) + nthroot(-beta/2-sqrt(delta),3);
eta = Z - 5*a/6;   %用卡尔丹法求解三次方程一定存在的那个实数解eta

h = a + eta;
xi = sqrt(2*eta+a);
zeta = -b/(2*sqrt(2*eta+a));
t_go(1) = (xi + sqrt(xi^2 - 4*(h-zeta)))/2;
t_go(2) = (xi - sqrt(xi^2 - 4*(h-zeta)))/2;
t_go(3) = (-xi + sqrt(xi^2 - 4*(h+zeta)))/2;
t_go(4) = (-xi - sqrt(xi^2 - 4*(h+zeta)))/2;

check = t_go.^4 + 6*t_go.^2 - 60*t_go + 36   %检验所求解的正确性

 

你可能感兴趣的:(数学,一元四次方程,费拉里法)