多項式是由一組常數係數,a、b、c、……(數值)確定的。
TableForm[{a x + b, a x^2 + b x + c, a x^3 + b x^2 + c x + d, ". . ."}] // TraditionalForm
多項式求解問題就是找到一個值 x,使這些項的總和等於 0. 根據 x 的最高次數分別稱為線性、二次、三次、四次、五次、六次、七次、八次. 多項式。我們稱 y = a x + b 為線性,是因為它的圖線是一條直線. 比如令 a = 2,b = 3,
Plot[2 x + 3, {x, -2, 1}]
2 x + 3 = 0 的(唯一)解是 x = -3/2. 一般情況下,有 x = -b/a. 由於含有 x 的平方項,y = a x^2 + b x + c 是二次的. 你會記得一元二次方程有兩個通解:
Solve[a x^2 + b x + c == 0, x]
這樣的表達式被稱為不盡根式. 最常見的應用是在幾何上. 圓、拋物線和雙曲線通常由二次多項式指定。當我們想知道一個二次多項式與已知直線何時相交時,我們就得到一個二次方程. 這甚至發生在 雙曲線是矩形的,例如:
Plot[{(1 - x)/(x + 2), 2 x + 3}, {x, -4, 1}, PlotRange -> {{-4, 1}, {-6, 6}}, AspectRatio -> 4/5]
表示雙曲線的分支與直線相交的方程為
(1 - x)/(x + 2) == 2 x + 3;
要得到形如 x^2 + b x + c ==0 的方程,需要兩邊同時乘以 x + 2,
Distribute[(x + 2)*%, Equal]
1 - x == (2 + x) (3 + 2 x)
再兩邊同時減去(2 + x) (3 + 2 x),
(2 + x) (3 + 2 x) - # & /@ %
-1 + x + (2 + x) (3 + 2 x) == 0
然後展開:
Expand@%
5 + 8 x + 2 x^2 == 0
因為 Mathematica 不是使用傳統的方法處理方程,"兩邊同時減去"這一步需要解釋一下. 它使用 & 定義了一個函數,從 (2 + x) (3 + 2 x)減去(#),然後"映射" ( /@ ) 到等式兩邊.
不管怎樣,求解二次方程:
Solve[%]
{{x -> 1/2 (-4 - Sqrt[6])}, {x -> 1/2 (-4 + Sqrt[6])}}
或者近似
N@%
{{x -> -3.22474}, {x -> -0.775255}}
當然,Mathematica 非常樂意直接求解:
Solve[(1 - x)/(x + 2) == 2 x + 3]
{{x -> 1/2 (-4 - Sqrt[6])}, {x -> 1/2 (-4 + Sqrt[6])}}
我們可以把這些值作為繪圖範圍
Flatten[% /. Rule -> List]
{x, 1/2 (-4 - Sqrt[6]), x, 1/2 (-4 + Sqrt[6])}
來直觀地檢查合理性:
Plot[{(1 - x)/(x + 2), 2 x + 3}, %[[{1, 2, 4}]]]
該圖形以交點作為起點和終點. ( {1, 2, 4} 是為了去除額外的 x.)
要是雙曲線是顛倒的,貌似就沒解了:
Plot[{(x - 1)/(x + 2), 2 x + 3}, {x, -4, 1}, PlotRange -> {{-4, 1}, {-6, 6}},
AspectRatio -> 4/5]
但 Mathematica 很聰明,它給的結果不是{},而是
Solve[(x - 1)/(x + 2) == 2 x + 3]
{{x -> 1/2 (-3 - I Sqrt[5])}, {x -> 1/2 (-3 + I Sqrt[5])}}
也就是說,解含有虛數. 二次方程是通過配方法來求解的,兩邊同時加上b^2/4a-c:
# + b^2/(4 a) - c & /@ (a x^2 + b x + c == 0)
b^2/(4 a) + b x + a x^2 == b^2/(4 a) - c
然後左邊配成平方除以4a:
Factor /@ %
(b + 2 a x)^2/(4 a) == -((-b^2 + 4 a c)/(4 a))
然後乘以 4a 後
4 a # & /@ %
(b + 2 a x)^2 == b^2 - 4 a c
我們可以取兩邊的平方根.
Sqrt /@ % // PowerExpand
b + 2 a x == Sqrt[b^2 - 4 a c]
現在它變成了一個線性方程. PowerExpand 強制 Mathematica 選擇 b + 2 a x,而不是 - b - 2 a x 作為平方的方根.
正如"每個人"都記著二次方程的解,"沒有人"記得三次方程的解。原因是:
Solve[ a x^3 + b x^2 + c x + d == 0, x] // TraditionalForm
現在考慮一個簡單情形:
Plot[x^3 - x + 1/3, {x, -3/2, 3/2}]
顯然它有三個實根,在 - 1.1, .35, 和 .75 附近. 具體是多少呢?
Solve[x^3 - x + 1/3 == 0]
嘿,等一下,根不是實數嗎?是不是 Mathematica 忘了化簡了?
Simplify@%%
這麼複雜的式子怎麼會是實數呢?讓我們看一下虛部:
ComplexExpand@Im[x /. %]
{0, 0, 0}
那好吧,老天爺,告訴我們實部是啥吧!
ComplexExpand@Re[x /. %%]
三角函數?!還不如平方根和立方根呢!
Developer`TrigToRadicals@%%
天啊!那些三角函數是實數,但為啥這裡卻跟著一堆虛數單位?- 1.1、.35 和 .75 在哪呢??請給出數來.
N@%
{0.742227 + 0. I, 0.394931 + 0. I, -1.13716 + 0. I}
它們就在那,但這些 0. i 是怎麼回事?奇怪的是,它們是不可避免的. 作為一個數學分支的伽羅瓦理論已經證明,不含虛數立方根的解式是不存在的,即使它們的加和為實數.
Henry Baker 的動畫(本文頂部可以看到實際動畫)展示了均為實數的三個根之間的關係:
這是張一般情況下的圖片——三個實根的三次方程有一個拐點,它們關於拐點對稱. 如果將拐點平移到原點,則會得到一個奇函數 f(-x )= -f(x).
四次方程可以通過將兩條曲線相交得到. 一般情況下的四次方程會讓人有點抓狂,如果不怕的話就按住 shift return 鍵試試吧.
Solve[ a x^4 + b x^3 + c x^2 + d x + e == 0, x]
求解五次方程就更是不要命了.
Solve[ a x^5 + b x^4 + c x^3 + d x^2 + e x + f == 0, x]
哈哈,Mathematica 放了我們一馬,結果被剪切了,但為什麼不至少提供一下互動大型表達式瀏覽器呢?因為它不能. 不存在一般五次方程的根表達式. 顯然,通過因式分解我們可以求解某些五次方程.
Expand@# == # &[(x^2 + 1) (x^3 - x - 1)]
-1 - x - x^2 + x^5 == (1 + x^2) (-1 - x + x^3)
歷經幾個世紀的挫敗,求解五次方程已經與三等分角和倍立方問題一樣成為困擾人們的幾大數學難題。
許多人錯誤地認為唯一可解的五次方程要麼是可因式分解的,要麼是顯而易見的,如(x + a)^ 5 + b = 0. 但只有一小部分,接近0%,可以巧妙地解決,比如:
x^5 - 5 x^2 - 3 == 0
它的根相當繁瑣. 唯一的實根是
至少從外觀看來是實數. 平凡的 Mathematica 無法求解——連驗證都不行!只能近似:
%^5 - 5`69 %^2
3.0000000000000000000000000000000000000000000000000000000000000000000
我曾經(正確地?)說服自己,每個可求解的六次方程都可以降次到具有二次不盡根係數的三次方程或具有三次不盡根係數的二次方程. 但誰會想要求解這樣一個方程呢?幾何再次派上用場了. 問題:將一個正方形拆分成有限個銳角、等腰三角形. 可以用十個:
確定 Subscript[x, 1]、Subscript[y, 1]、Subscript[x, 2] 和 Subscript[r, 3] 的方程是12次的!這些方程可以通過因式分解降為具有不盡根係數的六次方程,但專家 Noam Elkies 認為這是不可求解的. 然而當次數為6、8、9、……或任何複合數(或稱非質數)時,有時候會比較幸運.
Factor[5 + 4 x^2 - 4 x^3 + x^4 - 2 x^5 + x^6]
5 + 4 x^2 - 4 x^3 + x^4 - 2 x^5 + x^6
不能進行因式分解. 然而
Solve[% == 0]
可以求得所有六個解!怎麼實現呢?這個六次方程可以寫作
x^2 - 4 x + 5 /. x -> x^3 - x^2
5 - 4 (-x^2 + x^3) + (-x^2 + x^3)^2
Factor@%
5 + 4 x^2 - 4 x^3 + x^4 - 2 x^5 + x^6
也就是說,將三次方程替換為二次方程。如果我們注意到這一點,我們只是用y來代替 x ^ 3 - x ^ 2 - 2 ,對得到的二次方程求 y,然後求解關於 x 的三次方程,用 y 表示。我們是怎麼注意到這一點的?用魔法函數
Decompose[5 + 4 x^2 - 4 x^3 + x^4 - 2 x^5 + x^6, x]
{5 - 4 x + x^2, -x^2 + x^3}
這正好是 Solve 函數所了解的. 知道嗎?你的八次方程可能只是三個二次方程的組合.
但請注意:這個六次方程的解,既不能因式分解
5 + 18 x + 36 x^2 + 36 x^6
也不能正常分解.
{570630428688384000000 + 4891824455002619904 x + 161093791317491712
x^2 + 12153384861696 x^3 + 984379392 x^4 - 17280 x^5 + x^6}
Simplify[% /. x -> %%]
{0}
所以括號中的數量滿足最小次數為36的最小多項式!
令人驚奇的是,這是一個甚至連 Mathematica 第11版都不知道的訣竅:如果係數形成回文,六次甚至八次方程總是可以求解!例如,
Solve[1 + x + x x - x^3 + x^4 + x^5 + x^6 == 0]
(失敗。)但是我們可以對付完全一般的情況! 對於任意a,b,c,d,假設 x 滿足互反多項式(所以被稱作回文式)
a x^6 + b x^5 + c x^4 + d x^3 + c x x + b x + a
a + b x + c x^2 + d x^3 + c x^4 + b x^5 + a x^6
現在假設 y = x + 1/x (或寫作 x y = x^2 + 1),求六次多項式除以這個二次多項式(關於 x)的餘式:
Factor[PolynomialRemainder[%, x + 1/x - y, x]]
(-x - y + x y^2) (-2 b + d - 3 a y + c y + b y^2 + a y^3)
求這個餘式意味著減去二次式的倍數,使得六次多項式將簡化為關於 x 的線性多項式. 但是我們假定了二次和六次多項式都是0,所以我們從0減去0,得到x和y之間的可疑關係, 乘以我們可以求解的 y 的三次式! 通過 y = x + 1 / x 來求解x.
回文多項式被稱作互逆多項式的原因是,如果用 1/x 代替 x,兩者具有相同的根,從而將係數的次序逆轉(並除以 x^6).
這個令 y = x + 1/x 的技巧可以成功的關鍵是我們可以將各項用它們的倒數匹配,並利用關係:
1/x^3 + x^3 == -3 (1/x + x) + (1/x + x)^3
1/x^2 + x^2 == -2 + (1/x + x)^2
朱利安和我有一個七次方程求解程序,但他不相信它能找到所有的解. 超過七次以後,能找到一個強有力的求解器機會會大大減小,TA在理論上可以求解的概率也是如此. 但是如果你的問題不是隨機組成的,那麼總是值得一試.
相關文章
Wolfram 語言和 Mathematica 11.2 上線了
Wolfram|Alpha 橫掃全國各科高考試題
用 Mathematica 生成正多面體環
Wolfram語言新功能:增強的求導功能