關於牛頓迭代法的初值以及收斂性的理解

定理描述

規規矩矩的定理就不再重複了,舉個栗子吧
f(x)=0f(x) = 0
單變量方程,求根
改寫爲等價形式
ϕ(x)=x\phi(x) = x
在大前提ϕC[a,b]\phi\in C[a,b]的條件下(即函數在區間[a,b]上連續)如果
ϕ(x)ϕ(y)Lxy |\phi(x) - \phi(y)|\leq L|x - y|
其中x,y[a,b]\forall x,y \in [a,b]L(0,1)L\in(0,1),aϕ(x)ba\leq \phi(x) \leq b
表達的意思就是
如果函數ϕ\phi的割線斜率有最大值且最大值不超過1,則迭代序列{xk}\{x_k\}會收斂於一個定點xx^*,收斂區間是[a,b]

初值對於牛頓迭代法的影響

同樣舉個栗子,求下列方程的根
x3x1=0x^3 - x -1=0
第一次選初值x0=0.6x_0 = 0.6

x = zeros(1,10);
x(1) = 0.6;
k = 1;
while abs(x(k)^3-x(k)-1) > eps
    x(k+1) = x(k)-(x(k)^3-x(k)-1)/(3*x(k)^2-1);
    k = k + 1;
end
format long;
disp(x(k));

迭代情況如圖

迭代情況如圖
共迭代九次
not bad
可以更快一點???
下面尋找更快的初值條件
代碼如下

function X = sroot(x,epsilon)
% 初值條件一
%y(k)*y(k-1)<= 0
% 初值條件二
%拐點附近,且拐點的函數值在允許的誤差範圍內。
%切記所允許的誤差的大小很關鍵。如果誤差太小,
%則迭代可能一直執行下去一般選$\10^-M$大100倍,其中M是計算機浮點數的小數位數。
Y = f(x);
yrange = max(Y) - min(Y);
epsilon2 = yrange*epsilon;
n = length(x);
Y(n+1) = Y(n);
x(n+1) = x(n);
m = 0;
for k = 2:n
    if Y(k)*Y(k-1) < 0
        m = m + 1;
        X(m) = 0.5*(x(k)+x(k-1));
    end
    if ((Y(k)-Y(k-1))*(Y(k+1)-Y(k))<= 0)...
                &&(abs(Y(k))<epsilon2)
        m = m + 1;
        X(m) = x(k);
    end
end

執行情況

x = -2:0.001:2;
sroot(x,0.00001)

ans =

1.324500000000000
說明能找得到的最佳初值點x0x_0= 1.324500000000000

再用牛頓迭代法執行一次

x = zeros(1,10);
x(1) = 1.3245;
k = 1;
while abs(x(k)^3-x(k)-1) > eps
    x(k+1) = x(k)-(x(k)^3-x(k)-1)/(3*x(k)^2-1);
    k = k + 1;
end
format long;
disp(x(k));

k

k =

 4

x

x =

1 至 7 列

1.324500000000000 1.324718001527481 1.324717957244748 1.324717957244746 0 0 0

8 至 10 列

0 0 0

這次迭代次數縮短一半

Newton下山法

簡單說一下吧
在牛頓迭代公式的基礎上加一個迭代因子λk\lambda_k,即
xk+1=xkf(xk)λkf(xk) x_{k+1}=x_k - \frac{f(x_k)}{\lambda_k f(x_k)}
目的
通過調整切線斜率將本不屬於收斂區間[a,b]的xk+1x_{k+1}劃入之中

牛頓迭代法的優缺點

缺點

  • 對函數的條件太苛刻,函數f(x)f(x)必須光滑
  • 導數的計算未必方便
  • 初始值必須儘量靠近最終解

優點
一旦滿足條件,牛頓迭代法的局部收斂還是很有吸引力的。而牛頓迭代法是按平方收斂的,粗略的說就是每迭代一次誤差平方一次,所以算2\sqrt{2}就很方便。

另外離散Newton法這裏就不說,原理類似。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章