fndir
Derivada direccional de una función
Sintaxis
df = fndir(f,y)
Descripción
df = fndir(f,y) es el formato ppform de la derivada direccional de la función f en f, en la dirección del vector (columna) y. Esto significa que df describe la función .
Si y es una matriz con n columnas y f tiene el valor d, la función de df tiene el valor prod(d)*n. Su valor en x, transformado para que tenga el tamaño [d,n], en su columna número j, cuenta con la derivada direccional de f en x en la dirección de la columna número j de y. Si prefiere df para reflejar explícitamente el tamaño real de f, utilice en su lugar
df = fnchg( fndir(f,y), 'dim',[fnbrk(f,'dim'),size(y,2)] );
Puesto que fndir se basa en el formato ppform de la función en f, no funciona para funciones racionales ni para funciones en el formato stform.
Ejemplos
Por ejemplo, si f describe una función con valor de vector d m-variada y x es un punto en su dominio, por ejemplo, con su formato particular ppform f que describe un polinomio bilineal escalar,
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)
es la matriz jacobiana de esa función en ese punto (que, para esta función particular con valor escalar, es su gradiente y es cero en el origen).
Como ejemplo relacionado, las siguientes declaraciones representan los gradientes de (una buena aproximación a) la función Franke en una malla regular:
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,:,:)))
A continuación se muestra la gráfica resultante.

Algoritmos
La función en f se convierte al formato ppform y se calcula la derivada direccional de sus piezas polinomiales formalmente y en una sola operación vectorial, y se vuelven a unir para obtener el formato ppform de la derivada direccional de la función en f.