[Mathematica] eseguire calcoli con precisione macchina
Buona sera a tutti, vi faccio i complimenti per il sito (visto che è il mio primo msg su questo forum) mi è stato veramente molto d'aiuto..!
mi trovo in difficoltà con l'utilizzo del programma mathematica e i risultati che le funzioni mi restituiscono.
avrei bisogno di risultati con il massimo numero di cifre ottenibili, ma mathematica mi restituisce massimo 6 cifre per ogni risultato.
vi faccio un esempio, lavorando in matlab se scrivo:
ed ogni elemento della variabile "l" contiene 16 cifre che approssimano il numero.
se provo a fare la stessa cosa in mathematica:
ed l contiene elementi con sole 6 cifre!
esiste un comando tipo il "format long e" che dice al kernel di trattare i numeri con la massima precisione consentita?
spero di essere stato chiaro..anche se ne dubito un pò
aspetto vostre info..grazie per l'attenzione
mi trovo in difficoltà con l'utilizzo del programma mathematica e i risultati che le funzioni mi restituiscono.
avrei bisogno di risultati con il massimo numero di cifre ottenibili, ma mathematica mi restituisce massimo 6 cifre per ogni risultato.
vi faccio un esempio, lavorando in matlab se scrivo:
format long e; A = hilb(10); l = eigs(A) l = 1.751919670265178e+000 3.429295484835090e-001 3.574181627163927e-002 2.530890768670037e-003 1.287496142763671e-004 4.729689293123585e-006
ed ogni elemento della variabile "l" contiene 16 cifre che approssimano il numero.
se provo a fare la stessa cosa in mathematica:
A = Table[1/(1 + i + j), {i, 0, 9}, {j, 0, 9}]; l = N[Eigenvalues[A]] {1.75192, 0.34293, 0.0357418, 0.00253089, 0.00012875, 4.72969*10^-6, 1.22897*10^-7, 2.14744*10^-9, 2.26675*10^-11, 1.09315*10^-13}
ed l contiene elementi con sole 6 cifre!
esiste un comando tipo il "format long e" che dice al kernel di trattare i numeri con la massima precisione consentita?
spero di essere stato chiaro..anche se ne dubito un pò

aspetto vostre info..grazie per l'attenzione
Risposte
ok..grazie
sta cosa mi piace..
ma mettiamo il caso che io volessi indicare la precisione con una funzione non nativa di mathematica ma con una che ho scritto io..come ad esempio potrebbe essere l'algoritmo di forward substitution..dov'è che dovrei indircare la precisione?
scusate per la sintassi ma non so come scrivere la sommatoria..
modifica: la sommatoria dovrebbe essere questa: x[] = $(b[] - \sum_{j=1}^(i-1) a[[i,j]]*x[])/(a[[i,j]])$
ma all'interno del tag code non la visualizza..!

ma mettiamo il caso che io volessi indicare la precisione con una funzione non nativa di mathematica ma con una che ho scritto io..come ad esempio potrebbe essere l'algoritmo di forward substitution..dov'è che dovrei indircare la precisione?
ForwardSub[ a0_, b0_, n_ ] := Module[ { a = a0, b = b0, i, j , x}, x = Table[0, {n}]; For[ i = 1, i <= n, i++, x[[i]] = $(b[[i]] - \sum_{j=1}^(i-1) a[[i,j]]*x[[i]])/(a[[i,j]])$ ]; Return[x]; ];
scusate per la sintassi ma non so come scrivere la sommatoria..
modifica: la sommatoria dovrebbe essere questa: x[] = $(b[] - \sum_{j=1}^(i-1) a[[i,j]]*x[])/(a[[i,j]])$
ma all'interno del tag code non la visualizza..!
ok..scusate...dopo un pò di prove ho visto che funziona anche con le funzioni scritte a mano..
grazie di tutto...post del tutto inutile
ciao
grazie di tutto...post del tutto inutile

ciao
scusate se resuscito il post.
ma ho visto che le potenzialità di matematica sono elevatissime..solo che lo trovo abbastanza scomodo come linguaggio di programmazione.
ho trovato una funzione molto interessante: SetPrecision[f, precisione] che praticamente permette di impostare volta per volta la precisione con la quale deve essere effettuato un calcolo.
se non ho capito male la precisione di default è la MachinePrecision.
utilizzando SetPrecision posso aumentare la MachinePrecision, esempio:
il semplice conto Sqrt[2] * 45 mi restituisce come risultato 63.63961030678928 (praticamente 16 cifre)
se invece eseguo l'operazione in questo modo: SetPrecision[Sqrt[2] * 45, 20] restituisce il risultato 63.639610306789277196 con 20 cifre esatte!
dovendo effettuare molti calcoli diventa scomodo utilizzare SetPrecision[] ogni volta.
c'è un modo per rendere SetPrecision[] permanente per tutta la sessione di lavoro (e quindi per ogni calcolo che verrà effettuato???)
Grazie a tutti per l'attenzione
ma ho visto che le potenzialità di matematica sono elevatissime..solo che lo trovo abbastanza scomodo come linguaggio di programmazione.
ho trovato una funzione molto interessante: SetPrecision[f, precisione] che praticamente permette di impostare volta per volta la precisione con la quale deve essere effettuato un calcolo.
se non ho capito male la precisione di default è la MachinePrecision.
utilizzando SetPrecision posso aumentare la MachinePrecision, esempio:
il semplice conto Sqrt[2] * 45 mi restituisce come risultato 63.63961030678928 (praticamente 16 cifre)
se invece eseguo l'operazione in questo modo: SetPrecision[Sqrt[2] * 45, 20] restituisce il risultato 63.639610306789277196 con 20 cifre esatte!
dovendo effettuare molti calcoli diventa scomodo utilizzare SetPrecision[] ogni volta.
c'è un modo per rendere SetPrecision[] permanente per tutta la sessione di lavoro (e quindi per ogni calcolo che verrà effettuato???)
Grazie a tutti per l'attenzione