Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 线性规划。为什么赢了';代码不起作用吗?_Matlab_Mathematical Optimization - Fatal编程技术网

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语句终止任何类型的函数,但不需要这样做…”