Найдите экстремум многомерной функции и ее приближения

В этом примере показано, как найти экстремум многомерной функции и ее приближения около точки экстремума. Этот пример использует переменные символьной матрицы, чтобы представлять многомерную функцию и ее производные. Переменные символьной матрицы являются доступным запуском в R2021a.

Рассмотрите многомерную функцию f(x)=sin(xTAx), где x 2 1 вектор и A матрица 2 на 2. Чтобы найти локальное экстремальное значение этой функции, вычислите корень производной f(x). Другими словами, найдите решение производной f(x0)=0.

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

Создайте вектор x и матрица A как переменные символьной матрицы. Задайте функцию f(x)=sin(xTAx).

syms x [2 1] matrix
syms A [2 2] matrix
f = sin(x.'*A*x)
f = sin(xTAx)

Вычислите производный D из функции f(x) относительно вектора x. Производный D отображен в компактном матричном обозначении в терминах x и A.

D = diff(f,x)
D = cos(xTAx)xTA+xTAT

Преобразуйте symmatrix Объекты к sym Объекты

Переменные x символьной матрицыAF, и D symmatrix объекты. Эти объекты представляют матрицы, векторы и скаляры в компактном матричном обозначении. Чтобы показать компоненты этих переменных, преобразуйте symmatrix объекты к sym объекты с помощью symmatrix2sym.

xsym = symmatrix2sym(x)
xsym = 

(x1x2)

Asym = symmatrix2sym(A)
Asym = 

(A1,1A1,2A2,1A2,2)

fsym = symmatrix2sym(f)
fsym = sin(x1A1,1x1+A1,2x2+x2A2,1x1+A2,2x2)
Dsym = symmatrix2sym(D)
Dsym = (cos(x1A1,1x1+A1,2x2+x2A2,1x1+A2,2x2)2A1,1x1+A1,2x2+A2,1x2cos(x1A1,1x1+A1,2x2+x2A2,1x1+A2,2x2)A1,2x1+A2,1x1+2A2,2x2)

Замените числовыми значениями и найдите минимум

Предположим, что вы интересуетесь случаем где значение A [2 -1; 0 3]. Замените этим значением в функциональный fsym.

fsym = subs(fsym,Asym,[2 -1; 0 3])
fsym = sin(3x22+x12x1-x2)

Замените значением A в производный Dsym

Dsym = subs(Dsym,Asym,[2 -1; 0 3])
Dsym = (cos(3x22+x12x1-x2)4x1-x2-cos(3x22+x12x1-x2)x1-6x2)

Затем примените символьный функциональный solve получить корень производной.

[xmin,ymin] = solve(Dsym,xsym,'PrincipalValue',true);
x0 = [xmin; ymin]
x0 = 

(00)

Постройте функцию f(x) вместе с решением для экстремума x0. Установите интервал графика на -1<x1<1 и -1<x2<1 в качестве второго аргумента fsurf. Используйте fplot3 построить координаты решения для экстремума.

fsurf(fsym,[-1 1 -1 1])
hold on
fplot3(xmin,ymin,subs(fsym,xsym,x0),'ro')
view([-68 13])

Figure contains an axes object. The axes object contains 2 objects of type functionsurface, parameterizedfunctionline.

Аппроксимированная функция около ее минимума

Можно аппроксимировать многомерную функцию вокруг точки x0 с многочленом с помощью Разложения Тейлора.

f(x)f(x0)+f(x0)(x-x0)+12(x-x0)TH(f(x0))(x-x0)

Здесь, термин f(x0) вектор градиента, и H(f(x0)) матрица Гессиана многомерной функции f(x) вычисленный в x0.

Найдите матрицу Гессиана и возвратите результат как переменную символьной матрицы.

H = diff(f,x,x.')
H = -sin(xTAx)ATx+AxxTA+xTAT+cos(xTAx)AT+A

Преобразуйте матрицу Гессиана H(f(x0)) к sym тип данных, который представляет матрицу в ее форме компонента. Используйте subs оценивать матрицу Гессиана для A= [2 -1; 0 3] в минимальной точке x0.

Hsym = symmatrix2sym(H);
Hsym = subs(Hsym,Asym,[2 -1; 0 3]);
H0 = subs(Hsym,xsym,x0)
H0 = 

(4-1-16)

Оцените вектор градиента f(x0) в x0.

D0 = subs(Dsym,xsym,x0)
D0 = (00)

Вычислите приближение Тейлора к функции около ее минимума.

fapprox = subs(fsym,xsym,x0) + D0*(xsym-x0) + 1/2*(xsym-x0).'*H0*(xsym-x0)
fapprox = 

x12x1-x22-x2x12-3x2

Постройте приближение функций на том же графике, который показывает f(x) и x0.

hold on
fsurf(fapprox,[-1 1 -1 1])
zlim([-1 3])

Figure contains an axes object. The axes object contains 3 objects of type functionsurface, parameterizedfunctionline.