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.
fonte
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)
.Máximos, 68 bytes
É uma pena que eu não conheça Maxima, como conheço meus queridos C e Matlab. Mas vou tentar mesmo assim.
Exemplo de sessão usando o TeXmacs como intérprete do Maxima, principalmente para renderização matemática pura:
Pode muito bem haver maneiras melhores de fazer listas no Maxima (eu gostaria especialmente de fazer as funções aparecerem sem os marcadores de lista, []), mas não conheço o idioma o suficiente.
fonte
Ruby, 53 bytes
f
é indexado em 0,u
é indexado em 1. Experimente online!Cada linha ocupa uma linha como uma representação de matriz, como mostrado abaixo. Se não for compatível com as especificações, informe-me e eu o corrigirei.
fonte
Queijo Cheddar ,
7949 bytesAparentemente, um garfo desta resposta .
Para
3,2
devoluções:fonte
Geléia, 18 bytes
Experimente!
Dado (m, n) = (3, 2) , imprime (com espaços marcados como
·
:)fonte
C, 125 bytes:
Pega entrada como 2 inteiros separados por espaço
b y
e gera a Matriz Jacobiana comoy
seqüências deb
linhas separadas por vírgula .C It Online! (Ideone) ou Suite de Teste (Ideone)
fonte