Qualche indirizzo forse interessante

http://www.elegio.it/calcolatrice/archivio-utili-201308.html      http://www.elegio.it/calcolatrice/
http://www.elegio.it/doc/tn/lumodulare.html ( esempi di funzioni di soluzione di sistemi lineari )
http://www.elegio.it/doc/tridia/sorgenti/alin-20130106.html Libreria di algebra lineare del 2008 con file leggermente ristrutturato nel gennaio 2013
http://www.elegio.it/calcolatrice/quarto-grado+.html per promemoria radici di terzo e quarto grado
http://www.elegio.it/calcolatrice/autovalorimatrice3simmetrica.html
http://www.elegio.it/doc/tn/lumodulare.html Contiene la funzione per risolvere sistemi sia in virgola mobile che in algebra modulare ( sfruttando l'algoritmo di Euclide per il calcolo dell'inverso modulare di un numero intero )

Per esempio: Scrivere qualcosa e cliccarci sopra . Qui ho definito prima la funzione potenza(a,b) che dunque posso usare...

...

Come dedurre una permutazione da una stringa di caratteri qualsiasi.

Innanzi tutto va scelto quale è il primo dei simboli usati mentre i seguenti sono i consecutivi nella tabella Unicode e quanti sono i caratteri che rappresentano simboli diversi. Ad esempio il primo simbolo usato potrebbe essere "1" oppure "A" oppure "a" ma nulla vieta di usare simboli greci partendo dal carattere alfa "α" o partendo dall'alef ebraica, in Unicode il carattere 64289 ossia "ﬡ" ( http://it.wikipedia.org/wiki/Alfabeto_ebraico ) o quello arabo partendo dal carattere 1575 "ا" , "ب", "ة", "ت", "ت" che scopro che il browser scrive in ordine inverso e strano .

...

...

Notare che la funzione usata fornisce anche il segno della permutazione ossia il segno del corrispondente elemento del simbolo di Levi Civita ( http://it.wikipedia.org/wiki/Simbolo_di_Levi-Civita ) e, in sintesi, ricordo che il simbolo di Levi-Civita è un vero tensore se il valore assoluto del determiante del tensore metrico ( una matrice di funzioni delle coordinate ) a cui si riferisce, vale 1 e ricordo che il rango di questo tensore è uguale al numero di dimensioni dello spazio a cui si riferisce per cui in Relatività Speciale e in Relatività Generale, dove l'ordine del tensore metrico è 4, il rango del simbolo di Levi Civita, vero tensore se il tensore metrico ha valore assoluto del suo determinante uguale ad 1, ha rango 4 ossia possiede 256 elementi, molti dei quali di valore zero.

Caratteristiche del tensore dedotte dalla sua lista di memorizzazione

Definisco qui una regola, un po' sperperosa di memoria, che consente di definire le due fondamentali caratteristiche di un tensore ossia il suo ordine, ovvero la dimensione dello spazio a cui si riferisce, e il suo rango, ovvero l'esponente dell'ordine che permette di esprimere ( ordinerango ) il numero massimo di elementi indipendenti del tensore.

Fino a pochi anni fa era importantissimo economizzare la memoria del calcolatore perché la memoria era poca, espressa addirittura da pochi milioni di byte ovvero ottetti di bit. L'esigenza rimane se si debbono trattare problemi di enorme complessità magari dovendo ricorre a supercalcolatori o se si vuole affrontare un problema impegnativo pur avendo a disposizione poche risorse ossia calcolatori datati o poco costosi. Tuttavia ormai la memoria disponibile è enorme e consente un suo ragionevole sperpero usato per semplificare i programmi di calcolo e/o renderli meno esposti ad errori di programmazione.

In mindimor il primo argomento rappresenta la base ovvero l'ordine del tensore e il secondo rappresenta il rango ed il risultato è la lunghezza minima della lista necessaria per memorizzare il tensore.

...

In sintesi considerando le basi di uso più frequente ossia 2,3 e 4 ed i ranghi più usati ossia lo 0 ovvero quello dello scalare, 1 ossia quello dei vettori, 2 ossia quello delle matrici, 3 ossia quello dei simboli di connessione, 4 ossia il tensore di curvatura...
ordine\rango 0  1  2   3  4  5 
223,46,812,16,2024,32,40,5648,60,64..
32510,1428,36,44,52..88,104,..272,304,..
42718,2268,76,84,..264,280,..1040,1072,..
52926,30,34132,140,..632,648,..3152,3184,..
621138,42,46220,228,..1304,1320,..7792,7284,..

In pratica si opera in questo modo basandosi sul fatto che ogni intero è fattorizzabile in un unico modo in una sequenza di primi ordinati in ordine crescente ed elevati, ciascuno ad un suo personale esponente. Tra tutti i numeri primi ha un carattere speciale il numero 2 che è il più piccolo dei primi. Attribuisco all'esponente del due un ruolo speciale... :

  1. La potenza di due intera e positiva per la quale è esattamente divisibile la lunghezza della lista rappresenta il rango del tensore diminuito di una unità.
  2. Se la lunghezza della lista è esattamente una potenza di 2, l'ordine del tensore è 2 e il rango del tensore è l'esponente di 2 che permette di ottenere mezza lunghezza della lista ossia l'esponente di 2 diminuito di uno. Notare però che una pura potenza di 2 è ammessa come lunghezza di una lista ma non è una lunghezza ottimale ossia minima per quel tensore di dato ordine e rango !
  3. Se la lunghezza della lista è un numero dispari il rango è 1 ossia il tensore è un vettore e l'ordine è la lunghezza della lista aumentata di 1 e divisa per due.
  4. Se la lunghezza della lista non è esattamente una potenza di 2, il maggiore intero che elevato al rango approssima per difetto la lunghezza della lista rappresenta l'ordine del tensore ossia il numero di dimensioni del suo spazio di definizione. Notare che l'ordine può essere un potenza di 2, come ad esempio 4, perché, anche se divisibile per due, è determinato dai fattori primi dispari della lunghezza della lista.

Data questa regola ci si potrebbe domandare se l'attribuzione di un ruolo particolare al numero 2 è una scelta arbitraria o se è una scelta obbligata. Si tratta di una scelta resa obbligatoria dalla ultima regola ossia usare come ordine del tensore l'intero che, elevato al rango del tensore, approssima meglio per difetto la lunghezza della lista.

In effetti sarebbe possibile usare 3 come primo usato per memorizzare il rango ma... l'uso di 3 richiede, per tensori di rango maggiore di 1, l'uso di liste più lunghe di quelle necessarie quando si usa 2.

Per primi grossi, poi, ossia da 5 in su, si ha, oltre ad un forte spreco di memoria, anche l'impossibilità di definire la lunghezza di alcuni tipi di tensori e dunque l'uso di primi diversi da 2 e da 3 non è assolutamente possibile.

Insomma, l'uso di 2 rappresenta la scelta ottimale.

Nella kebaserango l'unico argomento rappresenta la lunghezza della lista da cui si vuole dedurre la base ossia l'ordine del tensore, ed il rango del tensore. Se la lunghezza della lista non fosse la minima necessaria viene stampata anche la lunghezza minima per memorizzare il tensore di quella stessa base e rango.

... 

Ecco una sequenza della traduzione delle lunghezze pari della lista; quelle dispari individuano vettori ossia tensori di rango 1 e dunque il dedurre l'ordine è banale.

Notare che l'unica lista che individua uno scalare è quella lunga 2 per cui, anche nel caso di uno scalare si ha a disposizione un elemento usabile per info sulla natura dello scalare.

... ATTENZIONE ! ... Javascript non attivato... Per usare questo documento di studio bisogna farlo funzionare !...

La critica a questo metodo è che spreca un po' di memoria soprattutto nel caso di tensori di rango 1 dato che obbliga ad usare una lunghezza dispari quasi doppia del necessario. Ma attualmente, con l'enorme disponibilità di memoria a disposizione, a mio parere dovrebbe prevalere l'apprezzamento della semplicità del metodo di poter caratterizzare un qualsiasi tensore solo in base alla lunghezza della lista dei suoi elementi.

sperimenta la ricerca della lunghezza minima...

... 

sperimenta l'individuazione della base e del rango...

... 

altra prova in casi in cui la lunghezza usata non è la minima ammissibile per un dato tipo di tensore...

... 

Effettuare una permutazione specificata da un solo numero intero

Assumo come convenzione che una qualsiasi lista possa essere trattata come un tensore di rango e ordine determinati dalla lunghezza della lista stessa secondo le regole messe a punto qui sopra....

La lista non deve essere tanto lunga o di lunghezza scorretta da produrre errori nel calcolo del rango e dell'ordine.

Ovviamente sarebbe illogico, perché dispendioso, usare liste più lunghe del necessario per cui il rischio di fraintendere il rango e l'ordine del tensore è piccolo...

Altra regola motivata da considerazione di traducibità degli algoritmi è il cercare di non usare mai, se esiste, l'elemento 0 della lista. Si ottiene questo memorizzando i dati del tensore in modo che l'ultimo dato sia anche l'ultimo elemento della lista. Quando si vuole, con questa regola, basta usare per scopi di commento uno degli elementi ridondanti della lista, causato dalla regola assunta per determinare il rango e l'ordine del tensore. Se si vuole, si può usare l'elemento 0 nei linguaggi di programmazione in cui esiste ( Javascript, C++ etc.) ma già questa scelta provoca qualche problema di traduzione delle function nei linguaggi in cui la numerazione della lista parte da 1 (Mathematichese, Maximese, Fortran etc..) per cui ... meglio non usare mai l'elemento zero della lista che potrebbe in certi ambienti non esistere.

Impostazione orientata agli oggetti: un tensore di rango due è un vettore di vettori, un tensore di rango tre è un vettore di vettori di vettori, un tensore di rango quattro è un vettore di vettori di vettori di vettori ... etc.

Con questa impostazione, possibile praticamente in tutti i linguaggi di programmazione moderni, a partire dal C++, ( in informatica è detta impostazione orientata agli oggetti ) ogni tensore diventa una specie di matrioska russa http://en.wikipedia.org/wiki/Matryoshka_doll o, meglio, un insieme di scatole cinesi http://en.wikipedia.org/wiki/Chinese_boxes e le funzioni si possono semplificare rendendole ricorsive ossia una funzione può richiamare se stessa con argomenti dedicati ad una parte degli argomenti della funzione che utilizza se stessa...

 
In xpermuta gli argomenti sono: numeropermutazione, base, rango. Normalmente il numero della permutazione ha tante cifre quanto il numero del rango.
...

I dati del tensore sempre il più in fondo possibile nella lista sovradimensionata che lo contiene

Avendo calcolato la lista degli indici di un dato tipo di permutazione di un dato tipo di tensore posso permutare qualsiasi tensore dello stesso tipo usando la lista precalcolata.

Basta scrivere, usando la lista permuta(...):
 
  for(k=0;permuta.length>k;k++)tpermutato[k]=toriginale[permuta[k]];

per cui, mano a mano che si alloca memoria per la lista che deve contenere il nuovo tensore, si va a prendere il giusto elemento che deve occupare la j_esima posizione nella lista e il tensore è memorizzato in modo che il suo ultimo elemento sia anche l'ultimo elemento della lista di lunghezza minima per memorizzare il tensore secondo le regole prefissate.

 
In indici gli argomenti sono la posizione della lista partendo da 0, la base usata e il numero di cifre che corrisponde al rango del tensore a cui ci si riferisce.
... 

 
In indove(...) gli argomenti sono i seguenti: il primo è la lista degli indici del tensore, il secondo è la lista della permutazione voluta ( enumera le posizioni degli indici da 1 al rango essendo 1,2,..,rango la permutazione identità ossia senza spostamenti dei dati ) e il terzo è la base ossia le dimensioni dello spazio in cui viene usato il tensore. Notare che le due liste dei due primi argomenti debbono avere uguale lunghezza. Notare che il primo indice del tensore è quello che gira più lentamente e l'ultimo indice è quello che varia più velocemente ossia individua elementi contigui nella lista che contiene il tensore.
... 

 
 Qui si fa un controllo di come e se si ottiene la posizione originaria nella lista quando si fa la permutazione identica ( 12 o 123 o 1234 etc. a seconda del rango del tensore ossia vettore di vettore, vettore di vettore di vettore etc. ).
... 

...Javascript non attivato !...

http://www.elegio.it/calcolatrice/
http://www.elegio.it/omnia/ht/ l'indice dei file dedicati a questi argomenti.

Per fare calcoli vari...

...
Risultato
...nessun calcolo ancora fatto...

...
Risultato
...nessun calcolo ancora fatto...

...
Risultato
...nessun calcolo ancora fatto...

...
Risultato
...nessun calcolo ancora fatto...

...
Risultato
...nessun calcolo ancora fatto...

...
Risultato
...nessun calcolo ancora fatto...

La funzione acasot(base,rango) genera tensori di ordine base e di rango rango. Dato che la lista che contiene il tensore può essere molto lunga, consiglio di ridefinire la variabile non_oltre ma poi di riassegnarle un valore ragionevole, come 25 o poco di più.
Risultato
...nessun calcolo ancora fatto...

Qui fare esperimenti sull'uso di xpermuta(sv,base,rango) che, a sua volta fa uso di mindimor(base,rango), ossiapermuta(sv,rango), indici(j,base,rango), indici(vind,veraper,base). Inoltre mette alla prova la permutazione effettuata applicandola ad un tensore creato a caso...
Risultato
...nessun calcolo ancora fatto...

Altri esperimenti sull'uso di xpermuta(sv,base,rango) che mette alla prova la permutazione effettuata applicandola ad un tensore creato a caso...
Risultato
...nessun calcolo ancora fatto...

Altri esperimenti sull'uso di xpermuta(sv,base,rango) facendo permutazioni circolari su tensori di rango tre per cui alla terza permutazione si deve ottenere quella di partenza
Risultato
...nessun calcolo ancora fatto...

Altri esperimenti sull'uso di xpermuta(sv,base,rango) facendo permutazioni circolari su tensori di rango quattro per cui alla quarta permutazione si deve ottenere quella di partenza
Risultato
...nessun calcolo ancora fatto...

In questa immagine SVG uso l'elemento defs unito a symbol e ad use e scrivo testi grandi e belli.. {circle r="300" cx="30000" cy="18000" fill="red" /}