objective = @(y) double(fun(y)); % 进行线性规划 options = optimoptions('linprog', 'Display', 'iter'); [x_opt, fval] = linprog(objective, A, b, Aeq, beq, lb, ub, options);function f=fun(y) global p x yi1 yi2 yi3 y=double(reshape(y,234,4)); zi1=double(y(:,1).*y(:,2)); zi2=double(y(:,1).*y(:,3)); zi3=double(y(:,1).*y(:,4)); f=double(0); for i=1:234 f=f+(2*p(i,1).*(1-x(i,1)).*y(i,1)+p(i,1).*yi3(i,1).*(y(i,2)-zi1(i,1))+p(i,1).*zi1(i,1).*(1-yi1(i,1))+p(i,1).*zi1(i,1).*(1-yi2(i,1))+p(i,1).*zi1(i,1).*(1-yi3(i,1))) end f=double(f); end出现LINPROG requires the following inputs to be of data type double: 'f'. 出错 jixuner (第 183 行) [x_opt, fval] = linprog(objective, A, b, Aeq, beq, lb, ub, options);的报错。此时可能是哪些地方出问题,该如何解决
时间: 2023-10-02 12:06:14 浏览: 91
第一章 线性规划_matlab_数值计算_线性规划linprog_
5星 · 资源好评率100%
根据报错信息,可以看出问题出在将 `objective` 作为参数传递给 `linprog` 函数时。报错指出 `objective` 需要是数据类型为 double 的输入。
根据你提供的代码,`fun(y)` 函数返回的是一个函数句柄 `f`,而不是直接的数值。因此,在将 `objective` 作为参数传递给 `linprog` 之前,你需要调用 `fun(y)` 函数来获取具体的数值。
你可以尝试修改代码如下:
```matlab
objective = fun(y); % 调用 fun(y) 获取数值
% 进行线性规划
options = optimoptions('linprog', 'Display', 'iter');
[x_opt, fval] = linprog(objective, A, b, Aeq, beq, lb, ub, options);
```
这样应该能够解决报错问题。如果还有其他问题,请随时提问。
阅读全文