使用牛頓迭代法求解非線性方程的根

牛頓法是一種近似求解非線性方程根的迭代算法。本文簡要敘述該算法并使用MATLAB實(shí)現(xiàn)該算法求解一元非線性方程和多元非線性方程組。

算法簡述

一般非線性方程組的根通常無法直接求解,因此需要使用如牛頓法一類的迭代算法求近似解(數(shù)值解)。一維牛頓迭代法求解形如 f(x) =0 的根,算法如下:

  • 選取一個(gè)接近函數(shù)零點(diǎn)的自變量 x 值作為起始點(diǎn)
  • 使用如下的迭代公式更新近似解
  • 如果得出的解滿足誤差要求,終止迭代,所得的值即視為方根根的近似解

一維牛頓法實(shí)例

使用牛頓迭代法近似求解如下方程在 [-1, 1]之間的根:

我們可以使用匿名函數(shù) (anonymous function)來定義函數(shù)及其導(dǎo)數(shù):

f = @(x) cos(x) - x.^3; %定義函數(shù)f(x)
f_prime = @(x) - sin(x) - 3*x.^2; %定義函數(shù)的導(dǎo)數(shù)

這里我們可以使用 while 循環(huán)來實(shí)現(xiàn),終止條件設(shè)為相對誤差小于1e-8。

% Copyright Zhiwei Peng, all rights reserved.
clear, close all 
clc
f = @(x) cos(x) -x.^3;
f_prime = @(x) -sin(x) -3*x.^2;

error = 1;    %初始化誤差變量
iter = 0;     %初始化迭代次數(shù)變量 
max_iter = 5000; %定義最大允許迭代次數(shù)
tol = 1e-8; %定義循環(huán)終止誤差
x0 = 0.5; %初始值

while error > tol && iter <= max_iter
    x = x0 - f(x0)/f_prime(x0); %更新x的值
    error = abs((x-x0)/x0);  %計(jì)算相對誤差
    iter = iter +1;  %更新迭代次數(shù)
    x0 = x; %計(jì)算出的x賦值給x0,繼續(xù)迭代,直到達(dá)到誤差條件。
end

一般情況下,牛頓迭代法收斂很快 (quadratic convergence),對于本例中的函數(shù),幾次迭代即可得到近似解。

>> x
x =
   0.865474033101614
>> iter
iter =
     6
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 機(jī)器學(xué)習(xí)是做NLP和計(jì)算機(jī)視覺這類應(yīng)用算法的基礎(chǔ),雖然現(xiàn)在深度學(xué)習(xí)模型大行其道,但是懂一些傳統(tǒng)算法的原理和它們之間...
    在河之簡閱讀 20,899評論 4 65
  • AI人工智能時(shí)代,機(jī)器學(xué)習(xí),深度學(xué)習(xí)作為其核心,本文主要介紹機(jī)器學(xué)習(xí)的基礎(chǔ)算法,以詳細(xì)線介紹 線性回歸算法 及其 ...
    erixhao閱讀 14,195評論 0 36
  • 今天我們要介紹一種收斂速度更快的算法:Newton Method(或者叫 Newton’s Method)??赡艽?..
    GarfieldEr007閱讀 7,379評論 0 4
  • 今天看了幾篇文章,都寫的很好,我知道自己應(yīng)該是屬于三分鐘熱度的人,那么我需要有個(gè)帶動(dòng)和鼓勵(lì)自己的地方?,F(xiàn)在...
    殤_書ER閱讀 251評論 0 0
  • eclipse中對Android代碼進(jìn)行混淆操作步驟如下: 首先將project.properties中打開(去掉...
    ccbuluo閱讀 2,049評論 0 1

友情鏈接更多精彩內(nèi)容