牛頓法是一種近似求解非線性方程根的迭代算法。本文簡要敘述該算法并使用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