如何在Matlab代码中编写一个涉及变量求和的表达式,然后如何最小化表达式? 恩。我需要最小化以下功能
E = \ sum_ {i,j} [C_ {ij}(r_ {ij})+ C2_ {ij}(r_ {ij})^ 2]
我需要为i和j变化的r_ {ij}的任何值最小化上面的表达式。
我可以在MATLAB中使用fmincon()但是我无法正确编写表达式以将其作为fmincon()的输入。
感谢。
答案 0 :(得分:1)
试试这个:
E = sum(sum( C.*r + C2.*r.^2 ));
其中C
,C2
和r
是相同形状的矩阵。
答案 1 :(得分:1)
fmincon
和其他优化函数不要求你把所有东西都写成表达式,它们也可以优化函数。
function E = criterion(r, C, C2)
e = C.*r + C2.*r.^2;
E = sum(e(:));
我不完全确定fmincon
所需的语法,但我想它类似于E = f(theta)
,其中theta
是您想要调整的参数向量,{{1}是最小的。由于我没有清楚地描述您的问题,我将假设您的参数为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);
将在当前工作空间中的变量@(theta)(criterionRolledC(theta,rValues))
包含rValues
值时执行。
如果您想要完全相反的情况,即您的参数为r
,则更简单:
r
你可以像其他情况一样构建一个匿名函数。