Prenez le vecteur des inconnues et appliquez une fonction générique différenciable . Le jacobien est alors donné par une matrice telle que:
Par exemple, supposez m=3
et n=2
. Ensuite (en utilisant l'indexation basée sur 0)
Le jacobien de f
est alors
Le but de ce défi est d'imprimer cette matrice jacobienne.
Contribution
Votre programme / fonction doit prendre en entrée deux entiers positifs m
et n
, qui représentent le nombre de composants de f
et u
respectivement. L'entrée peut provenir de n'importe quelle source souhaitée (stdio, paramètre de fonction, etc.). Vous pouvez dicter l'ordre dans lequel ceux-ci sont reçus, et cela doit être cohérent pour toute entrée dans votre réponse (veuillez préciser dans votre réponse).
Production
Quelque chose qui représente la matrice jacobienne. Cette représentation doit énoncer explicitement tous les éléments de la matrice jacobienne, mais la forme exacte de chaque terme est définie par l'implémentation tant qu'il est sans ambiguïté ce qui est différencié et par rapport à quoi, et chaque entrée est sortie dans un ordre logique. Exemples de formes acceptables pour représenter une matrice:
- Une liste de listes où chaque entrée de la liste extérieure correspond à une ligne du jacobien, et chaque entrée de la liste intérieure correspond à une colonne du jacobien.
- Une chaîne ou une sortie textuelle où chaque ligne est une ligne du jacobien et chaque entrée séparée par un délimiteur dans une ligne correspond à une colonne du jacobien.
- Quelques représentations graphiques / visuelles d'une matrice. Exemple: ce qui est montré par Mathematica lors de l'utilisation de la
MatrixForm
commande - Un autre objet de matrice dense où chaque entrée est déjà stockée en mémoire et peut être interrogée (c'est-à-dire que vous ne pouvez pas utiliser un objet générateur). Un exemple serait la façon dont Mathematica représente en interne un objet Matrix
Exemples de formats d'entrée:
- Une chaîne de la forme
d f_i/d u_j
, oùi
etj
sont des entiers. Ex:d f_1/d u_2
. Notez que ces espaces entred
etf_1
oux_2
sont facultatifs. De plus, les traits de soulignement sont également facultatifs. - Une chaîne de la forme
d f_i(u_1,...,u_n)/d u_j
oud f_i(u)/d u_j
. Autrement dit, les paramètres d'entrée du composant fonctionf_i
sont facultatifs et peuvent être explicitement expliqués ou laissés sous forme compacte. - Une sortie graphique formatée. Ex.: Ce que Mathematica imprime lorsque vous évaluez l'expression
D[f_1[u_,u_2,...,u_n],u_1]
Vous pouvez choisir pour quoi l'index de départ u
et f
sont (veuillez préciser dans votre réponse). La sortie peut être vers n'importe quel récepteur souhaité (stdio, valeur de retour, paramètre de sortie, etc.).
Cas de test
Les cas de test suivants utilisent la convention m,n
. Les index sont affichés sur la base de 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]]
Notation
C'est le golf de code; le code le plus court en octets gagne. Les failles standard sont interdites. Vous êtes autorisé à utiliser toutes les fonctions intégrées souhaitées.
f=
-à- dire , comme c'est la pratique courante ici. R renvoie également la dernière chose évaluée dans une fonction, vous pouvez donc simplement l'utiliser à lav
place dereturn(v)
.