在Matlab中编写求和表达式

时间:2012-02-05 06:00:11

标签: matlab expression minimize

如何在Matlab代码中编写一个涉及变量求和的表达式,然后如何最小化表达式? 恩。我需要最小化以下功能

E = \ sum_ {i,j} [C_ {ij}(r_ {ij})+ C2_ {ij}(r_ {ij})^ 2]

我需要为i和j变化的r_ {ij}的任何值最小化上面的表达式。

我可以在MATLAB中使用fmincon()但是我无法正确编写表达式以将其作为fmincon()的输入。

感谢。

2 个答案:

答案 0 :(得分:1)

试试这个:

E = sum(sum( C.*r + C2.*r.^2 ));

其中CC2r是相同形状的矩阵。

答案 1 :(得分:1)

fmincon和其他优化函数不要求你把所有东西都写成表达式,它们也可以优化函数。

function E = criterion(r, C, C2)
  e  = C.*r + C2.*r.^2;
  E  = sum(e(:));

我不完全确定fmincon所需的语法,但我想它类似于E = f(theta),其中theta是您想要调整的参数向量,{{1}是最小的。由于我没有清楚地描述您的问题,我将假设您的参数为EC(如果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

你可以像其他情况一样构建一个匿名函数。