📄 example3_13.m
字号:
function [x,act]=rls(A,b,x0,r);
% set defaults
if nargin<3, fac=1000;x0=zeros(size(A,2),1);
elseif nargin<3, fac=x0;x0=zeros(size(A,2),1);
else b=b-A*x0;
end;
x=x0;
aa=diag(A'*A);
% 处理零列
ind=find(aa>0);
n=length(ind);
if n==0, act=1; return; end;
A=A(:,ind);
gamma=b'*b;
if gamma==0, act=1; return; end;
if nargin<3, r=fac*sqrt(gamma./aa(ind));
else r=r(ind);
end;
% 最小化 ||Az-b||^2 s.t. |z|<=r
prt=0;
[z,fct,ier]=minq(0,-A'*b,A'*A,-r,r,prt);
act=max(abs(z)./r);
x(ind)=x(ind)+z;
%测试程序rlstest.m
n=20;
m=n+5;
sig=1e-7;
A=rand(m,n);
A(:,3)=A(:,n-5)+A(:,n-2)+sig*randn(m,1);
A(6,:)=A(7,:)+A(5,:)+sig*randn(1,n);
x0=randn(n,1);
b=A*x0+1e-2*randn(m,1);
% b=randn(m,1);
tic;x=A\b;res1=norm(b-A*x);,tim1=toc
tic;
[xx,act]=rls(A,b);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -