| > |
restart:
with(plots):#Пакет графики
#Для начала введем целевую функцию
p(x,y):= x-5*y+1;
#Введем условия, ограничивающие решение
ops:= [10*x-y<=50, 1*x+2*y<=15.5, x>=0, y>=0];
#Ниже представим команду вычисления градиента (вектора) целевой функции
grad := arrow([0,0],[diff(p(x,y),x)/2,diff(p(x,y),y)/2],color=blue):
#Ниже представим команду, которая решает поставленную задачу на максимум P(x,y)=>max, при условиях ops
sol:=Optimization[LPSolve](p(x,y), ops, maximize);
#Данная команда подготавливает к построению множества, удов.-его условиям-ограничениям
p1 := inequal(ops, x=-1..10, y=-1..10,
optionsfeasible=(color=gold),
optionsclosed=(color=black, thickness=1),
optionsexcluded=(color=white)
):
#Данная команда подготавливает к построению паралельных линий перпендикулярных к градиенту
#это дает визуальное представление полученного решения.
p2 := contourplot(p(x,y), x=-1..10, y=-1..10):
#Данная команда подготавливает к графическому построению искомого решения
#pointplot команда построения точки
p3 := pointplot({map(rhs,sol[2])}, symbolsize=20, colour=blue):
#Данная команда выводит все графические обьекты на дисплей экрана
display(grad, p1, p2, p3,scaling=CONSTRAINED); |