fmincon提示要返回标量,以及公式不知道哪里出错了。

fmincon提示要返回标量,以及公式不知道哪里出错了。卡了一天了,麻烦大家看看哪里出错了

img

img

img

根据你提供的代码,有几个问题需要注意。

首先,你在定义 xeA 的时候使用了变量 e,但是没有给出 e 的值。请确保在使用这些变量之前为它们赋值。

其次,你在定义 b 的时候使用了 5e,我假设你想表示 5 × 10^e 的形式,但是 e 的值也没有给出。请确认并提供正确的值。

另外,你在定义 lb 的时候使用了 l,我不确定这是否是你想使用的变量,因为你并没有给出它的定义。请确认并提供正确的值。

最后,你调用 fmincon 函数时,第一个参数是字符串 'fun1 ',它后面可能有一个额外的空格字符。请删除该空格字符以避免引起错误。

在你提供的约束函数 'mycon' 的代码中,我注意到了一些错误。

首先,在计算 ceq 的时候,你使用了 × 符号,但是应该使用乘号 *。请将 × 修改为 *

其次,在计算 ceq 时,你使用了 x(3) * (×(1) + x * ×(2) - 50),但是在这个表达式中,x 似乎是一个向量而不是单独的元素。请修改 ceq 的计算方式,确保它返回一个标量值。

最后,请确保你提供的约束函数返回两个向量 cceq,即使它们为空也需要返回空向量。你可以使用 c = [] 来表示空向量。

下面是修正后的 'mycon' 函数的代码:

function [c, ceq] = mycon(x)
    c = [];
    ceq = x(3) * (x(1) + x(2) - 50);
end

请将以上修正后的代码替换你原来的 'mycon' 函数的代码,并重新运行你的程序。

如果还有其他问题或错误,请提供完整的代码和错误信息,我将尽力帮助你解决。

80*x那里是不是应该是80*x(3),你写错了,因为传递到fun1里面的x是一个1×3的向量,直接80*x返回的也是向量,如果是80*x(3)的话就是返回标量了。码字不易,有用希望采纳