MATLAB в инженерных и научных расчетах


«Подгонка» кривой - часть 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 .




Начало  Назад  Вперед