定理描述
規規矩矩的定理就不再重複了,舉個栗子吧
單變量方程,求根
改寫爲等價形式
在大前提的條件下(即函數在區間[a,b]上連續)如果
其中 ,,
表達的意思就是
如果函數的割線斜率有最大值且最大值不超過1,則迭代序列會收斂於一個定點,收斂區間是[a,b]
初值對於牛頓迭代法的影響
同樣舉個栗子,求下列方程的根
第一次選初值
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
說明能找得到的最佳初值點= 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下山法
簡單說一下吧
在牛頓迭代公式的基礎上加一個迭代因子,即
目的
通過調整切線斜率將本不屬於收斂區間[a,b]的劃入之中
牛頓迭代法的優缺點
缺點
- 對函數的條件太苛刻,函數必須光滑
- 導數的計算未必方便
- 初始值必須儘量靠近最終解
優點
一旦滿足條件,牛頓迭代法的局部收斂還是很有吸引力的。而牛頓迭代法是按平方收斂的,粗略的說就是每迭代一次誤差平方一次,所以算就很方便。
另外離散Newton法這裏就不說,原理類似。