Matlab 在循环中运行fminsearch以实现像素到像素的优化
我想运行fminsearch函数来优化目标函数PARA。目标函数PARA为具有SxL像素的图像定义,并采用向量x(4x1)为每个像素返回标量。我可以对S=1和L=1使用fminsearch,但当S>1或L>1时,函数返回错误: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
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从文件中导入,矩阵的大小包含在代码中只是为了提供信息。