numjac
Matriz jacobiana numérica de uma função, por diferenças finitas.
Categoria: Other public functions: funfun
Sintaxe
[dFdy, fac] = numjac(F, t, y, Fty, thresh, fac, vectorized)
Estima a matriz de derivadas parciais de F(t, y) em relação a y.
Descrição
numjac perturba uma componente de y por vez, reavalia F e divide a variação pelo passo. É o que solvers de EDOs rígidas precisam quando não há uma jacobiana analítica. O passo é relativo, então fac deve ser pequeno, perto de 1e-7, para um resultado preciso; um valor grande dá uma inclinação grosseira, não a derivada.
Para um F linear a diferença finita é exata, a menos de arredondamento.
Argumentos de entrada
F- Function handle
F(t, y)que retorna um vetor coluna. t, y- Ponto onde a jacobiana é desejada: um tempo escalar e um vetor coluna.
Fty- O valor
F(t, y), já calculado, para poupar uma avaliação. thresh- Vetor de limites inferiores para o tamanho de cada componente de
yao escolher o passo. fac- Vetor de passos relativos; cada passo é
fac(j)vezes o maior entreabs(y(j))ethresh(j). vectorized- Diferente de zero se
Faceita várias colunas deyde uma vez.
Argumentos de saída
dFdy- A jacobiana
nporn, em que a entrada(i, j)é a derivada da componenteideFem relação ay(j). fac- Passos para reaproveitar na próxima chamada.
Exemplo
Jacobiana de um sistema de duas variáveis
F = @(t, y) [y(1)*y(2); y(1) + y(2)];
y0 = [2; 3];
J = numjac(F, 0, y0, F(0, y0), [1e-6; 1e-6], 1e-7*ones(2, 1), 0);
disp(round(J, 3))
Saída
3 2
1 1
A jacobiana exata em (2, 3) é [3 2; 1 1].