Производная функции по направлению
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.