0

私は Matlab にかなり慣れていませんが、プログラミングの原則についてはある程度の基本的な理解があります。

これらの 2 つの不等式に従って、H (x 軸) 対 C (y 軸) の 2 つの変数をプロットしたいと思います: 4H+C<=20 および H+3C<=10、与えられた: (線形目的関数ベクトル)、Matlab の linprog 関数ツールを使用して解決されます (x=linprog(f,A,b);)

私は linprog プログラミングを入力する方法を知っています (ここで f の負の値は、目的関数を最小化するのではなく、最大化したいためです):

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) で最適解を与える

これをグラフィカルに表示したいと思います。つまり、両方の軸スケールが 1 の間隔を使用して 0 から 10 になるグラフに両方の不等式をプロットしますが、これを機能させることはできません。

ここに私が持っているものがあります:

[H,C] = meshgrid((0:1:10),(0:1:10));
figure, hold on
xlabel('H, Hydropower')
ylabel('C, Crops')

最初の問題は、0.1 (??) の間隔を使用して 0-1 からプロットされることです。もちろん、不等式を表す線はありません。しかし、不等式の線を作成するにはどうすればよいでしょうか?

どんな助けでも大歓迎です!ウルス

4

1 に答える 1

0

NB全体を生成してから、条件を満たさない部分を削除するのがコツです。ここに、それを行うコードがあります (さらに、凝ったプロットもいくつかあります)。条件が「境界」にある行をプロットするには、不等式を削除して等式を配置する必要があることを忘れないでください (コードを参照)。

ここに画像の説明を入力

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')
于 2015-08-03T12:37:12.840 に答える