objective = total_sum; % 进行线性规划 options = optimoptions('linprog', 'Display', 'iter'); [x_opt, fval] = linprog(objective, A, b, Aeq, beq, lb, ub, options);function total_sum= fun(y) global p x yi1 yi2 yi3 zi1=double(y(:,1).*y(:,2)); zi2=double(y(:,1).*y(:,3)); zi3=double(y(:,1).*y(:,4)); total_sum=zeros(234,1); for i=1:234 f(i,1)=(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))) total_sum(i,1)=double(f); end total_sum=double(total_sum); end此时如何更改代码使total_sum既是f的列向量之和,又能够被objective引用,还能保持其为列向量和double形式
时间: 2023-10-02 18:06:14 浏览: 374
要让 `total_sum` 既是 `f` 的列向量之和,又能被 `objective` 引用,并保持其为列向量和 `double` 形式,你可以将 `total_sum` 的计算放在循环之外,使用 `sum` 函数计算 `f` 的总和,并将总和赋值给 `total_sum`。
修改后的代码如下:
```matlab
function total_sum = fun(y)
global p x yi1 yi2 yi3
zi1 = double(y(:,1) .* y(:,2));
zi2 = double(y(:,1) .* y(:,3));
zi3 = double(y(:,1) .* y(:,4));
f = zeros(234,1);
for i = 1:234
f(i,1) = 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
total_sum = sum(f); % 计算 f 的总和并赋值给 total_sum
end
```
现在,`total_sum` 是 `f` 的列向量之和,并且可以被 `objective` 引用。同时,`total_sum` 仍然保持列向量和 `double` 形式。
希望这次修改可以满足你的需求。如果还有其他问题,请随时提问。
阅读全文