多個根號內含二次項的式子如何求值?也就是雙根式?為什麼計算器無法求解?

時間 2021-05-06 22:52:38

1樓:章佳傑

題主是乙個愛思考的人!很欣賞題主這樣自主鑽研的態度!

就這道題而言,題主已經自己得到了解。過程姑且不論,但是題主的感覺是很正確的,類似這樣的雙根式求極致的問題,都可以轉化到幾何問題上進行畫圖求解,題主探索的換元的過程,其實就跟求解二次方程的時候配方是很像的。但是有的時候兩個根式的係數不一樣,用幾何方法解反而麻煩了(可以模擬光線的折射定律)。

說回到這個方程上來,為什麼這個方程計算器解不出來?

為何 CASIO fx-991CN X 用 SOLVE 解分式方程有時無解?

但是!我要說但是!上面這個回答裡的函式長得很崎嶇,可是題主這個方程的影象畫出來就可以看到,明明是乙個性質很好的函式,是乙個凸函式(一般看到凸函式就知道問題可以解決了),並且有唯一的全域性最小值點——這麼好的性質,居然解不出來?

豈非咄咄怪事?

肯定有人就不信邪,那我們就牛頓法走一遍:

牛頓法迭代表示式為:

手動按計算器有點累,偷懶拿 mathematica 算一下:

In[1]:= Module[,

df = D[f, x];

NestList[(x - f/df) /. &, 99.0, 30]

]Out[1]=

可以看到,基本上迭代到二十五六次的時候就差不多收斂了,能夠準確收斂到預想的解 -8/3,看起來沒有問題——明明就能解嘛,所以是計算器太爛了?

且慢!我們試試稍微改一改,比如把 改成 再求解一遍試試?

In[2]:= Module[,

df = D[f, x];

NestList[(x - f/df) /. &, 99.0, 30]

]Out[2]=

大家可以比對一下上面這兩次程式執行結果(大家來找茬?),這次只用了五六次迭代就已經收斂了。僅僅改了一點點,求解的速度大為提高!看來我們錯怪計算器了。所以應該是牛頓法來背鍋——

再且慢!

牛頓法作為一種廣泛使用的數值方法,其效能優異是有目共睹的,為什麼在這種簡單的方程上會翻車呢?這其實和牛頓法的收斂速度有關,正所謂成也蕭何敗蕭何,以收斂速度著稱的牛頓法,也會栽倒在收斂速度上。

以上面第二次【正常的】牛頓法求解為例,我們計算一下每次迭代之後「距離」最終的「正確答案」有多遠(【容易知道】←_←,其中乙個正確答案是 )

In[3]:= Module[,

df = D[f, x];

Abs[# - (-3752 + 45 Sqrt[11594])/1492] & /@

NestList[(x - f/df) /. &, 99.0, 30]

]Out[3]=

可以看到,乙個正常的牛頓法求解過程,迭代結果的誤差是【迅速】縮小的,迭代五六次之後就已經小於機器上的浮點數誤差了。畫乙個圖可能更直觀一點:

注意縱座標是對數座標!在對數座標下還有這種「急劇加速下降」的表現,也無怪乎牛頓法公認是效能優異的數值演算法了。這種「急劇加速減少誤差」的效能,叫做「二次收斂」,用稍微文縐縐一點的話講,就是隨著迭代步數 n 的增加,誤差是隨著 倍率減小的,注意兩層的指數!

這是乙個非常恐怖的特性!基本上隨便什麼初始值,迭代個六七次就都結束了。

但是!我們回到第一次的迭代過程上來。既然牛頓法有這麼優異的收斂性,為什麼在第一次的迭代中翻車了呢?我們同樣可以畫出第一次迭代時候的誤差曲線圖來:

可以看到誤差曲線是一條直線,意味著這種情況下只有「一次收斂」速度,迭代了二十多次的時候,誤差才勉強收斂到 水平。

這還是得從牛頓法的公式入手。假如說我們知道 是方程的準確解,那麼顯然有 ,我們在 處將方程按泰勒級數展開:

以及他的導函式也同樣展開:

代入牛頓迭代的公式:

如果 ,那麼經過一次迭代之後誤差變化為:

從這個遞推式可以看出,誤差項隨著每一次迭代都有乙個平方的關係,如果 已經距離答案比較近了的話,每一次迭代都能使答案的有效位數翻倍,這也是牛頓法恐怖的二次收斂性的根源。

但是!注意一開始的前提——「如果 」,恰好在這道題中翻車了。這道題的解正好是原始函式的極小值,所以在解的那一點導函式等於 0!

我們看看如果導函式等於 0 的話誤差項會怎麼變化,我們在第二行的分母上就不能只展開到第一項,而要展開到第二項了:

也就是說,每一次迭代,誤差只能減小為前一次的 1/2,雖然等比縮減速度也不慢了,但是和「正常」的牛頓法比起來還是慢得多了。所以並不是這種方程在迭代的時候容易越過零點導致不收斂,而是理論上來說這種方程牛頓法收斂速度就是很慢。

留乙個思考題:對於這種所求零點就是極值點(換句話說 的情況),有沒有可能讓牛頓法恢復到正常的「二次收斂」的速度呢?

2樓:電卓院亜紀良

方程 僅有乙個實數根,而且函式 的零點就是駐點而且還是極小值點。所以顯示無解就很正常,自己結合牛頓法原理想一想,這種方程在迭代的時候很容易越過零點。

所以不要怪計算器了,也不是什麼雙根式方程有什麼問題,純粹僅僅是這個方程本身的特性不適合使用牛頓法求解。不信你把方程右邊換成 試試,只要大於 就好說。

得到無解的時候就多嘗試一些初始值,比如 就可以。從解得的結果來看這個值誤差就比較大,更能說明這一方程不適合使用牛頓法。

3樓:千島桑

1)用柯西不等式可證

2)可自行查閱牛頓迭代法了解其侷限性。然後你說的無解問題,根據影象是連續函式在極值處取得,牛頓迭代法可以解出來,我自己按了,初值相同可解,

我這種計算器怎麼開二次以上的根號?

電卓院亜紀良 建議使用CASIO fx 82ES PLUS A 2nd edition 牛頓法也好,二分法也罷,你考試的時候有這麼多時間在那裡一步一步地算嗎?這種計算器怎麼開三次方,可以通過下面這個回答體會一下 電卓院亜紀良 如何用普通計算器計算出10的2 3次方?光講演算法不看實際操作,站著說話不...

二次項係數之和等於二的N次方怎麼算

CuKing 考慮組合意義,從n個元素的集合裡選取若干個元素,方案數是2 N 因為每個元素都是選或不選兩種狀態 從n個元素中選取i個元素,方案數根據二項式係數定義為 列舉i求和,等價於上乙個問題,所以得證。也可以直接用二項式定理 NeraSnow 是二項式係數之和吧?我們首先觀察 表示對於從這樣的集...

二次函式乙個區間內曲線的長度如何求?

第二貨 一 a到b平均切函式 二 求紅線長度 函式長度 所有紅線長度 所有有誤差的紅線長度 三 有誤差的紅線長度 導數 四 所有有誤差的紅線長度 五 切無數塊取極限消除誤差 六 發現這竟然變成定積分的原始公式.七 用正常公式替代原始公式 運用這個公式有乙個條件 切的無數塊函式,這個定義域內必須有導數...