Pegue o vetor de incógnitas e aplique alguma função diferenciável genérica . O jacobiano é então dado por uma matriz tal que:
Por exemplo, suponha m=3
e n=2
. Então (usando a indexação baseada em 0)
O jacobiano de f
é então
O objetivo deste desafio é imprimir essa matriz jacobiana.
Entrada
Seu programa / função deve ter como entrada dois números inteiros positivos m
e n
, que representam o número de componentes de f
e u
respectivamente. A entrada pode vir de qualquer fonte desejada (stdio, parâmetro de função, etc.). Você pode ditar a ordem em que eles são recebidos, e isso deve ser consistente para qualquer entrada na sua resposta (especifique na sua resposta).
Resultado
Algo que representa a matriz jacobiana. Essa representação deve explicitar explicitamente todos os elementos da matriz jacobiana, mas a forma exata de cada termo é a implementação definida, desde que não seja ambíguo o que está sendo diferenciado e com relação ao que, e toda entrada é emitida em uma ordem lógica. Exemplos de formas aceitáveis para representar uma matriz:
- Uma lista de listas em que cada entrada da lista externa corresponde a uma linha do jacobiano e cada entrada da lista interna corresponde a uma coluna do jacobiano.
- Uma sequência de caracteres ou saída de texto em que cada linha é uma linha do jacobiano e cada entrada separada por delimitador em uma linha corresponde a uma coluna do jacobiano.
- Alguma representação gráfica / visual de uma matriz. Exemplo: o que é mostrado pelo Mathematica ao usar o
MatrixForm
comando - Algum outro objeto de matriz densa, onde todas as entradas já estão armazenadas na memória e podem ser consultadas (ou seja, você não pode usar um objeto gerador). Exemplo seria como o Mathematica representa internamente um objeto Matrix
Formatos de entrada de exemplo:
- Uma cadeia de caracteres do formulário
d f_i/d u_j
, ondei
ej
são números inteiros. Ex:d f_1/d u_2
. Observe que esses espaços entred
ef_1
oux_2
são opcionais. Além disso, os sublinhados também são opcionais. - Uma sequência do formulário
d f_i(u_1,...,u_n)/d u_j
oud f_i(u)/d u_j
. Ou seja, os parâmetros de entrada do componente de funçãof_i
são opcionais e podem ser explicitamente explicitados ou deixados em formato compacto. - Uma saída gráfica formatada. Ex .: o que o Mathematica imprime quando você avalia a expressão
D[f_1[u_,u_2,...,u_n],u_1]
Você pode escolher qual é o índice inicial u
e o que f
é (especifique na sua resposta). A saída pode estar em qualquer coletor desejado (estado, valor de retorno, parâmetro de saída, etc.).
Casos de teste
Os seguintes casos de teste usam a convenção m,n
. Os índices são mostrados com base em 0.
1,1
[[d f0/d u0]]
2,1
[[d f0/d u0],
[d f1/d u0]]
2 2
[[d f0/d u0, d f0/d u1],
[d f1/d u0, d f1/d u1]]
1,2
[[d f0/d u0, d f0/d u1]]
3,3
[[d f0/d u0, d f0/d u1, d f0/d u2],
[d f1/d u0, d f1/d u1, d f1/d u2],
[d f2/d u0, d f2/d u1, d f2/d u2]]
Pontuação
Isso é código de golfe; o código mais curto em bytes vence. As brechas padrão são proibidas. Você tem permissão para usar quaisquer embutidos desejados.
f=
, como é prática comum aqui. R também retorna a última coisa avaliada em uma função, para que você possa usar emv
vez dereturn(v)
.