Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
117
Добавлен:
13.02.2015
Размер:
1.12 Mб
Скачать

МАТЛАБ. ОПТИМИЗАЦИЯ, ЛИНЕЙНОЕ ПРОГРАММИРОВАНИЕ.

Поиск экстремума функции одной переменной. Поиск локального (в пределах определенного интервала) минимума осуществляет функция [x,y]=fminbnd(имяФункции,границыИнтервала). Если же надо найти локальный минимум, то исследуемую функцию берут с другим знаком и ищут ее минимум, который фактически является ее максимумом. При этом значение функции в максимуме это найденное значение с другим знаком.

Поиск экстремума функции нескольких переменных. Если функция вычисляется от нескольких переменных, то для поиска ее минимума используется (после приблизительной оценки начальных приближений переменных в предполагаемом минимуме) команда [x,y]=fminsearch(имяФункции, векторНачальныхПриближенийПеременных).

Решение задач линейного программирования. В задачах линейного программирования требуется найти максимум или минимум линейной функции многих переменных при линейных ограничениях в виде равенств или неравенств. Рассмотрим для примера такую задачу.

Пусть функция L(x1,x2,x3,x4)=x1+x2+x3+x4 и надо найти ее максимум и соответствующие ее максимуму значения переменных.

Пусть даны ограничения в виде неравенств. x1≥0, x2≥0, x3≥0, x4≥0.

Пусть также даны еще ограничения в виде неравенств.

3x1-x2≤7, x2-2x3≤-1, 4x3-x4≤3, 5x1+2x4≥14.

Для решения задачи линейного программирования (нахождения минимума) используется функция [x, L, f]=linprog(c, A, b, A1, b1,Lx, Rx) где

x вектор значений переменных, полученный в качестве ответа; L значение функции в минимуме;

f параметр, характеризующий вычислительный процесс (если он ноль то решение приостановлено после достижения максимального числа итераций, если положителен то все нормально решено, если отрицателен то решения не найдено);

c функция цели представленная в виде вектора коэффициентов (в нашем случае [1 1 1 -1] но так как нам нужен максимум, а функция [x, L, f]=linprog(c, A, b, A1, b1, Lx, Rx) ищет минимум, то в выражении для функции поменяем знак, поэтому вектор коэффициентов будет [-1 -1 -1 1]);

A, b система ограничений, заданная в матричном виде Ax≤b (это в нашей задаче ограничения 3x1-x2≤7, x2-2x3≤-1, 4x3-x4≤3, 5x1+2x4≥14, но так как 5x1+2x4≥14 не подходит, то надо поменять знак в этом неравенстве и тогда оно будет -5x1-2x4≤-14, в таком случае матрица А состоит из коэффициентов (при переменных) в этих неравенствах, а столбец b состоит из правых (не содержащих переменных) частей неравенств;

A1, b1 система равенств вида A1x=b (в нашей задаче такой системы ограничений нету, но могла бы быть);

Lx, Rx относятся к ограничениям в виде Lx≤x≤Rx, Lx≤x, x≤Rx (в нашей задаче есть ограничения вида Lx≤x, поэтому вектор Lx будет 0 0 0 0).

При использовании функции linprog в списке аргументов вместо тех, которые не указаны, ставятся пустые квадратные скобки.

Рассмотрим еще пример для тренировки. Пусть дана функция W=x1+x2+3x3-x4 и надо найти ее максимум. Пусть даны ограничения в виде неравенств.

x1-5x2+4x3≤5, x1-2x2-3x3≤4, x1+6x2+5x3≤4, x2+x3≤1. И пусть есть еще ограничения в виде неравенств. x1≥0, x2≥0, x3≥0, x4≥0.

Решим задачу с помощью функции [x, L, f]=linprog(c, A, b, A1, b1, Lx, Rx). Для ее применения нам надо подготовить аргументы функции. Вектор с коэффициентов функции равен (1 1 3 -1), но так как функция linprog ищет минимум, а нам нужен максимум, то поменяем знак у коэффициентов функции и тогда вектор с будет (-1 -1 -3 1). Матрица А состоит из коэффициентов при переменных в системе неравенств x1-5x2+4x3≤5, x1-2x2-3x3≤4, x1+6x2+5x3≤4, x2+x3≤1. Так как все они со знаком ≤ то ничего менять не требуется. Вектор b состоит из правых частей этих же неравенств. Матрица A1 из системы A1х=b1 для нас не актуальна (нет таких условий). Lx, Rx относятся к ограничениям в виде Lx≤x≤Rx, Lx≤x, x≤Rx. У нас есть ограничения в виде неравенств. x1≥0, x2≥0, x3≥0, x4≥0. Тогда вектор Lx=[0; 0; 0; 0]. Что касается остальных типов ограничений, то так как у нас нет таких ограничений, то для нас они не важны.

Задачи нелинейного программирования. Нелинейная задача отличается от линейной. В ней есть система линейных неравенств Ax≤b, система линейных равенств A1x=b1, система ограничений вида lx≤x≤rx, lx≤x, x≤rx. Однако помимо этих уже знакомых (из линейного программирования) условий, есть еще система нелинейных ограничений вида g1(x)≤0, и система нелинейных равенств g2(x)=0. Для решения задачи нелинейного программирования (после выбора вектора начальных приближений х0) используется функция [x, y, f]=fmincon(F, x0, A, b, A1, b1, Lx, Rx, G), где G это М-функция, вычисляющая левые части нелинейных ограничений g1(x)≤0, g2(x)=0. Если какие-то аргументы не определены, то вместо них в вызове функции ставятся квадратные скобки.

Рассмотрим для примера следующую задачу. пусть дана функция x12+x22=1 при условии, что x1x2=4, x1≥0, x2≥0. Вектор начальных приближений примем равным х0=(0.1, 0.1).