作者beareyes (熊眼)
看板MATLAB
标题[讨论] 为什麽我的Newton's method有时不收敛?
时间Thu Sep 13 14:45:04 2012
我想解Stephen Boyd书中的一个example
http://a.imageshack.us/img42/7095/59027129.jpg

根据书中描述 A, c, b都是随机产生
u和v的初始值则皆为0
我使用infeasible start Newton's mthod去解这个问题
结果发生有时候residual norm收敛在很大的值0.02左右 (书上说是10^-14)
甚至有时候stepsize都收到0了,residual norm还没减少!
想麻烦大家帮我看看
是我对method理解有错
还是code有错呢?
谢谢大家
------------------------------------------------------------------------------
clear all;
clc;
alpha = 0.01; % parameter used to do <<<< backtracking line search >>>>
beta = 0.5; % change of stepsize in the <<<< backtracking line search
>>>>
epsilon = 10^(-6); % a very small positive value
t = 1; % gap decreasing scalar
I = eye(100);
A = rand(100,100);
b = rand(100,1);
c = rand(100,1);
u = zeros(100,1);
v = zeros(100,1);
new_r = epsilon; % initial condition to go into while loop
for iter = 1:8 % iteration number
%% Derivative Equations to find residual
D_u = A*v + b + 2*u/(1-u'*u)/log(10); % gradient of f to u
D_v = A'*u + c - 2*v/(1-v'*v)/log(10); % gradient of f to v
D_u_v = A; % gradient of f to u and v
D_v_u = A'; % gradient of f to v and u
D_u_u = (2/(1-u'*u)*I + 4*u*u'/(1-u'*u)^2)/log(10); % gradient of f
to u and u
D_v_v = (2/(1-v'*v)*I - 4*v*v'/(1-v'*v)^2)/log(10); % gradient of f
to v and v
r = [D_u
D_v]; % residual
gradient_r = [D_u_u, D_u_v; D_v_u, D_v_v];
difference = -inv(gradient_r)*r; % search direction
%% backtracking line search
standard = 1;
s = 1;
while ( standard>=0 )
new_u = u + s*difference(1:100); % u的下一个state
new_v = v + s*difference(101:200); % v的下一个state
D_new_u = A*new_v + b + 2*new_u/(1-new_u'*new_u)/log(10);
D_new_v = A'*new_u + c - 2*new_v/(1-new_v'*new_v)/log(10);
new_r = [D_new_u
D_new_v];
standard = norm(new_r) - (1-alpha*s)*norm(r);
s = beta*s;
end
u = new_u;
v = new_v;
end
norm_new_r = norm(new_r)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.15.49
※ 编辑: beareyes 来自: 140.114.15.49 (09/13 14:45)