Matlab 线性规划。为什么赢了';代码不起作用吗?
我想使用此函数查找最大值:Matlab 线性规划。为什么赢了';代码不起作用吗?,matlab,mathematical-optimization,Matlab,Mathematical Optimization,我想使用此函数查找最大值: Function f = myfun(a) a = {'a1';'a2';'a3';'a4'}; x = rand(4,5); S = -x.*a; SS = sum(S); [~,ix] = sort(SS); R = rand(1,5) SR = R(ix); f = sum(SR(1:10)); Aeq=ones(4,1); beq=1; a0=[.25 .25
Function f = myfun(a)
a = {'a1';'a2';'a3';'a4'};
x = rand(4,5);
S = -x.*a;
SS = sum(S);
[~,ix] = sort(SS);
R = rand(1,5)
SR = R(ix);
f = sum(SR(1:10));
Aeq=ones(4,1);
beq=1;
a0=[.25 .25 .25 .25]';
[a,f] = fmincon(@myfun,a0,[],[],Aeq,beq);
end
代码抛出一个错误:
错误:未定义类型为“cell”的输入参数的函数或方法“mtimes”
您知道原因吗?如图所示,您的函数无效。在“函数”中使用“F”而不是“F”将发出警告,但函数定义末尾出现“end”是一个语法错误。更正这些错误,然后在调试模式下运行该函数。你的下一个问题是
S = -x.*a;
在rhs(本例中为“a”)是单元格数组的情况下未定义,而您先前的声明对此进行了定义。同样非常奇怪的是,您期望(在第一行中)“a”是函数的参数,但在l2中,将其定义为包含4个字符串的单元格数组。如图所示,您的函数无效。在“函数”中使用“F”而不是“F”将发出警告,但函数定义末尾出现“end”是一个语法错误。更正这些错误,然后在调试模式下运行该函数。你的下一个问题是
S = -x.*a;
在rhs(本例中为“a”)是单元格数组的情况下未定义,而您先前的声明对此进行了定义。同样非常奇怪的是,您期望(在第一行中)“a”是函数的参数,但在l2中,将其定义为包含4个字符串的单元格数组。这在什么方面不起作用?例如,它要求我为“cell”类型的输入参数定义“a”error:Undefined函数或方法“mtimes”。这在什么方面不起作用?例如,它要求我为“cell”类型的输入参数定义“a”error:Undefined函数或方法“mtimes”。这很好地总结了问题,尽管他确实确定a是一个向量,该行仍将有维度错误,而不是单元格数组。要做(我认为)他希望它做的事情,应该是S=bsxfun(@times,-x,a)我如何定义“a”?S实际上是这样计算的:s1=-x(1,:)*a1;s2=-x(2,:)*a2…..s4=-x(4,:)*a4@user1205030:我担心您试图在能够走路之前跑。我建议您(a)将一系列命令写入Matlab命令窗口,直到它们执行您想要的操作,然后(b)阅读关于如何编写函数的开始文档,然后(c)将命令序列编辑到有效的函数定义中。@user1205030:在您看来非常困难的情况下祝您好运。@High Performance Mark功能。。。end'是有效的Matlab语法。请参阅:“您可以使用end语句终止任何类型的函数,但这不是必需的…”这很好地概括了这一点,尽管他确实确保a是向量,而不是单元格数组,但该行仍将存在维度错误。要做(我认为)他希望它做的事情,应该是S=bsxfun(@times,-x,a)我如何定义“a”?S实际上是这样计算的:s1=-x(1,:)*a1;s2=-x(2,:)*a2…..s4=-x(4,:)*a4@user1205030:我担心您试图在能够走路之前跑。我建议您(a)将一系列命令写入Matlab命令窗口,直到它们执行您想要的操作,然后(b)阅读关于如何编写函数的开始文档,然后(c)将命令序列编辑到有效的函数定义中。@user1205030:在您看来非常困难的情况下祝您好运。@High Performance Mark功能。。。end'是有效的Matlab语法。请参阅:“您可以使用end语句终止任何类型的函数,但不需要这样做…”