Этот пример показывает, как найти экстремум многомерной функции и ее приближение около точки экстремума. Этот пример использует переменные символьной матрицы, чтобы представлять многомерную функцию и ее производные. Переменные символьной матрицы доступны, начиная с 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 =
Постройте график функции вместе с extremum решением . Установите интервал графика равным и как второй аргумент fsurf
. Использование fplot3
для построения графика координат решения extremum.
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])