Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在循环中运行fminsearch以实现像素到像素的优化_Matlab_Optimization - Fatal编程技术网

Matlab 在循环中运行fminsearch以实现像素到像素的优化

Matlab 在循环中运行fminsearch以实现像素到像素的优化,matlab,optimization,Matlab,Optimization,我想运行fminsearch函数来优化目标函数PARA。目标函数PARA为具有SxL像素的图像定义,并采用向量x(4x1)为每个像素返回标量。我可以对S=1和L=1使用fminsearch,但当S>1或L>1时,函数返回错误: Subscripted assignment dimension mismatch. Error in fminsearch (line 211) fv(:,1) = funfcn(x,varargin{:}); Error in fminsearch

我想运行fminsearch函数来优化目标函数PARA。目标函数PARA为具有SxL像素的图像定义,并采用向量x(4x1)为每个像素返回标量。我可以对S=1和L=1使用fminsearch,但当S>1或L>1时,函数返回错误:

 Subscripted assignment dimension mismatch.

  Error in fminsearch (line 211)
  fv(:,1) = funfcn(x,varargin{:});

   Error in fminsearch_ESM (line 11)
        [X(:,Si,Li),Fval(Si,Li)] = fminsearch(@ESM_PARA,[0;0;0;0]);`
下面列出了我用来循环优化每个像素的代码片段。如有任何建议,将不胜感激

 S=100;
 L=100;

 X = zeros(4,S,L);
 Fval = zeros(S,L);


 for Si=1:S
    for Li=1:L
       [X(:,Si,Li),Fval(Si,Li)] = fminsearch(@PARA,[0;0;0;0]);
    end
 end
目标函数段落如下所示

function f = PARA(x)
     S=100;
     L=100;
     size(A11) = (3,3,S,L);
     size(A22) = (3,3,S,L);
     size(A12) = (3,3,S,L);
     W=zeros(3,S,L);
     W(1,:,:) = cos(x(1));
     W(2,:,:) = sin(x(1))*cos(x(2))*exp(j*x(3));
     W(3,:,:) = sin(x(1))*sin(x(2))*exp(j*x(4));
     Xdd = zeros(S,L);
     Dxi = zeros(S,L);
     Dxj = zeros(S,L);

      for Si=1:S
             for Li=1:L
               Xdd(Si,Li)=conj(W(:,Si,Li).')*A12(:,:,Si,Li)*W(:,Si,Li);
               Dxi(Si,Li) = conj(W(:,Si,Li).')*A11(:,:,Si,Li)*W(:,Si,Li);
               Dxj(Si,Li) =  conj(W(:,Si,Li).')*A22(:,:,Si,Li)*W(:,Si,Li);
           end
     end
     Axf = sqrt(Dxi.*Dxj);
     f = abs(Xdd./Axf);
 end

您可以说
PARA
“使用向量x(4x1)为每个像素返回标量”。所以它返回一个向量来表示大于1x1的任何东西?在这种情况下,Fval(Si,Li)是一个标量,您正在分配解,一个向量。。。。不管怎样,我建议您解决循环外部感兴趣维度的fminsearch问题,并查看输出是什么样子,以确保它符合您的期望。谢谢您的建议!函数PARA是为SxL像素(S行和L列)定义的。因此,只要为每个像素提供向量X(4x1),该函数将返回每个像素的标量值。当我尝试对S=1和L=1以外的像素循环fminsearch时,问题就出现了。我想我在for循环中没有使用正确的fminsearch参数……您能告诉我们您的函数
PARA
中发生了什么吗?fminsearch需要一个标量输出,如果如上面的错误消息所示,赋值失败,则指向返回向量的函数。@实用主义者1请找到问题后面的函数PARA。请注意,多维矩阵A11,A22和A12从文件中导入,矩阵的大小包含在代码中只是为了提供信息。您可以说
PARA
“使用向量x(4x1)为每个像素返回标量”。所以它返回一个向量来表示大于1x1的任何东西?在这种情况下,Fval(Si,Li)是一个标量,您正在分配解,一个向量。。。。不管怎样,我建议您解决循环外部感兴趣维度的fminsearch问题,并查看输出是什么样子,以确保它符合您的期望。谢谢您的建议!函数PARA是为SxL像素(S行和L列)定义的。因此,只要为每个像素提供向量X(4x1),该函数将返回每个像素的标量值。当我尝试对S=1和L=1以外的像素循环fminsearch时,问题就出现了。我想我在for循环中没有使用正确的fminsearch参数……您能告诉我们您的函数
PARA
中发生了什么吗?fminsearch需要一个标量输出,如果如上面的错误消息所示,赋值失败,则指向返回向量的函数。@实用主义者1请找到问题后面的函数PARA。请注意,多维矩阵A11,A22和A12从文件中导入,矩阵的大小包含在代码中只是为了提供信息。