最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

MATLAB程序設(shè)計(jì)——牛頓法求解非線性方程

2022-04-30 16:20 作者:鳴鳳在竹-白駒食場  | 我要投稿

1 牛頓迭代法

牛頓迭代法實(shí)質(zhì)上是一種線性化方法,其基本思想是將非線性方程f(x)%3D0逐步歸結(jié)為某種線性方程來求解。

1.1 牛頓法

牛頓迭代法又稱切線法,是一種有特色的求根方法。用牛頓迭代法求f(x)%3D0的單根x%5E%7B*%7D的主要步驟:

(1)Newton法的迭代公式

x_%7Bk%2B1%7D%3D%20x_%7Bk%7D-%5Cfrac%7Bf(x_%7Bk%7D)%7D%7Bf'(x_%7Bk%7D)%20%7D%20%EF%BC%8Ck%3D0%2C1%2C2%2C...

(2)以x%5E%7B*%7D附近的某一個(gè)值x_0為迭代初值,代入迭代公式,反復(fù)迭代,得到序列x_1%2C%20x_2%2C%20x_3%2C...

(3)若序列收斂,則必收斂于精確根x%5E%7B*%7D,即%5Clim_%7Bk%5Cto%5Cinfty%20%7D%20x_k%20%3Dx%5E*。

牛頓法有顯然的幾何意義,方程f(x)%3D0的根x%5E%7B*%7D可解釋為曲線與軸交點(diǎn)的橫坐標(biāo)。設(shè)x_k是根x%5E%7B*%7D的某個(gè)近似值,過曲線y%3Df(x)上橫坐標(biāo)為x_k的點(diǎn)P_k(x_k%2C%20y_k)引切線,并將該切線與x軸交點(diǎn)的橫坐標(biāo)x_%7Bk%2B1%7D作為x%5E%7B*%7D的新的近似值。

牛頓法初值的選擇:若f(x)%5Ba%2Cb%5D上連續(xù),存在2階導(dǎo)數(shù),且滿足下列條件:

(1)f(a)f(b)%3C0;

(2)f'(x)(a%2Cb)內(nèi)不變號(hào),且f'(x)%5Cneq%200

(3)f''(x)(a%2Cb)內(nèi)不變號(hào),且f''(x)%5Cneq%200;

(4)%5Cfrac%7B%5Cvert%20f(a)%20%5Cvert%20%7D%7B%5Cvert%20f'(a)%20%5Cvert%20%7D%20%5Cleq%20b-a,且?%5Cfrac%7B%5Cvert%20f(b)%20%5Cvert%20%7D%7B%5Cvert%20f'(b)%20%5Cvert%20%7D%20%5Cleq%20b-a;

則對任意的初值x_0%5Cin%20%5Ba%2Cb%5D,牛頓迭代序列收斂于f(x)%3D0%5Ba%2Cb%5D內(nèi)的唯一根。

牛頓的優(yōu)缺點(diǎn):牛頓法是目前求解非線性方程(組)的主要方法,至少二階局部收斂,收斂速度較快,特別是當(dāng)?shù)踔党浞挚拷_解時(shí)。對重根收斂速度較慢(線性收斂),對初值的選取很敏感,要求初值相當(dāng)接近真解,需要求導(dǎo)數(shù)。

圖1 牛頓法迭代收斂過程的幾何意義


1.2 哈利牛頓法

哈利法(Halley)可用于加速牛頓法收斂,哈利迭代公式:

x_%7Bk%2B1%7D%3D%20x_%7Bk%7D-%5Cfrac%7Bf(x_%7Bk%7D)%7D%7Bf'(x_%7Bk%7D)%20%7D%20%5Cleft(1-%5Cfrac%7Bf(x_k)f''(x_k)%7D%7B2(f'(x_k))%5E2%7D%20%5Cright)%5E%7B-1%7D%EF%BC%8Ck%3D0%2C1%2C2%2C...

哈利法在單根情況下可達(dá)到三階收斂。

1.3 簡化牛頓法

將牛頓法的迭代公式改為

x_%7Bk%2B1%7D%3Dx_k-%5Clambda%20f(x_k)%EF%BC%8Ck%3D0%2C1%2C2%2C...

為保證收斂,系數(shù)%5Clambda%20只需滿足0%3C%5Clambda%20%3C%5Cfrac%7B2%7D%7Bf'(x_k)%7D%20即可。如果%5Clambda%20取常數(shù)%5Cfrac%7B1%7D%7Bf'(x_0)%7D%20,則稱為簡化牛頓法,也稱平行弦法。

簡化牛頓法線性收斂。

1.4 牛頓下山法

牛頓法的收斂性依賴初值x_0的選取,如果x_0偏離所求根x%5E*較遠(yuǎn),則牛頓法可能發(fā)散。牛頓下山法,引入下山因子%5Clambda%20,保證函數(shù)值穩(wěn)定下降的同時(shí),加速收斂速度。

牛頓下山法公式:

x_%7Bk%2B1%7D%3D%20x_%7Bk%7D-%5Clambda%20%5Cfrac%7Bf(x_%7Bk%7D)%7D%7Bf'(x_%7Bk%7D)%20%7D%20%EF%BC%8Ck%3D0%2C1%2C2%2C...

下山因子的取法:從%5Clambda%20%3D1開始,逐次減半,即%5Clambda%20%3D1%2C%5Cfrac%7B1%7D%7B2%7D%20%2C%5Cfrac%7B1%7D%7B2%5E2%7D%20%2C%5Cfrac%7B1%7D%7B2%5E3%7D%20%2C...,直到滿足下降條件。

1.5 重根情形

當(dāng)x%5E*f(x)%3D0m(m%3E0)重根時(shí),則f(x)可表為f(x)%3D(x-x%5E*)%5Emg(x),其中g(x%5E*)%5Cneq%200,此時(shí)用牛頓迭代法求x%5E*仍然收斂,只是收斂速度將大大減慢,牛頓法求方程的重根時(shí)僅為線性收斂。

將求重根問題化為求單根問題進(jìn)行牛頓法求解。對f(x)%3D(x-x%5E*)%5Emg(x),令函數(shù)

%5Cmu%20(x)%3D%5Cfrac%7Bf(x)%7D%7Bf'(x)%7D%3D%5Cfrac%7B(x-x%5E*)g(x)%7D%7Bmg(x)%2B(x-x%5E*)g'(x)%7D%20%20

則化為求%5Cmu%20(x)%3D0的單根x%5E*的問題,對它用牛頓法是二階收斂的。其迭代函數(shù)為

%5Cvarphi%20(x)%3Dx-%5Cfrac%7B%5Cmu(x)%20%7D%7B%5Cmu'(x)%7D%20%3Dx-%5Cfrac%7Bf(x)f'(x)%7D%7B%5Bf'(x)%5D%5E2-f(x)f''(x)%7D%20

從而構(gòu)造出迭代方法

x_%7Bk%2B1%7D%3Dx_k-%5Cfrac%7Bf(x_k)f'(x_k)%7D%7B%5Bf'(x_k)%5D%5E2-f(x_k)f''(x_k)%7D%EF%BC%8C%20k%3D0%2C1%2C2%2C...

2 牛頓迭代法MATLAB算法實(shí)現(xiàn)

算法說明:

(1)輸入?yún)?shù)的判定和必要的處理,包括可變參數(shù)的處理,若某個(gè)可變參數(shù)不輸入,則采用默認(rèn)值。

(2)由于牛頓法需要計(jì)算方程的一階導(dǎo)數(shù)和二階導(dǎo)數(shù)(重根情形),故方程的定義采用符號(hào)定義(避免手工計(jì)算方程的導(dǎo)數(shù)所帶來的計(jì)算量),在算法solve_diff_fun(equ)中實(shí)現(xiàn)符號(hào)函數(shù)的一階導(dǎo)數(shù)和二階導(dǎo)數(shù)的計(jì)算,并轉(zhuǎn)換為匿名函數(shù)進(jìn)行數(shù)值運(yùn)算。

(3)根據(jù)參數(shù)method選擇執(zhí)行不同的牛頓迭代方法,具體:

? ? 1)“newton”為牛頓法newton();

? ? 2)“simplify”為簡化的牛頓法simplify_newton();

? ? 3)“halley”為哈利法(牛頓加速法)newton_halley();

? ? 4)“downhill”為牛頓下山法newton_downhill(),下山法包括了下山因子的存儲(chǔ);

? ? 5)“multi”為重根情形newton_multi_root()。

(4)根據(jù)參數(shù)display選擇是否顯示迭代過程信息或僅顯示結(jié)果信息。

(5)可變輸出參數(shù)的判定和必要處理。

思考:MATLAB中沒有類似于Python的list結(jié)構(gòu),如何在未知迭代次數(shù)的情況下,預(yù)分配內(nèi)存,存儲(chǔ)迭代過程變量信息?

3?牛頓迭代法案例測試

例1:求非線性方程在x%5Cin%20%5B-3.5%2C%205%5D區(qū)間的近似根

f(x)%3D2e%5E%7B-x%7Dsinx%2B2cosx-0.25%3D0

可視化函數(shù)圖像:

圖2 非線性方程圖像


從圖中可以看出,在區(qū)間內(nèi)存在四個(gè)根,此處僅求在x_0%3D0附近的根,其他根求解自行設(shè)計(jì)。

驗(yàn)證輸入?yún)?shù):

驗(yàn)證輸出參數(shù),僅有一個(gè)輸出參數(shù),則為結(jié)構(gòu)體,且輸出迭代過程:

驗(yàn)證輸出參數(shù),有三個(gè)輸出參數(shù),分別為近似解、方程在近似解處的誤差精度和退出標(biāo)記,1表示收斂到滿足精度要求的近似解,且輸出最終迭代結(jié)果:

例2:求帶有重根的非線性方程在x_0%3D0.9附近的近似解

f(x)%3D(x-1)*(sin(x-1)%2B3x)-x%5E3%2B1%3D0

由于簡化的牛頓法收斂速度較慢,此處不再可視化簡化的牛頓法。

可視化各牛頓法的誤差精度下降曲線如圖3,可見在存在重根情形下,采用牛頓重根公式,收斂速度極快,其次為牛頓哈利法。由于此處未用到下山因子,故牛頓法和牛頓下山法求解過程一致。

圖3 帶有重根的牛頓法各迭代方法的精度誤差曲線

各方法迭代過程

例3:求非線性方程在x_0%3D1附近的近似解:

f(x)%3D2e%5E%7B-x%7Dsinx%3D0

圖4 各牛頓迭代法求解非線性方程誤差精度下降曲線

其中下山法由于在第二次迭代時(shí)引入了下山因子0.25,故其下降曲線相對于牛頓法而言,保持了下降收斂的性質(zhì)。


MATLAB程序設(shè)計(jì)——牛頓法求解非線性方程的評論 (共 條)

分享到微博請遵守國家法律
姜堰市| 浠水县| 库伦旗| 翼城县| 清原| 皮山县| 玉溪市| 沽源县| 昭苏县| 淳化县| 右玉县| 麻城市| 定日县| 涪陵区| 法库县| 福鼎市| 新建县| 周至县| 台北市| 晋城| 安塞县| 墨江| 南涧| 资溪县| 浮山县| 绥江县| 华坪县| 上犹县| 廉江市| 南充市| 仙桃市| 郎溪县| 开原市| 高雄市| 梨树县| 楚雄市| 遂平县| 天津市| 海口市| 南投县| 溧阳市|