Lsqr第一次迭代没有初始猜测

时间:2016-02-26 10:08:34

标签: matlab least-squares

我正在努力解决

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是如何工作的,因为我在加权方面遇到了一些问题。谢谢你的帮助。

0 个答案:

没有答案