利用
prob=optimproblem("ObjectiveSense","max")%默认为min
x=optimvar("x",3,1,"LowerBound",0);%定义3行一列的变量,下限值为0
prob.Objective=%目标函数,标量
prob.Constraints.con1=x(1)+x(2)-x(3)==z;%举例等式约束
prob.Constraints.con2=c*x<=b;%举例不等式约束
[s,v]=solve(prob);%v为目标函数值
xx=s.x;%xx为对应的x值
例
prob=optimproblem();
x=optimvar("x",4,4,"LowerBound",0);%矩阵下标从1开始
prob.Objective=2800*(x(1,1)+x(2,1)+x(3,1)+x(4,1))+4500*(x(1,2)+x(2,2)+x(3,2))+6000*(x(1,3)+x(2,3))+7300*x(1,4);
%prob.Objective=2800*sum(x(:,1))+4500*(sum(x(1:3,2)))+6000*(sum(x(1:2,3)))+7300*x(1,4);
prob.Constraints.con1=x(1,1)+x(1,2)+x(1,3)+x(1,4)>=15;
prob.Constraints.con2=x(1,2)+x(1,3)+x(1,4)+x(2,1)+x(2,2)+x(2,3)>=10;
prob.Constraints.con3=x(1,3)+x(1,4)+x(2,2)+x(2,3)+x(3,1)+x(3,2)>=20;
prob.Constraints.con4=x(1,4)+x(2,3)+x(3,2)+x(4,1)>=12;
[s,v]=solve(prob);
xx=s.x;
disp(xx);
相关操作
sum(x);%求和,默认按列求和得行向量
sum(x,2);%按行求和
sum(x,"all");%对所有元素求和得标量
sum(c.*a,"all");
disp(x);%查看变量值
可以将数据保存到记事本中通过导入,便于矩阵运算
c=readmatrix("data.txt");
还可以将结果输出到表格中保存,使用
writematrix(xx,"data1.xlsx")
对于有绝对值的转化为线性规划
转为求解对应的未知变量
再用得
clc,clear
prob=optimproblem();
u=optimvar("u",4,1,"LowerBound",0);
v=optimvar("v",4,1,"LowerBound",0);
prob.Objective=[1,2,3,4]*(u+v);
prob.Constraints.con=[1,-1,-1,1;1,-1,1,-3;1,-1,-2,3;]*(u-v)<=[-2;-1;-1/2];
[s,v]=solve(prob);
x=s.u-s.v;
disp(x);