如何在Matlab代码中编写涉及变量求和的表达式,然后如何最小化表达式? ex。我需要最小化以下函数在Matlab中编写求和表达式
E = \ sum_ {I,J} [C_ {IJ}(R_ {IJ})+ C2_ {IJ}(R_ {IJ})^ 2]
我需要将上述表达式最小化为r_ {ij} s中i和j变化的任何值。
我可以在MATLAB中使用fmincon(),但我无法适当地编写我的表达式以将其作为fmincon()的输入。
谢谢。
如何在Matlab代码中编写涉及变量求和的表达式,然后如何最小化表达式? ex。我需要最小化以下函数在Matlab中编写求和表达式
E = \ sum_ {I,J} [C_ {IJ}(R_ {IJ})+ C2_ {IJ}(R_ {IJ})^ 2]
我需要将上述表达式最小化为r_ {ij} s中i和j变化的任何值。
我可以在MATLAB中使用fmincon(),但我无法适当地编写我的表达式以将其作为fmincon()的输入。
谢谢。
尝试这种情况:
E = sum(sum(C.*r + C2.*r.^2));
其中C
,C2
和r
具有相同的形状的矩阵。
fmincon
和其他优化功能不要求您将所有内容写入表达式,它们也可以针对函数进行优化。
function E = criterion(r, C, C2)
e = C.*r + C2.*r.^2;
E = sum(e(:));
我不能完全肯定由fmincon
所需的语法,但我想这有点像E = f(theta)
,其中theta
是你要调整,使得E
是最小的一个参数向量。由于我没有明确描述你的问题,因此我会假设你的参数是C
和C2
(在r
是你的参数的情况下,情况类似且更简单)。
由于fmincon
使用一个向量来存储这些系数,我们需要一个函数来取得这样一个向量并将它转换成上面函数criterion
所需的大小。
function E = criterionRolledC(theta,r)
assert(numel(theta)==2*numel(r), 'The size of theta has to be twice the size of r');
[M N] = size(r);
C = theta(1:M*N);
C2 = theta(M*N+1:end);
C = reshape(C , M, N);
C2 = reshape(C2, M, N);
E = criterion(r,C,C2);
这样一来,就可以使一个匿名函数,很容易符合优化的界面:在当前工作空间的变量rValues
包含您r
值@(theta)(criterionRolledC(theta,rValues))
会做。
如果你想完全相反,即你的参数是r
,这是简单的:
function E = criterionRolledR(theta,C,C2)
assert(numel(theta)==numel(C), 'The size of theta has to be the same size as C');
assert(all(size(C)==size(C2)), 'C and C2 need to have the same size');
[M N] = size(C);
r = reshape(theta, M, N);
E = criterion(r,C,C2);
而且你同样可以构造一个匿名函数其他情况。