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 y ao escolher o passo.
fac
Vetor de passos relativos; cada passo é fac(j) vezes o maior entre abs(y(j)) e thresh(j).
vectorized
Diferente de zero se F aceita várias colunas de y de uma vez.

Argumentos de saída

dFdy
A jacobiana n por n, em que a entrada (i, j) é a derivada da componente i de F em relação a y(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].

Veja também

ode45 ode15s odeset jacobian