我正在努力解决
argmin||W_vector*FT^-1(Ax)-W_vector*B||
使用带有函数句柄的lsqr并且没有任何初始猜测(W_vector是加权向量)。我认为lsqr将使用向量b = W_vector执行第一步计算x由C'b(调用C = W * FT ^ -1(A))。* B我传递给函数。这是代码:
b=W_vector.*B;
[x, flag]=lsqr(@(x1,modo)FUNC(x1,W_vector,A,modo),b,tol,maxit);
function [result, modo]=FUNC(x1,W_vector,A,modo)
%Computes y=A*x for modo='notransp'
%Computes y=A'*x for modo='transp'
switch modo
case 'notransp'
res=A*x1;
R1=reshape(res,norient,dim(1)*dim(2)*dim(3));
for co=1:norient
R2(:,:,:,co)=reshape(R1(co,:),dim(1),dim(2),dim(3));
FR(:,:,:,co)=ifftn(R2(:,:,:,co));
aux=FR(:,:,:,co);
R3(co,:)=aux(:).';
end
result=W_vector.*R3(:);
case 'transp'
R1=reshape(x1./(W_vector+eps),norient,dim(1)*dim(2)*dim(3));
for co=1:norient
R2(:,:,:,co)=reshape(R1(co,:),dim(1),dim(2),dim(3));
FR(:,:,:,co)=fftn(R2(:,:,:,co));
aux=FR(:,:,:,co);
R3(co,:)=aux(:).';
end
result=A'*R3(:);
end
end
当我在第一次迭代中检查R1=reshape(x1./(W_vector+eps),norient,dim(1)*dim(2)*dim(3));
'transp'
的结果时,我发现x1不等于b(重塑后,它们是图像,所以我可以看到那个样子在质量上相同但具有非常不同的值)。我想了解lsqr是如何工作的,因为我在加权方面遇到了一些问题。谢谢你的帮助。