Графическое решение задачи линейного программирования на компьютере для случая двух переменных |
||
Z=C1*X1+C2*x2 a11x1+a12x2<=b1 x1>=0 x2>=0 a21x1+a22x2<=b2 ai>=0 bi>=0 1)на плоскости х1,х2 строят прямые, соответствующие условиям ограничений 2)закрасить область допустимых значений 3) при вводе с клавиатуры Z будут строиться линии уровня. Даны матрица A(i,j), Bi,Ci - коэффициенты системы ограничений и максимизирующей функции ХХ- максимальное значение шкалы нанесенной на ось Х1 ХУ - максимальное значение шкалы нанесенной на ось Х2 sx, sy - число делений, приходящихся на одну точку графика. х(1),х(2)- значения переменных задачи. x2=y ax+by=c x=0 y=c/b y=0 x=c/a В программе запишется: (c/a/sx+x0,y0)-(c/a,0), (x0,y0-c/b/sy)-(0,c/b) Знак минус, так как ось y направлена вниз. AX+BY=C --> LINE(x0,y0-c/b/sy) - (c/a/sx+x0,y0) 10 screen 9:cls:keyoff 20 x0=100:y0=175 30 line(x0,8)-(x0,199) 40 line(0,y0)-(600,y0) 50 locate 1,x0/8:print "x(2)" 60 locate y0/8,74:print "x(1)" 70 locate 1,30:print"линейное программирование" 80 dim a(2,2),b(2,c(2),x(2) 90 for i=1 to 2 100 read a(i,1),a(i,2),b(i),c(i) 110 next 120 xx=b(1)/a(1,1)+b(2)/a(2,1) 130 yy=b(1)/a(1,2)+b(2)/a(2,2) 140 sx=xx/(600-x0):sy=yy/y0 150 for i=1 to 2 160 line (x0,y0-b(i)/a(i,2)/sy)-(b(i)/a(i,1)?sx+x0,0) 170 next 180 paint (x0+1,y0-1) 190 locate 1,33:input "введите z=";z 200 line (x0,y0-z/c(1)/sy)-(z/c(2)/sx+x0,y0) 210 goto 190 220 data 0.16,0.8,80,1.5 230 data 0.005,0.008,1,2,3 |
||