В этом примере показано, как найти экстремум многомерной функции и ее приближения около точки экстремума. Этот пример использует переменные символьной матрицы, чтобы представлять многомерную функцию и ее производные. Переменные символьной матрицы являются доступным запуском в R2021a.
Рассмотрите многомерную функцию , где 2 1 вектор и матрица 2 на 2. Чтобы найти локальное экстремальное значение этой функции, вычислите корень производной . Другими словами, найдите решение производной .
Создайте вектор и матрица как переменные символьной матрицы. Задайте функцию .
syms x [2 1] matrix syms A [2 2] matrix f = sin(x.'*A*x)
f =
Вычислите производный D
из функции относительно вектора . Производный D
отображен в компактном матричном обозначении в терминах и .
D = diff(f,x)
D =
symmatrix
Объекты к sym
ОбъектыПеременные x
символьной матрицыA
F
, и D
symmatrix
объекты. Эти объекты представляют матрицы, векторы и скаляры в компактном матричном обозначении. Чтобы показать компоненты этих переменных, преобразуйте symmatrix
объекты к sym
объекты с помощью symmatrix2sym
.
xsym = symmatrix2sym(x)
xsym =
Asym = symmatrix2sym(A)
Asym =
fsym = symmatrix2sym(f)
fsym =
Dsym = symmatrix2sym(D)
Dsym =
Предположим, что вы интересуетесь случаем где значение [2 -1; 0 3]
. Замените этим значением в функциональный fsym
.
fsym = subs(fsym,Asym,[2 -1; 0 3])
fsym =
Замените значением в производный Dsym
Dsym = subs(Dsym,Asym,[2 -1; 0 3])
Dsym =
Затем примените символьный функциональный solve
получить корень производной.
[xmin,ymin] = solve(Dsym,xsym,'PrincipalValue',true);
x0 = [xmin; ymin]
x0 =
Постройте функцию вместе с решением для экстремума . Установите интервал графика на и в качестве второго аргумента fsurf
. Используйте fplot3
построить координаты решения для экстремума.
fsurf(fsym,[-1 1 -1 1]) hold on fplot3(xmin,ymin,subs(fsym,xsym,x0),'ro') view([-68 13])
Можно аппроксимировать многомерную функцию вокруг точки с многочленом с помощью Разложения Тейлора.
Здесь, термин вектор градиента, и матрица Гессиана многомерной функции вычисленный в .
Найдите матрицу Гессиана и возвратите результат как переменную символьной матрицы.
H = diff(f,x,x.')
H =
Преобразуйте матрицу Гессиана к sym
тип данных, который представляет матрицу в ее форме компонента. Используйте subs
оценивать матрицу Гессиана для = [2 -1; 0 3]
в минимальной точке .
Hsym = symmatrix2sym(H); Hsym = subs(Hsym,Asym,[2 -1; 0 3]); H0 = subs(Hsym,xsym,x0)
H0 =
Оцените вектор градиента в .
D0 = subs(Dsym,xsym,x0)
D0 =
Вычислите приближение Тейлора к функции около ее минимума.
fapprox = subs(fsym,xsym,x0) + D0*(xsym-x0) + 1/2*(xsym-x0).'*H0*(xsym-x0)
fapprox =
Постройте приближение функций на том же графике, который показывает и .
hold on
fsurf(fapprox,[-1 1 -1 1])
zlim([-1 3])