Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Normalny_Modelirovanie_obektov_i_sistem_upra.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
837.01 Кб
Скачать
    1. Реализация методов оптимизации в пакете MatLab (toolbox)

      1. Оптимизация (минимизация) функции

Задания:

  1. Поиск минимума функции одной переменной для фиксированного интервала.

  2. Поиск минимума функции нескольких переменных без ограничений:

— симплекс-метод;

  • метод градиентного поиска.

  1. Поиск минимума функции нескольких переменных с ограничениями.

  2. Решение задач линейного программирования.

  3. Решение задач квадратичного программирования.

Решение:

  1. Поиск минимума функции одной переменной для фиксированного интервала.

Найти минимум функции:

Для нахождения минимум функции используем команду fminbnd.

Создаем встроенную функцию:

f unction y=kate (x)

y=sin(x)/x^2+1 %значение функции

В новом окне находим минимум функции с помощью команды fminbnd:

clc,clear% очистка окна

х0=[-10;10)% интервал, в пределах которого ищем минимум функции

[x,f]=fminbnd ('kate',x0)

где:

х — значение переменной в точке минимума;

f — значение функции в точке минимума.

  1. Поиск минимума функции нескольких переменных без ограничений.

Найти минимум функции:

  1. Симплекс-метод:

Создаем встроенную функцию:

function y=kate(x)

у-ехр(х(1))*(4*(х(1))^2+2*(х(2))^2+4*х(1)*х(2)+2*х(2)+1) % значение функции

В новом окне при помощи команды fminsearch находим минимум функции: clc,clear% очистка окна

х0=[-1;1] % %вектор начальных значений

[x,f,h]=fminsearch(' kate',xO)

где:

х — значение переменной в точке минимума;

f — значение функции в точке минимума;

h — параметр, который если имеет значение больше нуля, то решение сходится к точному по х, если же меньше нуля, то решение не сходится.

Результат:

х= 0.5000

-1.0000

f=5.1425e-010

h =1

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

  1. Метод градиентного поиска:

Для нахождения минимума функции используется команда fminunc.

  1. Среднемасштабный алгоритм

Создаем встроенную функцию: function y=kate (x)

у=ехр(х( 1 ))*(4*(х( 1 ))^2+2*(х(2))^2+4*х( 1 )*х(2)+2*х(2)+1)

В новом окне при помощи команды fminunc находим минимум функции:

clc,clear% очистка окна

х0=[-1;1] % вектор начальных значений

[x,f,h]=fminunc(' kate ',x0)

Результат: х = 0.5000

-1.0000

f= 1.3028e-010

h=l

  1. Крупномасштабный алгоритм:

Создаем встроенную функцию, где задаем частные производные по переменным x1 и х2:

function [y,h]=kate(x)

h=[exp(x(l))*(8*x(l)+4*x(2))+exp(x(l))*(4*(x(l))^2+2*(x(2))^2+4*x(l)*x(2)+2*x(2)+l);

exp(x(l))*(4*x(2)+4* х(1)+2)] % h- матрица, где заданы производные по x1 и х2

у=ехр(х(1))*(4*(х(1))^2+2*(х(2))^2+4*х(1)*х(2)+2*х(2)+1) % значение функции

В новом окне при помощи команды fminunc находим минимум функции:

clc,clear% очистка окна

options=optimset('GradObj','on')%задаем крупномасштабный алгоритм

х0=[-1;1] %вектор начальных значений

[x,f]=fminunc('kate',xO,options)

Результат:

х= 0.5000

-1.0000

f= 1.3911е-014

  1. Поиск минимума функции нескольких переменных с ограничениями.

Используются следующие системы ограничений:

Система ограничений для функции:

с(х)<0.

се(х)=0

Система ограничений для переменных:

а·х b

ае·х =be

Система ограничений для х:

lb <x<ub

с(х), се(х) — функции,

а,ае — матрицы,

b,bе,Ib,ub — вектора.

Для нахождения min функции используем команду fmincon.

Пример1.:

Найти минимум функции: f(x) = -х1·х2 ·х3

Ограничения на переменную: -х1 - 2·х2 - 2·х3 0

х1 + 2·х2 + 2·х3 72

Создаем встроенную функцию:

function p=kate(x)

р=-х(1 )*х(2)*х(3) %значение функции

В новом окне при помощи команды fmincon находим min функции:

clc,clear% очистка окна

х0=[10;10;10]%вектор начальных значений

а=[-1 -2 -2;1 2 2]%матрица коэффициентов при переменных в ограничениях

b=[0;72]%вектор свободных членов в ограничениях

[x,f,h]=fmincon('kate',xO,a,b)

Результат:

х= 24.0000

12.0000

12.0000

f=-3.4560e+003

h=l

Пример 2.:

Найти минимум функции:

Ограничения на функцию:

1.5 + х1·х2 - х1 - х2 < 0

- х1·х2 -10 < 0

Ограничения на переменную:

-10 х1 0

1 < х2 < 2

т.е.

Ib=[-10 1]

ub=[0 2]

Создаем встроенную функцию:

function y=kate(x)

у=ехр(х(1))*(4*(х(1))^2+2*(х(2))^2+4*х(1)*х(2)+2*х(2)+1) %значение функции

Создаем еще одну встроенную функцию, где заданы ограничения на функцию:

function [c,ce]=kathy(x)

с(1)=1.5+х(1)*х(2)-х(1)-х(2)

с(2)=-х(1)*х(2)-10

се=[] — равно пустому множеству

В новом окне, используя команду fmincon, находим min функции:

clc,clear% очистка окна

х0=[-1; 1 ] %вектор начальных значений

а=[]% равно пустому множеству

b=[]% равно пустому множеству

ае=[]% равно пустому множеству

bе=[]% равно пустому множеству

Ib=[-10 1]%вектор ограничений на х

ub=[0 2] % вектор ограничений на х [x,f]=fmincon('kate',xO,a,b,ae,be,lb,ub,'kathy')

Результат: х= -9.5474

1.0474

f= 0.0236

  1. Решение задач линейного программирования.

Минимизировать функцию:

где — вектор коэффициентов при переменных.

Система ограничений для переменных:

a·x b

ae·x=be

Система ограничений для х:

Ib < x < ub

а,ае — матрицы,

b,bе,Ib,ub — вектора.

Для нахождения min функции используется команда linprog.

Пример 1.:

Найти минимум функции:

Ограничения на переменную:

x1 - х2 + х3 20

1 + 2·х2 + 4·х3 42

1 + 2·х2 30

x1 0,х2 0,х3 0

clc,clear % очистка окна

с=[-5;-4;-6] % вектор коэффициентов при переменных

а=[1 -1 1;3 2 4;3 2 0] %матрица коэффициентов при переменных в ограничения

b=[20;42;30] %вектор свободных членов в ограничениях

ае=[] % равно пустому множеству

be=[] % равно пустому множеству

Ib=[0;0;0] % вектор ограничений на х

ub=[] % равно пустому множеству

[x,f]=linprog(c,a,b,ae,be, lb)

Результат:

х = 0.0000

15.0000

3.0000

f = -78.0000

  1. Решение задач квадратичного программирования.

Минимизировать функцию:

c — вектор коэффициентов при переменных х.

Система ограничений для переменных:

a·x

ae·x=be

Система ограничений для х:

Ib < x<ub

а,ае — матрицы,

b,bе,Ib,ub — вектора.

Для нахождения min функции используем команду quadprog.

Пример 1.: Найти минимум функции:

Ограничения на переменную:

x1 + x2 20

-x1 + x2 2

2x1 + x2 3

x1 0, x2 0

clc,clear%очистка окна

h=[l 2;-l -1]

с=[-2;-6] % вектор коэффициентов при переменных х.

а=[1 1;-1 2;2 1] % матрица коэффициентов при переменных в ограничениях

b=[2;2;3] % вектор свободных членов в ограничениях

ае=[] % равно пустому множеству

bе=[] % равно пустому множеству

Ib=[0;0] % вектор ограничений на х

ub=[] % равно пустому множеству

[x,f]=quadprog(h,c,a,b,ae,be,Ib)

х =0.6667

1.3333

f= -9.5556

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]