用Matlab编写求和表达式

用Matlab编写求和表达式,matlab,expression,minimize,Matlab,Expression,Minimize,如何在Matlab代码中编写包含变量求和的表达式,然后如何最小化表达式? 我需要最小化以下函数 E=\sum{i,j}[C{ij}(r{ij})+C2{ij}(r{ij})^2] 对于I和j变化的r{ij}s的任何值,我需要最小化上述表达式 我可以在MATLAB中使用fmincon(),但我无法适当地编写表达式,将其作为fmincon()的输入 谢谢。试试这个: E = sum(sum( C.*r + C2.*r.^2 )); 其中C,C2和r是相同形状的矩阵 fmincon和其他优化函数不需

如何在Matlab代码中编写包含变量求和的表达式,然后如何最小化表达式? 我需要最小化以下函数

E=\sum{i,j}[C{ij}(r{ij})+C2{ij}(r{ij})^2]

对于I和j变化的r{ij}s的任何值,我需要最小化上述表达式

我可以在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
是一个需要调整的参数向量,以便
E
最小。由于我没有发现您的问题描述得很清楚,我将假设您的参数是
C
C2
(如果
r
是您的参数,则情况类似且更简单)

由于
fmincon
使用一个向量来存储系数,我们需要一个函数来获取这样一个向量,并将其转换为上述
标准
函数所需的大小

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
,则更简单:

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);
您可以构造一个匿名函数,类似于另一种情况