用Matlab编写求和表达式
如何在Matlab代码中编写包含变量求和的表达式,然后如何最小化表达式? 我需要最小化以下函数 E=\sum{i,j}[C{ij}(r{ij})+C2{ij}(r{ij})^2] 对于I和j变化的r{ij}s的任何值,我需要最小化上述表达式 我可以在MATLAB中使用fmincon(),但我无法适当地编写表达式,将其作为fmincon()的输入 谢谢。试试这个:用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和其他优化函数不需
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);
您可以构造一个匿名函数,类似于另一种情况