h — параметр, который если имеет значение больше нуля, то решение сходится к точному по х, если же меньше нуля, то решение не сходится.
Результат:
х= 0.5000
-1.0000
f=5.1425e-010
h =1
Задача эффективна для неразрешенной функции. Но этот метод не эффективен, если больше двух переменных. В этом случае лучше использовать метод градиентного поиска.
2) Метод градиентного поиска:
Для нахождения минимума функции используется команда 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
2) Крупномасштабный алгоритм:
Создаем встроенную функцию, где задаем частные производные по переменным 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
3) Поиск минимума функции нескольких переменных с ограничениями.
Используются следующие системы ограничений:
Система ограничений для функции:
с(х)<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
4) Решение задач линейного программирования.
Минимизировать функцию:
где — вектор коэффициентов при переменных.
Система ограничений для переменных:
a·xb
ae·x=be
Система ограничений для х:
Ib < x < ub
а,ае — матрицы,
b,bе,Ib,ub — вектора.
Для нахождения min функции используется команда linprog.
Пример 1.:
Найти минимум функции:
Ограничения на переменную:
x1 - х2 + х3 20
3х1 + 2·х2 + 4·х3 42
3х1 + 2·х2 30
x1 0,х2 0,х3 0
clc,clear % очистка окна с=[-5;-4;-6] % вектор коэффициентов при переменных а=[1 -1 1;3 2 4;3 2 0] %матрица коэффициентов при переменных в ограничения
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.