未知数のベクトルを取り、いくつかの一般的な微分可能関数を適用します。ヤコビアンは、次いで行列によって与えられるように。
たとえば、と仮定m=3
しn=2
ます。次に(0ベースのインデックスを使用)
のヤコビアンf
は
この課題の目標は、このヤコビ行列を出力することです。
入力
プログラム/関数は、2つの正の整数m
とを入力として受け取る必要n
がf
ありu
ます。これらはそれぞれとのコンポーネントの数を表します。入力は、任意のソース(stdio、関数パラメーターなど)から取得できます。あなたはこれらが受け取られる順序を指示することができ、これはあなたの答えへのどんな入力でも一貫していなければなりません(あなたの答えで指定してください)。
出力
ヤコビ行列を表すもの。この表現は、ヤコビ行列のすべての要素を明示的に記述する必要がありますが、各項の正確な形式は、何が区別され、何が明確であり、すべてのエントリが論理的な順序で出力される限り、実装で定義されます。マトリックスを表すための受け入れ可能なフォームの例:
- 外部リストの各エントリがヤコビアンの行に対応し、内部リストの各エントリがヤコビアンの列に対応するリストのリスト。
- 各行がヤコビアンの行であり、行の各区切り文字で区切られたエントリがヤコビアンの列に対応する文字列またはテキスト出力。
- マトリックスのグラフィック/ビジュアル表現。例:
MatrixForm
コマンドを使用したときにMathematicaによって表示されるもの - 他のいくつかの密行列オブジェクト。すべてのエントリは既にメモリに格納されており、クエリできます(つまり、ジェネレータオブジェクトを使用できません)。例としては、Mathematicaが内部的にMatrixオブジェクトをどのように表すかが挙げられます
エントリ形式の例:
- 形式の文字列。
d f_i/d u_j
ここでi
、およびj
は整数です。例:d f_1/d u_2
。d
とf_1
またx_2
はの間のこれらのスペースはオプションであることに注意してください。また、アンダースコアもオプションです。 d f_i(u_1,...,u_n)/d u_j
またはの形式の文字列d f_i(u)/d u_j
。つまり、関数コンポーネントの入力パラメーターf_i
はオプションであり、明示的に指定するか、コンパクトな形式で残すことができます。- フォーマットされたグラフィック出力。例:式を評価したときにMathematicaが出力するもの
D[f_1[u_,u_2,...,u_n],u_1]
開始インデックスとその目的u
を選択できますf
(回答で指定してください)。出力は、必要なシンク(stdio、戻り値、出力パラメーターなど)への出力です。
テストケース
次のテストケースでは、この規則を使用していm,n
ます。インデックスは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]]
得点
これはコードゴルフです。バイト単位の最短コードが優先されます。標準の抜け穴は禁止されています。必要なビルトインを使用できます。
f=
ここでは一般的な方法として、関数名を削除することで数バイトを節約できます。Rは関数で評価された最後のものも返すので、のv
代わりに使用できますreturn(v)
。