如何绘制与线性规划函数相关的不等式方程
How to plot inequality equations associated with a linear programming function
我是 Matlab 的新手,但对编程原理有一些基本的了解。
我想根据以下两个不等式绘制两个变量 H(x 轴)与 C(y 轴):4H+C<=20 和 H+3C<=10,给定: NB=H+2C(线性objective函数向量),使用Matlab中的linprog函数工具求解(x=linprog(f,A,b);)
我知道如何输入 linprog 编程(注意这里 f 的负值是因为我想最大化而不是最小化我的 objective 函数):
f=[-1,-2];
A=[4 1; 1 3];
b=[20;10];
[x,fval,exitflag,output,lambda] = linprog(f,A,b);
在 x = (4.5455, 1.8182)
处给出最优解
我想以图形方式显示此内容,即在图表上绘制两个不等式方程,两个轴刻度从 0 到 10,间隔为 1,但我似乎无法完成这项工作。
这是我的:
[H,C] = meshgrid((0:1:10),(0:1:10));
figure, hold on
xlabel('H, Hydropower')
ylabel('C, Crops')
第一个问题是它使用 0.1 (??) 的间隔从 0-1 绘制
当然,没有代表不平等的线条。但是如何创建不平等线呢?
非常感谢任何帮助!
乌尔斯
技巧是生成整个NB,然后删除不满足条件的部分。这里有一段代码可以做到这一点(加上一些花哨的绘图)。请记住,要绘制条件在 "boundary" 中的线,您需要删除不平等并放置一个平等(参见代码)。
clear;clc
%Generate data
[H,C] = meshgrid(0:0.1:10);
NB=H+2*C;
% Get True where condition aplies, false where not.
cond1=4*H+C<=20;
cond2=H+3*C<=10;
% Get boundaries of the condition
Cp1=20-4*H(1,:);
Cp2=(10-H(1,:))/3;
%Delete Areas whereCondition does not apply;
NB(~cond1)=NaN;
NB(~cond2)=NaN;
%% Plot
[C,h]=contourf(H,C,NB,20);
clabel(C,h,'LabelSpacing',100) % optional
hold on
plot(H(1,:),Cp1,'r')
text(H(1,45),Cp1(45), '\leftarrow Cond1'); %arbitrary location
plot(H(1,:),Cp2,'k')
text(H(1,75),Cp2(75), '\leftarrow Cond2'); %arbitrary location
axis([0 10 0 10])
xlabel('H, Hydropower')
ylabel('C, Crops')
我是 Matlab 的新手,但对编程原理有一些基本的了解。
我想根据以下两个不等式绘制两个变量 H(x 轴)与 C(y 轴):4H+C<=20 和 H+3C<=10,给定: NB=H+2C(线性objective函数向量),使用Matlab中的linprog函数工具求解(x=linprog(f,A,b);)
我知道如何输入 linprog 编程(注意这里 f 的负值是因为我想最大化而不是最小化我的 objective 函数):
f=[-1,-2];
A=[4 1; 1 3];
b=[20;10];
[x,fval,exitflag,output,lambda] = linprog(f,A,b);
在 x = (4.5455, 1.8182)
处给出最优解我想以图形方式显示此内容,即在图表上绘制两个不等式方程,两个轴刻度从 0 到 10,间隔为 1,但我似乎无法完成这项工作。
这是我的:
[H,C] = meshgrid((0:1:10),(0:1:10));
figure, hold on
xlabel('H, Hydropower')
ylabel('C, Crops')
第一个问题是它使用 0.1 (??) 的间隔从 0-1 绘制 当然,没有代表不平等的线条。但是如何创建不平等线呢?
非常感谢任何帮助! 乌尔斯
技巧是生成整个NB,然后删除不满足条件的部分。这里有一段代码可以做到这一点(加上一些花哨的绘图)。请记住,要绘制条件在 "boundary" 中的线,您需要删除不平等并放置一个平等(参见代码)。
clear;clc
%Generate data
[H,C] = meshgrid(0:0.1:10);
NB=H+2*C;
% Get True where condition aplies, false where not.
cond1=4*H+C<=20;
cond2=H+3*C<=10;
% Get boundaries of the condition
Cp1=20-4*H(1,:);
Cp2=(10-H(1,:))/3;
%Delete Areas whereCondition does not apply;
NB(~cond1)=NaN;
NB(~cond2)=NaN;
%% Plot
[C,h]=contourf(H,C,NB,20);
clabel(C,h,'LabelSpacing',100) % optional
hold on
plot(H(1,:),Cp1,'r')
text(H(1,45),Cp1(45), '\leftarrow Cond1'); %arbitrary location
plot(H(1,:),Cp2,'k')
text(H(1,75),Cp2(75), '\leftarrow Cond2'); %arbitrary location
axis([0 10 0 10])
xlabel('H, Hydropower')
ylabel('C, Crops')