官术网_书友最值得收藏!

2.1 多項式方程的求解

多項式方程是實際應用中經常遇到的方程,本節先介紹多項式方程的數學形式,再介紹多項式方程的求解方法。


定義2-1 多項式方程的一般形式為

多項式方程根與系數的關系滿足如下的Viète定理,又稱Viète公式,該定理是以法國數學家Fran?ois Viète(1540?1603)命名的。


定理2-1 (Viète定理)假設多項式方程的根為x1x2xn,則有

本節側重介紹低階多項式方程的求根公式及其MATLAB實現,并給出高階多項式方程的Abel–Ruffini定理。

2.1.1 一次方程與二次方程

一次與二次方程都有很簡單的求解公式,這里將通過例子演示一元方程與二元方程的直接求解方法。


例2-1 一次多項式方程x+c=0的解是什么?

顯然,一次多項式方程的解是x=?c,不論c是何值。


例2-2 公元四至五世紀的中國古代著名的數學著作《孫子算經》曾給出了雞兔同籠問題:“今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各幾何?”

古典數學著作中有各種各樣的方法求解雞兔同籠問題。若引入代數方程的思維,則假設雞的個數為x1,兔的個數為x2,這樣容易地列出下面的二元一次方程組:

由第一個方程,令x1=35?x2,將其帶入第二個方程,有

2(35?x2)+4x2=70?2x2+4x2=70+2x2=94

立即得出x2=12,代入則可以得出x1=35?x2=23。將根代入原始方程,則可以看出誤差都為零,說明得出的根是正確的。當然,求解這類方程有許多種方法,這里暫時不去探討了。


例2-3 一元二次方程ax2+bx+c=0的求解。

古巴比倫人早在公元前1800年就開始研究這類問題,后來諸多數學家也在研究二次方程的求解方法,直到1615年出版的法國數學家Fran?ois Viète的著作中,給出了一般多項式方程根與系數之間的關系,即前面給出的Viète定理。

提取方程兩端的系數a,則可以得出a(x2+bx/a+c/a)=0,如果a不等于零,則探討方程x2+bx/a+c/a=0的根就可以了。如果采用配方法,可以從底層推導一元二次方程的求解公式。

由最后一個方程顯然可以得出

兩端開方,求代數平方根,再經過簡單處理,則可以得出原方程的兩個根:

2.1.2 三次方程的解析解

三次或三次以上代數方程的求解就沒有這么簡單了。古巴比倫人研究過三次多項式方程。中國三國時期著名數學家劉徽在265年出版了《九章算術注》,其中描述了三次方程(cubic equations)問題。中國唐代數學家王孝通在其著作《輯古算經》中建立并求解了25個特殊三次方程。


定義2-2 三次方程的一般形式為x3+c2x2+c3x+c4=0。

為簡單起見,該方程進行了首一化處理。令x=t?c2/3,則可以將三次方程變換成t3+pt+q=0的形式,其中


例2-4 試利用MATLAB證實式(2-1-3)的敘述。

利用MATLAB進行變量替換,則可以給出下面的語句:

則可以立即得出結果如下,由此可以證實式(2-1-3)中的結果。

這樣,變量t三個根的閉式求解公式為

其中,ξ=(?1+)/2,且

不過在MATLAB實際計算中,由上式獨立計算uv的值有時會出現錯誤,因為開方運算解是不唯一的。為準確計算uv值,可以考慮先計算u,再用Viète定理計算v的值,v=?p/(3u)。

當然,有一種特殊情況必須考慮,就是當u=0時,v=0,這時方程的三重根為x=?c2/3。

將得出的t代入x=t?c2/3,可以得出方程的三個根。這個閉式解公式是意大利數學家Gerolamo Cardano在1545年提出的。

2.1.3 四次方程的解析解

一般四次方程(quartic equation)可以先經過特殊的變量替換轉換成特殊形式的四次方程,最后給出閉式求解公式。


定義2-3 四次方程的一般形式為x4+c2x3+c3x2+c4x+c5=0。


例2-5 對一般四次方程,若令x=y?c2/4,則原方程會變換成什么形式?

利用下面的語句可以進行方程的變換。

可以將方程變換成y4+py2+qy+s=0的特殊四次方程形式,其中,

由給出的特殊形式,可以將y的方程變換成下面的形式。

其中,m為三次方程8m3+8pm2+(2p2?8s)m?q2=0的根。這個算法是意大利數學家Lodovico de Ferrari提出的。當然,這樣做的前提是m?=0。如果m=0,則意味著q=0,這樣y的方程可以寫成y4+py2+s=0,易于求解y2,再求出y。有了y,則可以由變換表達式求出相應的x

MATLAB提供的roots()函數是基于矩陣特征值計算的多項式方程求解函數,具體的調用格式為r=roots(p),其中,p為降冪排列的多項式系數向量,r為方程的數值解,為列向量。

該函數在求解有重根方程時經常被詬病,因為得出的根誤差比較大。綜合考慮上面給出的低次方程求解算法,可以編寫出roots()函數的替代函數,該函數有望得出精確的低次方程的數值解,而方程階次高于4時自動嵌入MATLAB的原始roots()函數,得出方程根的數值解。


例2-6 試求解方程(s?5)4=0。

當然,如果以這種形式給出方程,則可以立即得出方程的四個重根,都是5。在實際應用時經常已知方程的展開形式,不知道分解的形式,如何求解呢?可以嘗試MATLAB提供的roots()函數,也可以嘗試新編寫的roots1()函數。

可以看出,roots1()函數得出所期望的四重根s=5,而roots()函數得出的結果為5.0010,5±0.001j,4.9990,可以看出,方程有重根時MATLAB函數數值求解有較大的誤差,在雙精度數據結構下,用其他數值算法也有同樣的問題,在實際應用中可能引起麻煩。代入原方程后,e1=2.1690×10?12e2=0。通過上面演示還可以看出,利用符號運算總能得出正確的結果。


例2-7 試在雙精度框架下求解復系數多項式方程并評價精度。

f(s)=s4+(5+3j)s3+(6+12j)s2?(2?14j)s?(4?4j)=0

到現在為止介紹了兩個多項式方程的數值求解函數roots()和roots1(),其實,構造原方程時,是假設方程的三重根為?1+1j,還有一個實數根?2。現在可以由下面的語句直接求解,得出結果后與已知根的解析解相比,可見,roots()函數得出的根的誤差范數為3.5296×10?5,而roots1()函數的誤差范數為0,說明這里給出的方程的解是精確的,roots1()函數同樣適合求解復系數多項式方程。

2.1.4 高次代數方程與Abel-Ruffini定理


定義2-4 方程的代數解法是利用有限次加減乘除、整數次乘方、開方運算可以構造出來的閉式求解公式。


定理2-2(Abel–Ruffini定理) 任意系數的五次或五次以上的多項式方程是沒有代數解法的。該定理又稱Abel不可能性定理。


意大利數學家Paolo Ruffini(1765?1822)在1799年給出了該定理的不完全證明,挪威數學家Niels Henrik Abel在1824年給出了定理的證明。所以對一般高次多項式方程而言,只能采用數值解方法。

主站蜘蛛池模板: 新宁县| 宜兰市| 龙山县| 盐池县| 云南省| 邛崃市| 志丹县| 新化县| 虎林市| 华池县| 龙江县| 东乌| 沂南县| 锡林浩特市| 隆尧县| 沁阳市| 旺苍县| 临西县| 松溪县| 西峡县| 普洱| 平原县| 井研县| 南和县| 平阳县| 任丘市| 瑞安市| 富阳市| 浠水县| 万盛区| 瑞昌市| 丹巴县| 仁怀市| 孟连| 囊谦县| 贵州省| 湘阴县| 双鸭山市| 平遥县| 合阳县| 南安市|