Pagina 1 di 1

strano errore octave

Inviato: lun 24 set 2007, 21:43
da pulmro
Sono incappato recentemente in questo strano comportamento di octave. Ho installato i pacchetti per slackware 12 disponibili su linuxpackages.net e ho eseguito octave e fatto due conti. I seguenti: ho scritto una matrice 2x2 contenente numeri e radici quadrate, ne ho calcolato l'inversa con il comando inv e ho eseguito il prodotto tra la matrice e la sua inversa, sorprendentemente octave non restitusce l'identità ma una matrice abbastanza diversa. Cosa assurda. Ho pensato a dei pacchetti con qualche difetto e mi sono compilato octave (un po' noioso sul mio pentium2), ma il problema rimane. Se eseguo la stessa versione di octave su windows funziona correttamente. Ho provato sia la 2.9.12 sia la 2.9.13. Qui di seguito un output di esempio :

Codice: Seleziona tutto

GNU Octave, version 2.9.13
Copyright (C) 2007 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or
FITNESS FOR A PARTICULAR PURPOSE.  For details, type `warranty'.

Octave was configured for "i686-pc-linux-gnu".

Additional information about Octave is available at http://www.octave.org.

Please contribute if you find this software useful.
For more information, visit http://www.octave.org/help-wanted.html

Report bugs to <bug@octave.org> (but first, please read
http://www.octave.org/bugs.html to learn how to write a helpful report).

For information about changes from previous versions, type `news'.

octave:1> A=[1/sqrt(2),-1/sqrt(2);1/sqrt(2),1/sqrt(2)]
A =

   0.70711  -0.70711
   0.70711   0.70711

octave:2> inv(A)
ans =

   0.70711   0.70711
  -0.70711   0.70711

octave:3> inv(A)*A
ans =

   1.0000e+00  -1.0137e-17
  -1.0137e-17   1.0000e+00

octave:4>

Inviato: mar 25 set 2007, 7:36
da enzo
Ciao!
Non credo si tratti di un errore, piuttosto di impostazioni differenti riguardo arrotondamenti e/o gestione degli interi del CAS (Computer Algebra System).
Personalmente ho "combattuto" un pò sia con Octave che altri CAS di cui non ricordo il nome e, dopo mille prove, sono arrivato alla conclusione che la soluzione migliore e, tutto sommato, + economica, fosse quella di acquistare una BUONA calcolatrice, ovvero, senza volere fare pubblicità (e senza volere scatenare una flame war con gli utilizzatori delle Texas Instruments) una Hewlett Packard, da adoperare in modalità RPN!
Se acquisti su Ebay dagli US il modello HP48GII te la cavi con poco (sugli 80 euro rispetto al prezzo italiano di 140+iva).
Altrimenti il massimo (per l'HP) è il modello HP50G.
Scusa se sono andato leggermente O.T.
In bocca al lupo x eventuali esami!

Inviato: mar 25 set 2007, 8:55
da absinthe
beh.. quella veramente è l'identità! fuori diagonale hai praticamente zero!

M

Inviato: mar 25 set 2007, 17:10
da mimmoforlug
Ho compilato octave ed inv(A) si blocca, mentre:

Codice: Seleziona tutto

octave:1> A=[1/sqrt(2),-1/sqrt(2);1/sqrt(2),1/sqrt(2)]
A =

   0.70711  -0.70711
   0.70711   0.70711

octave:2> inv(A)

octave:2> A
A =

   0.70711  -0.70711
   0.70711   0.70711

octave:3> A^-1
ans =

   0.70711   0.70711
  -0.70711   0.70711

octave:4> A^-1 * A
ans =

    1.0000e+00   -1.0137e-17
   -1.0137e-17    1.0000e+00
il blocco della funzione inv() mi era già capitato tempo addietro con una installazione da pacchetti tgz e altre versioni del sistema operativo. Da cosa potrà di pendere? Tutto il resto, per quanto ho potuto sperimentare, funziona.

Inviato: mar 25 set 2007, 17:11
da mimmoforlug
messaggio duplicato, si può cancellare!

Inviato: mar 25 set 2007, 21:12
da pulmro
Non sono convinto, ammetto che quella matrice assomigli all'identità, ma anche se i termini extra-diagonali sono molto molto piccoli, non sono zero. E comunque non mi spiego il fatto che provando su una ubuntu di scorta octave fa il suo conticino per bene, in più in entrambi i casi ho usato format short come formato di visualizzazione.
L'output di octave su ubuntu,

Codice: Seleziona tutto

GNU Octave, version 2.9.9 (i486-pc-linux-gnu).
Copyright (C) 2006 John W. Eaton.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or
FITNESS FOR A PARTICULAR PURPOSE.  For details, type `warranty'.

Additional information about Octave is available at http://www.octave.org.

Please contribute if you find this software useful.
For more information, visit http://www.octave.org/help-wanted.html

Report bugs to <bug@octave.org> (but first, please read
http://www.octave.org/bugs.html to learn how to write a helpful report).

octave2.9:1> A=[1/sqrt(2),-1/sqrt(2);1/sqrt(2),1/sqrt(2)]
A =

   0.70711  -0.70711
   0.70711   0.70711

octave2.9:2> A*inv(A)
ans =

   1   0
   0   1

octave2.9:3> 

Inviato: mar 25 set 2007, 23:37
da absinthe
da una parte usi la scrittura semplice, dall'altra chiedi la scrittura in potenze del 10 (1 contro 1e+0) il calcolo è lo stesso identico, solo che la slack è configurata per un output a più cifre significative!
se sei curioso di vedere dei veri errori di apporssimazione prova le inverse delle funzioni trigonometriche ;)

M

Inviato: mer 26 set 2007, 0:20
da pulmro
Se dunque fossi ossessionato dall'idea di ottenere lo stesso output anche su slackware?

Inviato: mer 26 set 2007, 11:52
da absinthe
http://www.gnu.org/software/octave/doc/ ... nal-Output

usa la funzione format! la puoi inserire anche in un file di startup così da far configurare automaticamente il formato a octave!

IMHO quello di default (della slack) è il migliore!

M

Inviato: mer 26 set 2007, 12:25
da pulmro
Non vorrei sembrare insistente e eccessivamente pignolo, cerco solo di capire. Va bene i diversi formati di visualizzazione, ma come mai lo stesso octave, nello stesso formato di visualizzazione (ad esempio format short) su due distribuzioni diverse produce due output diversi?
grazie della pazienza

Inviato: mer 26 set 2007, 17:48
da absinthe
no non è lo stesso formato: uno è semplicemente 'short' (ubuntu), l'altro è 'short e' (slack).

se non cambia niente usando i due diversi formati, mi viene da pensare che abbiano messo mano al codice... ma sarebbe poco sensato!

M

Inviato: mer 26 set 2007, 22:14
da phobos3576
pulmro ha scritto:Non vorrei sembrare insistente e eccessivamente pignolo, cerco solo di capire. Va bene i diversi formati di visualizzazione, ma come mai lo stesso octave, nello stesso formato di visualizzazione (ad esempio format short) su due distribuzioni diverse produce due output diversi?
grazie della pazienza
Anche la calcolatrice KCalc si comporta in modo differente a seconda che sia stata compilata con supporto long double o meno.

Il fatto che Octave fornisca, ad esempio, sin(3.14 / 2) = 1 significa che sta usando una precisione schifosa in virgola mobile; non so se per Octave ci siano delle opzioni che permettono di modificare la precisione senza la necessità di ricompilare.

Inviato: gio 27 set 2007, 13:46
da absinthe
ocatve, come matlab, lavora con foramti double, è il propt che campia, e le impostazioni possono essere modificate tramite il comando format

M