線型計画法
2変数の線形計画法の例です。
第1象限で,2つの直線 y=-1/2x+4 と y=-3x+9 および両軸の間の領域内の点A(a,b) に対して, a+b の最大値を求めます。
2直線の方程式は x+2y-8=0 , 3x+y-9=0 として,その係数を用いて drawline() で表示します。
領域には斜線を引きます。
作図ツールで点Aをとっておき,次のスクリプトをDrawスロットに書きます。
なお,draw axis() , axisscale(),drawline(),intersectline(),pointindomain() および,それに関係する関数が必要です。
drawaxis([-6,6],[-4,10],0.3);
axisscale([-6,6],[-4,9],[1,1]);
L1=[1,2,-8]; // 直線1 ax+by+c=0 の係数 [a,b,c]
L2=[3,1,-9]; // 直線2の係数 L1,L2 の順序は問わず
// Aを通る傾きmの直線の方程式
m=1;
f(x):=(-m*(x-A.x)+A.y);
// 直線と交点を描く
linecolor([0,0,0]);
drawline(L1,[-6,6]);
drawline(L2,[-6,6]);
linecolor([0,0,1]);
if(A.xy!=[2,3],
drawtext([2,3],"(2,3)",size->20); // 交点の座標
);
//領域にハッチをかける
repeat(60,n,start->-20, // 適当に変える
k=n/2;
p1=intersectline(L1,[1,-1,k]);
p2=intersectline(L2,[1,-1,k]);
r2=min([p1_1,p2_1]);
p3=intersectline([0,1,0],[1,-1,k]); //x軸との交点
r1=max([p3_1,0]);
drawline([1,-1,k],[r1,r2]);
);
plist=[[0,0],[3,0],[2,3],[0,4]]; // 4点の座標
drawtext(A+[0.2,0],"A("+A.x+","+A.y+")",size->20);
if(pointindomain(A.xy,plist)>0,
plot(f(#),color->[1,0,0]);
drawtext([-1,A.x+A.y],A.x+A.y,size->20);
);
点Aが領域内にあればAを通る直線とy切片を表示します。
このページの下からダウンロードできます。