Costruisci la matrice giacobina


10

Prendi il vettore di incognite inserisci qui la descrizione dell'immaginee applica alcune funzioni generiche differenziabili inserisci qui la descrizione dell'immagine. Il giacobino è quindi dato da una matrice inserisci qui la descrizione dell'immaginetale che:

inserisci qui la descrizione dell'immagine

Ad esempio, supponiamo m=3e n=2. Quindi (utilizzando l'indicizzazione basata su 0)

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Il giacobino di fè allora

inserisci qui la descrizione dell'immagine

L'obiettivo di questa sfida è stampare questa matrice giacobina.

Ingresso

Il tuo programma / funzione dovrebbe assumere come input due numeri interi positivi me n, che rappresentano il numero di componenti di fe urispettivamente. L'ingresso può provenire da qualsiasi sorgente desiderata (stdio, parametro di funzione, ecc.). È possibile dettare l'ordine in cui questi vengono ricevuti e questo deve essere coerente per qualsiasi input alla risposta (specificare nella risposta).

Produzione

Qualcosa che rappresenta la matrice giacobina. Questa rappresentazione deve esplicitare tutti gli elementi della matrice giacobina, ma la forma esatta di ogni termine è l'implementazione definita fintanto che non è chiaro ciò che viene differenziato e rispetto a ciò, e ogni voce viene emessa in un ordine logico. Esempi di forme accettabili per rappresentare una matrice:

  1. Un elenco di elenchi in cui ciascuna voce dell'elenco esterno corrisponde a una riga del giacobino e ciascuna voce dell'elenco interno corrisponde a una colonna del giacobino.
  2. Una stringa o output testuale in cui ogni riga è una riga del giacobino e ogni delimitatore separato in una riga corrisponde a una colonna del jacobiano.
  3. Qualche rappresentazione grafica / visiva di una matrice. Esempio: cosa viene mostrato da Mathematica quando si usa il MatrixFormcomando
  4. Qualche altro oggetto matrice denso in cui ogni voce è già archiviata in memoria e può essere interrogata (cioè non è possibile utilizzare un oggetto generatore). Esempio potrebbe essere il modo in cui Mathematica rappresenta internamente un oggetto Matrix

Esempi di formati di immissione:

  1. Una stringa del modulo d f_i/d u_j, dove ie jsono numeri interi. Es: d f_1/d u_2. Si noti che questi spazi tra de f_1o x_2sono opzionali. Inoltre, i trattini bassi sono facoltativi.
  2. Una stringa del modulo d f_i(u_1,...,u_n)/d u_jo d f_i(u)/d u_j. Ossia, i parametri di input del componente funzione f_isono facoltativi e possono essere esplicitamente indicati o lasciati in forma compatta.
  3. Un output grafico formattato. Es .: cosa stampa Mathematica quando valuti l'espressioneD[f_1[u_,u_2,...,u_n],u_1]

È possibile scegliere quale sia l'indice iniziale ue fquali (specificare nella risposta). L'output può essere su qualsiasi sink desiderato (stdio, valore di ritorno, parametro di output, ecc.).

Casi test

I seguenti casi di test usano la convenzione m,n. Gli indici vengono visualizzati in base 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]]

punteggio

Questo è il codice golf; vince il codice più breve in byte. Sono vietate le scappatoie standard. È consentito utilizzare qualsiasi componente incorporato desiderato.

Risposte:


4

Python, 63 byte

lambda m,n:["df%d/du%%d "%i*n%tuple(range(n))for i in range(m)]

Per m=3,n=2, uscite

['df0/du0 df0/du1 ', 'df1/du0 df1/du1 ', 'df2/du0 df2/du1 ']

La formattazione della stringa è più corta di 1 byte rispetto alla più ovvia

lambda m,n:[["df%d/du"%i+`j`for j in range(n)]for i in range(m)]

3

R, 93 78 byte

function(M,N){v=vector();for(i in 1:N){v=cbind(v,paste0("df",1:M,"/du",i))};v}

La numerazione è basata su 1.

-15 byte grazie a @AlexA. remake!


1
È possibile salvare alcuni byte rimuovendo il nome della funzione, ad esempio f=, poiché è pratica comune qui. R restituisce anche l'ultima cosa valutata in una funzione, quindi puoi semplicemente usare vinvece di return(v).
Alex A.

1
Dovresti anche essere in grado di salvare i byte indicizzando da 1 anziché 0, il che è consentito dall'OP.
Alex A.

@AlexA. Osservazioni molto interessanti, grazie mille!
Frédéric,

Il piacere è tutto mio. :)
Alex A.

3

Maxima, 68 byte

Peccato che non conosca Maxima come conosco i miei cari C e Matlab. Ma ci proverò comunque.

f(m,n):=(x:makelist(x[i],i,m),g:makelist(g[i](x),i,n),jacobian(g,x))

Sessione di esempio che utilizza TeXmacs come interprete Maxima, principalmente per un accurato rendering matematico:

Sessione Maxima in TeXmacs

Potrebbero esserci dei modi migliori per creare elenchi e simili in Maxima (mi piacerebbe in particolare far apparire le funzioni senza i marcatori di elenco, []), ma non conosco abbastanza bene la lingua.


1

Rubino, 53 byte

fè 0 indicizzato, u1 indice. Provalo online!

->m,n{m.times{|i|p (1..n).map{|j|"d f#{i}/d u#{j}"}}}

Ogni riga occupa una riga come rappresentazione di matrice come mostrato di seguito. Se non è conforme alle specifiche, per favore fatemi sapere e lo risolverò.

["d f0/d u1", "d f0/d u2", "d f0/d u3"]
["d f1/d u1", "d f1/d u2", "d f1/d u3"]

1

Cheddar , 79 49 byte

m->n->(|>m).map(i->(|>n).map(j->"df%d/du%d"%i%j))

Apparentemente un fork di questa risposta .

Per i 3,2resi:

[["df0/du0", "df0/du1", "df0/du2"], ["df1/du0", "df1/du1", "df1/du2"]]

0

Gelatina, 18 byte

ps⁴’“ df“/du”ż$€€G

Provalo!

Dato (m, n) = (3, 2) , stampa (con spazi contrassegnati come ·:)

·df0/du0·df0/du1
·df1/du0·df1/du1
·df2/du0·df2/du1

0

C, 125 byte:

main(w,y,b,q){scanf("%d %d",&w,&y);for(b=0;b<w;b++){for(q=0;q<y;q++)printf("d f%d/du u%d%s",b,q,q<y-1?", ":"");printf("\n");}}

Prende l'input come 2 numeri interi separati da spazio b ye genera la matrice giacobina come ystringhe separate da virgola su blinee.

C Online! (Ideone) o Test Suite (Ideone)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.