«Подгонка» кривой - часть 6
1
output =
iterations: 6
cgiterations: 0
algorithm: 'lipsol'
lambda =
ineqlin: [3x1 double]
eqlin [0xl double]
upper [3x1 double]
lower [3x1 double]
Из возвращенной информации, в частности, следует:
• что оптимальное решение х = [0.0000 15.0000 3.0000];
• минимальное значение целевой функции равно -78.0000;
• вычисления завершились нахождением решения (exitflag>0);
• всего было выполнено 6 итераций;
• был использован алгоритм lipsol
Пример 2. Цех малого предприятия должен изготовить 100 изделий трёх типов. Каждого изделия нужно сделать не менее 20 штук. На изделия уходит соответственно 4 , 3,4 и 2 кг металла при его общем запасе 340 кг, а также по 4,75 , 11 и 2 кг пластмассы при её общем запасе 700 кг. Сколько изделий каждого типа х1 , х2 и х3
надо выпустить для получения максимального выпуска в денежном выражении, если цена изделия составляет по калькуляции 40, 30 и 20 грн ?
Данная задача сводится к вычислению максимума функции
f(x1,x2,x3) = 40 x1 + 30 x2 + 20 x3
при наличии ограничений
x1 ? 20, x2
? 20, x3 ? 20
4 x1 + 3,4 x2 + 2 x3
? 340
4,75 x1 + 11 x2 + 2 x3 ? 700
x1 + x2 + x3 = 100
Имеем задачу линейного программирования.
f=[40;30;20];% Вектор коэффициентов линейной целевой функции
% Матрица коэффициентов ограничений – неравенств
A=[4 3.4 2; 4.75 11 2];
b=[340;700]; %вектор ограничений – неравенств
Aeq=[1 1 1]; %матрица коэффициентов ограничений – равенств
beq=[100]; %вектор ограничений – равенств
% Задание нижних границ переменных (нулей)
lb=[20;20;20];
% Поиск решений, определение максимум целевой функции
[x,fval,exitflag,output]=linprog(-f,A,b,Aeq,beq,lb)
Optimization terminated successfully
x =
56.0000
20.0000
24.0000
fval =
-3.3200e+003
exitflag =
1
output =
iterations: 5
cgiterations: 0
algorithm: 'lipsol'
Замечание. Максимизация с помощью функций fminbnd, fminunc, fminsearch, linprog, fmincon, fgoalattain, fminimax, lsqcurvefit и lsqnonlin достигается путём замены целевой функции f(x) на - f(x) ( т. е. изменить знак). Аналогично в задачах квадратичного прогаммирования: там необходимо заменить матрицу Н и вектор f соответственно на - Н и -f .