Nehmen Sie den Vektor der Unbekannten und wenden Sie eine generische differenzierbare Funktion an . Der Jacobianer wird dann durch eine Matrix gegeben, so dass:
Nehmen wir zum Beispiel an m=3
und n=2
. Dann (mit 0-basierter Indizierung)
Der Jakobianer von f
ist dann
Das Ziel dieser Herausforderung ist es, diese Jacobi-Matrix zu drucken.
Eingang
Ihr Programm / Funktion sollte nehmen als Eingabe zwei positive ganze Zahlen sind m
und n
, die die Anzahl der Komponenten darstellen f
und u
jeweils. Die Eingabe kann von jeder gewünschten Quelle stammen (stdio, Funktionsparameter usw.). Sie können die Reihenfolge bestimmen, in der diese empfangen werden. Dies muss für jede Eingabe in Ihre Antwort konsistent sein (bitte in Ihrer Antwort angeben).
Ausgabe
Etwas, das die jakobianische Matrix darstellt. Diese Darstellung muss explizit alle Elemente der Jacobi-Matrix buchstabieren, aber die genaue Form jedes Begriffs ist eine Implementierung, die definiert ist, solange eindeutig ist, was und in Bezug auf was unterschieden wird, und jeder Eintrag in einer logischen Reihenfolge ausgegeben wird. Beispiel akzeptable Formen zur Darstellung einer Matrix:
- Eine Liste von Listen, wobei jeder Eintrag der äußeren Liste einer Zeile des Jacobian entspricht und jeder Eintrag der inneren Liste einer Spalte des Jacobian entspricht.
- Eine Zeichenfolge oder Textausgabe, bei der jede Zeile eine Zeile des Jacobian ist und jeder durch Trennzeichen getrennte Eintrag in einer Zeile einer Spalte des Jacobian entspricht.
- Einige grafische / visuelle Darstellung einer Matrix. Beispiel: Was wird von Mathematica bei Verwendung des
MatrixForm
Befehls angezeigt ? - Ein anderes dichtes Matrixobjekt, bei dem jeder Eintrag bereits im Speicher gespeichert ist und abgefragt werden kann (dh Sie können kein Generatorobjekt verwenden). Ein Beispiel wäre, wie Mathematica intern ein Matrix-Objekt darstellt
Beispiel für Eingabeformate:
- Eine Zeichenfolge des Formulars
d f_i/d u_j
, wobeii
undj
Ganzzahlen sind. Bsp. :d f_1/d u_2
. Beachten Sie, dass diese Leerzeichen zwischend
undf_1
oderx_2
optional sind. Zusätzlich sind die Unterstriche optional. - Eine Zeichenfolge der Form
d f_i(u_1,...,u_n)/d u_j
oderd f_i(u)/d u_j
. Das heißt, die Eingabeparameter der Funktionskomponentef_i
sind optional und können entweder explizit geschrieben oder in kompakter Form belassen werden. - Eine formatierte grafische Ausgabe. Beispiel: Was Mathematica druckt, wenn Sie den Ausdruck auswerten
D[f_1[u_,u_2,...,u_n],u_1]
Sie können den Startindex auswählen u
und f
angeben (bitte in Ihrer Antwort angeben). Die Ausgabe kann an eine beliebige Senke erfolgen (Standard, Rückgabewert, Ausgabeparameter usw.).
Testfälle
Die folgenden Testfälle verwenden die Konvention m,n
. Indizes werden 0-basiert angezeigt.
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]]
Wertung
Das ist Code Golf; Der kürzeste Code in Bytes gewinnt. Standardlücken sind verboten. Sie dürfen alle gewünschten Einbauten verwenden.
quelle
f=
, wie dies hier üblich ist. R gibt auch das letzte in einer Funktion ausgewertete Element zurück, sodass Sie esv
stattdessen anstelle von verwenden könnenreturn(v)
.Maxima, 68 Bytes
Es ist schade, dass ich Maxima nicht so kenne wie mein liebes C und Matlab. Aber ich werde es trotzdem versuchen.
Beispielsitzung mit TeXmacs als Maxima-Interpreter, hauptsächlich für ordentliches mathematisches Rendern:
Es mag in Maxima durchaus bessere Möglichkeiten geben, Listen und dergleichen zu erstellen (ich möchte insbesondere, dass die Funktionen ohne die Listenmarkierungen angezeigt werden, []), aber ich kenne die Sprache nicht gut genug.
quelle
Ruby, 53 Bytes
f
ist 0-indiziert,u
ist 1-indiziert. Probieren Sie es online aus!Jede Zeile belegt eine Zeile als Array-Darstellung (siehe unten). Wenn es nicht den Spezifikationen entspricht, lassen Sie es mich bitte wissen und ich werde es beheben.
quelle
Cheddar ,
7949 BytesAnscheinend eine Gabelung dieser Antwort .
Für
3,2
Rücksendungen:quelle
Gelee, 18 Bytes
Versuch es!
Bei (m, n) = (3, 2) wird gedruckt (mit Leerzeichen markiert als
·
:)quelle
C, 125 Bytes:
Nimmt die Eingabe als 2 durch Leerzeichen getrennte Ganzzahlen
b y
und gibt die Jacobi-Matrix als durchy
Kommas getrennte Zeichenfolgen inb
Zeilen aus.C Es online! (Ideone) oder Testsuite (Ideone)
quelle