Matlab [x,y]=fmincon('fun1',zeros(9,1),[],[],[],[],zeros(9,1),[],'fun2' ); function f=fun1(x); data=xlsread('file.xlsx'); f = data(1:9,8)' * x(1:9); end function [g,h]=fun2(x); data=xlsread('file.xlsx'); an=(100-data(1:9,6)).*x(1:9)./100; fe= data(1:9,1)' * an(1:9); v2= data(1:9,5)' * an(1:9); ca= data(1:9,3)' * an(1:9); si= data(1:9,2)' * an(1:9); ti= data(1:9,4)' * an(1:9); ccl= ((100 - data(1:9,7)') * an(1:9)) / 100; g=[50.5-(fe)/(ccl); 0.32-(v2)/(ccl); (ca)/(si)-1.8; 1.8-(ca)/(si); (ti)/(ccl)-8.5; x(5)-4; x(6)-3; ]; h=[ sum(x)-100; x(7)-4.4; x(9)-5.5; ]; end 我想让fun2中(ti)/(ccl)的值小于等于8.5为什么求出来的解的值大于8.5.求修改后代码
时间: 2023-11-22 12:54:46 浏览: 32
可以将fun2函数中的第一个约束条件修改为:
`(ti)/(ccl)-8.5 <= 0`
同时在fun2函数中添加一个新的约束条件:
`(ti)/(ccl)-8.5 >= -eps`
其中eps是一个很小的正数,例如eps=1e-6。
修改后的代码如下:
```
[x,y]=fmincon('fun1',zeros(9,1),[],[],[],[],zeros(9,1),[],'fun2' );
function f=fun1(x)
data=xlsread('file.xlsx');
f = data(1:9,8)' * x(1:9);
end
function [g,h]=fun2(x)
data=xlsread('file.xlsx');
an=(100-data(1:9,6)).*x(1:9)./100;
fe= data(1:9,1)' * an(1:9);
v2= data(1:9,5)' * an(1:9);
ca= data(1:9,3)' * an(1:9);
si= data(1:9,2)' * an(1:9);
ti= data(1:9,4)' * an(1:9);
ccl= ((100 - data(1:9,7)') * an(1:9)) / 100;
g=[50.5-(fe)/(ccl);
0.32-(v2)/(ccl);
(ca)/(si)-1.8;
1.8-(ca)/(si);
(ti)/(ccl)-8.5;
x(5)-4;
x(6)-3;
];
h=[sum(x)-100;
x(7)-4.4;
x(9)-5.5;
];
end
```
这样就可以保证(ti)/(ccl)的值小于等于8.5了。