在Matlab中编写求和表达式



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

E=\sum_{i,j}[C_{ij}

对于r的任何值,我都需要最小化上面的表达式_{ij}s其中i和j不同。

我可以在MATLAB中使用fmincon(),但我无法适当地编写表达式,将其作为fmincon的输入。

谢谢。

试试这个:

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

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

fmincon和其他优化函数不需要将所有内容都写成表达式,它们也可以针对函数进行优化。

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

我不完全确定fmincon所需的语法,但我想它有点像E = f(theta),其中theta是一个参数向量,您需要调整它,使E最小。由于我没有发现你的问题被清楚地描述,我将假设你的参数是CC2(在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);

您可以构造一个与其他情况类似的匿名函数。

最新更新