Производная функции по направлению
df = fndir(f,y)
df = fndir(f,y)
- ppform производной по направлению функции, f в f
, в направлении (столбца-) вектора y
. Это означает, что df
описывает функцию .
Если y
является матрицей, с n
столбцы, и f d
-значение, затем функция в df
является prod(d)*n
-значен. Его значение в x, измененное до размера [d,n]
, имеет в j-м «столбце» производную по направлению f по x в направлении j-го столбца y
. Если вы предпочитаете df
чтобы явным образом отразить фактический размер f, используйте
df = fnchg( fndir(f,y), 'dim',[fnbrk(f,'dim'),size(y,2)] );
Начиная с fndir
полагается на ppform функции в f
, он не работает ни для рациональных функций, ни для функций в stform.
Для примера, если f
описывает m
-вариативные d
-векторно-значимая функция и x
является некоторой точкой в своей области, то, например, с этим конкретным ppform f
который описывает билинейный полином с скалярным значением,
f = ppmak({0:1,0:1},[1 0;0 1]); x = [0;0]; [d,m] = fnbrk(f,'dim','var'); jacobian = reshape(fnval(fndir(f,eye(m)),x),d,m)
является якобианом этой функции в этой точке (которая, для этой конкретной функции с скалярным значением, является ее градиентом, и она равна нулю в источник).
В качестве связанного примера следующие операторы строят график градиентов (хорошее приближение к) функции Франке в регулярном mesh:
xx = linspace(-.1,1.1,13); yy = linspace(0,1,11); [x,y] = ndgrid(xx,yy); z = franke(x,y); pp2dir = fndir(csapi({xx,yy},z),eye(2)); grads = reshape(fnval(pp2dir,[x(:) y(:)].'),... [2,length(xx),length(yy)]); quiver(x,y,squeeze(grads(1,:,:)),squeeze(grads(2,:,:)))
Вот получившийся график.
Функция в f
преобразуется в ppform, и производная по направлению его полиномиальных частей вычисляется формально и в одной векторной операции и снова складывается вместе, чтобы сформировать ppform производной по направлению функции в f
.