В этом примере показано, как найти экстремум многомерной функции и ее аппроксимацию вблизи точки экстремума. В этом примере для представления многомерной функции и ее производных используются символьные матричные переменные. Переменные символьной матрицы доступны начиная с R2021a.
Рассмотрим многомерную функцию xTA x), где x - вектор 2 на 1, а A - матрица 2 на 2. Чтобы найти локальный экстремум этой функции, вычислите корень производной f (x). Другими словами, найти раствор (x0) = 0.
Создайте вектор и матрицу в виде символьных матричных переменных. Определите функцию xTA x).
syms x [2 1] matrix syms A [2 2] matrix f = sin(x.'*A*x)
f =
Вычислить производную D функции ) относительно вектора x. производная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 =
Постройте график функции ) вместе с решением экстремума x0. Установите интервал графика равным x1 < 1 < x2 < 1 в качестве второго аргументаfsurf. Использовать fplot3 для построения графика координат решения экстремума.
fsurf(fsym,[-1 1 -1 1]) hold on fplot3(xmin,ymin,subs(fsym,xsym,x0),'ro') view([-68 13])

Можно аппроксимировать многомерную функцию вокруг точки с помощью мультинома с помощью расширения Тейлора.
f (x0)) (x-x0)
Здесь член ) является градиентным вектором, а x0)) является гессенской матрицей многомерной (x), вычисленной при x0.
Найдите матрицу Гессена и верните результат в виде символьной переменной матрицы.
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 =
Вычислите градиентный вектор ) при x0.
D0 = subs(Dsym,xsym,x0)
D0 =
Вычислите приближение Тейлора к функции вблизи ее минимума.
fapprox = subs(fsym,xsym,x0) + D0*(xsym-x0) + 1/2*(xsym-x0).'*H0*(xsym-x0)
fapprox =
Постройте график аппроксимации функции на том же графике, который показывает ) и x0.
hold on
fsurf(fapprox,[-1 1 -1 1])
zlim([-1 3])