Pgfplots e cifre significative

  • Creatore
    Topic
  • #80390
    Up
    0
    Down
    ::


    Ciao a tutti.
    Ho un (grosso?) problema con pgfplots. Sto facendo dei lavori di fisica numerica e devo mostrare la non conservazione dell’energia meccanica da perte di uno schema numerico. Fisicamente dovrebbe essere zero, ma per via dello schema oscilla. Questo è una piccola porzione del file su cui lavoro:

    `0.00000000000000e+00 1.00000000000000e-04 0.00000000000000e+00 -9.99999998333333e-05 1.00000000000000e-04 -1.00000000000000e+00 -0.00000000000000e+00
    1.00000000000000e-01 1.00000000000000e-04 -9.99999998333334e-06 -9.99999998333333e-05 1.00498756209551e-04 -9.99999994950000e-01 0.00000000000000e+00
    2.00000000000000e-01 9.90000000016667e-05 -1.99999999666667e-05 -9.89999998399502e-05 1.00999999995033e-04 -9.99999994899500e-01 0.00000000000000e+00
    3.00000000000000e-01 9.70000000050000e-05 -2.98999999506617e-05 -9.69999998528878e-05 1.01503743763566e-04 -9.99999994848495e-01 0.00000000000000e+00
    4.00000000000000e-01 9.40100000099338e-05 -3.95999999359505e-05 -9.40099998714590e-05 1.02009999984291e-04 -9.99999994796980e-01 0.00000000000000e+00
    5.00000000000000e-01 9.00500000163388e-05 -4.90009999230964e-05 -9.00499998946362e-05 1.02518781188648e-04 -9.99999994744950e-01 0.00000000000000e+00
    6.00000000000000e-01 8.51499000240291e-05 -5.80059999125600e-05 -8.51498999211325e-05 1.03030099970630e-04 -9.99999994692399e-01 0.00000000000000e+00
    7.00000000000000e-01 7.93493000327732e-05 -6.65209899046732e-05 -7.93492999495052e-05 1.03543968987038e-04 -9.99999994639323e-01 0.00000000000000e+00
    8.00000000000000e-01 7.26972010423058e-05 -7.44559198996238e-05 -7.26972009782731e-05 1.04060400957735e-04 -9.99999994585717e-01 0.00000000000000e+00
    9.00000000000000e-01 6.52516090523434e-05 -8.17256399974511e-05 -6.52516090060390e-05 1.04579408665917e-04 -9.99999994531574e-01 0.00000000000000e+00`

    La colonna dell’energia meccanica è la 5a. Come si può notare le oscillazioni sono davvero di piccola entità e partono dalla 9a cifra significativa. Facendo il grafico con pgfplots ottengo una linea retta orizzontale (approssimativamente) a -1 (o -9.9999999e-1?). Visti i risultati ottenuti suppongo che pgfplots non sia in grado di lavorare con più di 8 cifre significative. Giusto?

    Come faccio a risolvere il problema e riuscire a vedere graficamente le oscillazioni sull’energia meccanica dovute allo schema? Ovviamente moltiplicando per una potenza di 10 cambio solo l’ordine di grandezza e non in numero di cifre significativa… Come posso fare?

    Grazie mille,
    R.

Visualizzazione 9 filoni di risposte
  • Autore
    Risposte
    • #80391
      Up
      0
      Down
      ::

      Rocco M.” post=79581Ciao a tutti.
      Ho un (grosso?) problema con pgfplots. Sto facendo dei lavori di fisica numerica e devo mostrare la non conservazione dell’energia meccanica da perte di uno schema numerico. Fisicamente dovrebbe essere zero, ma per via dello schema oscilla. Questo è una piccola porzione del file su cui lavoro:

      `0.00000000000000e+00 1.00000000000000e-04 0.00000000000000e+00 -9.99999998333333e-05 1.00000000000000e-04 -1.00000000000000e+00 -0.00000000000000e+00
      1.00000000000000e-01 1.00000000000000e-04 -9.99999998333334e-06 -9.99999998333333e-05 1.00498756209551e-04 -9.99999994950000e-01 0.00000000000000e+00
      2.00000000000000e-01 9.90000000016667e-05 -1.99999999666667e-05 -9.89999998399502e-05 1.00999999995033e-04 -9.99999994899500e-01 0.00000000000000e+00
      3.00000000000000e-01 9.70000000050000e-05 -2.98999999506617e-05 -9.69999998528878e-05 1.01503743763566e-04 -9.99999994848495e-01 0.00000000000000e+00
      4.00000000000000e-01 9.40100000099338e-05 -3.95999999359505e-05 -9.40099998714590e-05 1.02009999984291e-04 -9.99999994796980e-01 0.00000000000000e+00
      5.00000000000000e-01 9.00500000163388e-05 -4.90009999230964e-05 -9.00499998946362e-05 1.02518781188648e-04 -9.99999994744950e-01 0.00000000000000e+00
      6.00000000000000e-01 8.51499000240291e-05 -5.80059999125600e-05 -8.51498999211325e-05 1.03030099970630e-04 -9.99999994692399e-01 0.00000000000000e+00
      7.00000000000000e-01 7.93493000327732e-05 -6.65209899046732e-05 -7.93492999495052e-05 1.03543968987038e-04 -9.99999994639323e-01 0.00000000000000e+00
      8.00000000000000e-01 7.26972010423058e-05 -7.44559198996238e-05 -7.26972009782731e-05 1.04060400957735e-04 -9.99999994585717e-01 0.00000000000000e+00
      9.00000000000000e-01 6.52516090523434e-05 -8.17256399974511e-05 -6.52516090060390e-05 1.04579408665917e-04 -9.99999994531574e-01 0.00000000000000e+00`

      La colonna dell’energia meccanica è la 5a. Come si può notare le oscillazioni sono davvero di piccola entità e partono dalla 9a cifra significativa. Facendo il grafico con pgfplots ottengo una linea retta orizzontale (approssimativamente) a -1 (o -9.9999999e-1?). Visti i risultati ottenuti suppongo che pgfplots non sia in grado di lavorare con più di 8 cifre significative. Giusto?

      Come faccio a risolvere il problema e riuscire a vedere graficamente le oscillazioni sull’energia meccanica dovute allo schema? Ovviamente moltiplicando per una potenza di 10 cambio solo l’ordine di grandezza e non in numero di cifre significativa… Come posso fare?

      Grazie mille,
      R.

      Ho l’impressione di averti già risposto. 😕

      Non è un problema solo di cifre significative, ma di scala. Devi traslare verticalmente e moltiplicare per 10^n (con n opportuno).

      Ciao
      Enrico

    • #80392
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        In ogni caso la cllonna è la sesta, da quel che dici; è ho il sospetto che quei numeri derivino da una differenza fra l’energia attesa e quella simulata dal calcolo. La differenza da 1 è minima ma si tratta sostanzialmente di runore dovuto agli errori di scalamento e troncamento dell’algoritmo che ti porta a quel risultato. Hai studato un po’ di clacolo numerico? non occore andare molto a fondo, ma l’errore che si ottiene da differenza fra numeri relativamante grandi ma molto vicini, è fortemente “rumoroso” e quindi non è assolutamente attendibile.

        Se invece quella sesta colonna è il rapporto fra l’energia attesa e quella simulata, la retta orizzontale all’ordinata 1 va più che bene, benissimo! e le oscillazioni che risultano invisibili nel grafico devono restare invisibili perché sono rumore.

      • #80393
        Up
        0
        Down
        ::

        egreg9″ post=79585

        Ciao a tutti.
        Ho un (grosso?) problema con pgfplots. Sto facendo dei lavori di fisica numerica e devo mostrare la non conservazione dell’energia meccanica da perte di uno schema numerico. Fisicamente dovrebbe essere zero, ma per via dello schema oscilla. Questo è una piccola porzione del file su cui lavoro:

        `0.00000000000000e+00 1.00000000000000e-04 0.00000000000000e+00 -9.99999998333333e-05 1.00000000000000e-04 -1.00000000000000e+00 -0.00000000000000e+00
        1.00000000000000e-01 1.00000000000000e-04 -9.99999998333334e-06 -9.99999998333333e-05 1.00498756209551e-04 -9.99999994950000e-01 0.00000000000000e+00
        2.00000000000000e-01 9.90000000016667e-05 -1.99999999666667e-05 -9.89999998399502e-05 1.00999999995033e-04 -9.99999994899500e-01 0.00000000000000e+00
        3.00000000000000e-01 9.70000000050000e-05 -2.98999999506617e-05 -9.69999998528878e-05 1.01503743763566e-04 -9.99999994848495e-01 0.00000000000000e+00
        4.00000000000000e-01 9.40100000099338e-05 -3.95999999359505e-05 -9.40099998714590e-05 1.02009999984291e-04 -9.99999994796980e-01 0.00000000000000e+00
        5.00000000000000e-01 9.00500000163388e-05 -4.90009999230964e-05 -9.00499998946362e-05 1.02518781188648e-04 -9.99999994744950e-01 0.00000000000000e+00
        6.00000000000000e-01 8.51499000240291e-05 -5.80059999125600e-05 -8.51498999211325e-05 1.03030099970630e-04 -9.99999994692399e-01 0.00000000000000e+00
        7.00000000000000e-01 7.93493000327732e-05 -6.65209899046732e-05 -7.93492999495052e-05 1.03543968987038e-04 -9.99999994639323e-01 0.00000000000000e+00
        8.00000000000000e-01 7.26972010423058e-05 -7.44559198996238e-05 -7.26972009782731e-05 1.04060400957735e-04 -9.99999994585717e-01 0.00000000000000e+00
        9.00000000000000e-01 6.52516090523434e-05 -8.17256399974511e-05 -6.52516090060390e-05 1.04579408665917e-04 -9.99999994531574e-01 0.00000000000000e+00`

        La colonna dell’energia meccanica è la 5a. Come si può notare le oscillazioni sono davvero di piccola entità e partono dalla 9a cifra significativa. Facendo il grafico con pgfplots ottengo una linea retta orizzontale (approssimativamente) a -1 (o -9.9999999e-1?). Visti i risultati ottenuti suppongo che pgfplots non sia in grado di lavorare con più di 8 cifre significative. Giusto?

        Come faccio a risolvere il problema e riuscire a vedere graficamente le oscillazioni sull’energia meccanica dovute allo schema? Ovviamente moltiplicando per una potenza di 10 cambio solo l’ordine di grandezza e non in numero di cifre significativa… Come posso fare?

        Grazie mille,
        R.

        Ho l’impressione di averti già risposto. 😕

        Non è un problema solo di cifre significative, ma di scala. Devi traslare verticalmente e moltiplicare per 10^n (con n opportuno).

        Ciao
        Enrico

        Ho già provato a moltiplicare per 10^n con poche speranze e infatti non è cambiato niente. Incede ci avere -9.99999994531574e-01 ottengo qualcosa tipo -9.99999994531574e03 e a livello del grafico non cambia niente… Cambia solo la scala. Non vedo quindi come una traslazione possa cambiare le cose. Come mai mi dici di traslare? Potresti essere più esplicito per favore?

        Grazie,
        R.

      • #80394
        Up
        0
        Down
        ::

        OldClaudio” post=79588In ogni caso la cllonna è la sesta, da quel che dici; è ho il sospetto che quei numeri derivino da una differenza fra l’energia attesa e quella simulata dal calcolo. La differenza da 1 è minima ma si tratta sostanzialmente di runore dovuto agli errori di scalamento e troncamento dell’algoritmo che ti porta a quel risultato. Hai studato un po’ di clacolo numerico? non occore andare molto a fondo, ma l’errore che si ottiene da differenza fra numeri relativamante grandi ma molto vicini, è fortemente “rumoroso” e quindi non è assolutamente attendibile.

        Se invece quella sesta colonna è il rapporto fra l’energia attesa e quella simulata, la retta orizzontale all’ordinata 1 va più che bene, benissimo! e le oscillazioni che risultano invisibili nel grafico devono restare invisibili perché sono rumore.

        Hai ragione, la colonna è la sesta. Avevo in mente il numero di colonna in pgfplots, che parte a contare da zero. =).

        Comunque non è nessuna delle due alternative di cui hai parlato. È semplicemente l’energia meccanica (nessuna differenza, nessun rapporto). Fisicamente dovrebbe essere costante ma numericamente voglio (e devo) mostrare che oscilla (anche se poi negli schemi di Euler-Cromer e Stormer-Verlet è conservata come media temporale). Questo per gli errori introdotti dall’algoritmo: ma sono proprio questi errori che voglio studiare.

        Spero che ora sia più chiaro il mio scopo.
        Grazie,
        R.

      • #80395
        Up
        0
        Down
        ::

        Rocco M.” post=79590Ho già provato a moltiplicare per 10^n con poche speranze e infatti non è cambiato niente. Incede ci avere -9.99999994531574e-01 ottengo qualcosa tipo -9.99999994531574e03 e a livello del grafico non cambia niente… Cambia solo la scala. Non vedo quindi come una traslazione possa cambiare le cose. Come mai mi dici di traslare? Potresti essere più esplicito per favore?

        (–0.999999994531574e–01 + 1)*10^9=5.468426

        Immagino che fare il grafico di (f(x)+1)*10^9 non sia una cosa così difficile, no? Che abbia senso mi pare di no, ma tu sai che razza di dati sono.

        Ciao
        Enrico

      • #80396
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::

          Comunque non è nessuna delle due alternative di cui hai parlato. È semplicemente l’energia meccanica (nessuna differenza, nessun rapporto). Fisicamente dovrebbe essere costante ma numericamente voglio (e devo) mostrare che oscilla (anche se poi negli schemi di Euler-Cromer e Stormer-Verlet è conservata come media temporale). Questo per gli errori introdotti dall’algoritmo: ma sono proprio questi errori che voglio studiare.

          Un’energia che valga circa -1 è una energia un po’ strana; posso immaginare che il segno abbia un qualche significato recondito (per me la potenza può avere un segno [potenza entrante, potenza uscente], ma l’energia no, tuttavia capisco che in certe condizioni le si possa assegnare un segno convenzionale). Certo ci sono delle unità di misura, ma il valore unitario, qualunque sia l’unità di misura ricorda troppo da vicino un valore normalizzato, cioè un rapporto rispetto ad un termine di riferimento che non sarà l’energia attesa, come immaginavo, ma è un qualcosa che abbia senso per dare luogo al valore unitario; d’altra parte ogni misura è il rapporto fra due grandezze. Il mio prof di fisica all’università ce lo inculcò con grande vigore, anche se faceva distinzione fra le lunghezze lungo una direzione e quelle lungo un’altra direzione; aveva un senso ma complicava le cose semplici.

          Ora, come ti suggerisce Enrico, aggiungere 1 e moltiplicare per 10^9 ti da la differenza scalata; che significato abbia e quali ondulazioni presenti riguarda te, ma sta attento a non prendere lucciole per lanterne; per me e la sensibilità numerica e sperimentale che ho sviluppato con i miei studi, quello è rumore algoritmico; tutto sta a vedere che autocorrelazione hanno quei dati rispetto a un qualche andamento ragionevole (una retta? dai primi campioni sembrerebbe di sì), ne qual caso forse puoi dedurre che l’errore algoritmico va aumentando linearmente nel tempo con una legge data dalla retta stimata, ma ci andrei con i piedi di piombo; lavorare sugli errori algoritmici di quella entità vuol dire lavorare sul rumore, tipicamente scorrelato.

        • #80397
          Liverpool
          Partecipante
            Up
            0
            Down
            ::

            Rocco M.” post=79581Come faccio a risolvere il problema e riuscire a vedere graficamente le oscillazioni sull’energia meccanica dovute allo schema? Ovviamente moltiplicando per una potenza di 10 cambio solo l’ordine di grandezza e non in numero di cifre significativa… Come posso fare?

            Non ci puoi fare niente, perché il primo elemento della colonna è -1, quindi qualsiasi operazione di scalamento, te lo farebbe diventare troppo grande rispetto agli altri. Se non ci fosse quello, l’operazione da compiere sarebbe \(x\times10^8+10^8-1\). Credo che [tt]pgfplots[/tt] non sia in grado di maneggiare numeri così grandi. Dovresti provare a modificare i dati con un software di calcolo.

          • #80398
            Up
            0
            Down
            ::


            Ho parlato oggi con l’assistente e sono obbligato a procedere come descritto. È quindi possibile aumentare il numero di cifre significative prese in conto da pgplots (in maniera semplice e rapida)? Se si mi spieghereste cortesemente come fare nel dettaglio o dove trovare istruzioni dettagliate?

            In caso contrario utilizzerò gnuplot o Matlab che sembrano utilizzare una precisione maggiore, in quanto mostrano l’oscillazione dell’energia esattamente come vorrei ottenere con pgfplots.

            Grazie,
            R.

          • #80399
            Liverpool
            Partecipante
              Up
              0
              Down
              ::

              Rocco M.” post=79640È quindi possibile aumentare il numero di cifre significative prese in conto da pgplots (in maniera semplice e rapida)?

              Come ti ha spiegato altrove l’autore del pacchetto, non è possibile. Più autorevole di lui!

            • #80400
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::

                Ho parlato oggi con l’assistente e sono obbligato a procedere come descritto. È quindi possibile aumentare il numero di cifre significative prese in conto da pgplots (in maniera semplice e rapida)? Se si mi spieghereste cortesemente come fare nel dettaglio o dove trovare istruzioni dettagliate?

                Io non capisco che cosa ti abbia detto l’assistente e che senso abbia aumentare il numero delle cifre; Nota che quando ero giovane mi sono imparato l’assembly language dell’IBM 370 apposta per fare calcoli molto mal condizionato usando la quadrupla precisione, pressappoco 112 cifre binarie di mantissa equivalenti a circa 34 cifre decimali significative. Ho imparato a mie spese a combattere il mal condizionamento di certi algoritmi.

                Ma una cosa è certa: se deve venirti un risultato molto prossimo a -1 e ottieni valori che se ne scostano di quantità dell’ordine del 10^{-9}, che significato ha aumentare il numero delle cifre? forse a fare calcoli dove gli arrotondamenti e i troncamenti si manifestano più lontano dal segno del separatore decimale, ma le differenze difficilmente potranno diventare più piccole di quelle che hai già. Ma se anche fosse vero, vuol dire che tracciare nel diagramma una serie di punti molto vicini a -1, vuol dire tracciare una linea perfettamente orizzontale, e non riusciresti a vedere gli scostamenti nemmeno se la tela del disegno fosse di un chilometro quadrato. In ogni caso devi tracciare il diagramma delle differenze scalato che ti è già stato suggerito; se l’assistente si riferisce a questo punto, potrebbe avere ragione, altrimenti anche lui dimostrerebbe di avere le idee poco chiare sul calcolo numerico e sul disegno grafico.

                Ti raccomando ancora di non prendere lucciole per lanterne. Io posso non aver capito (e non ho capito che cosa ti abbia detto effettivamente l’assistente) ma attento al rumore algoritmico. Ricordati che la teoria matematica del caos deterministico è nata proprio dall’analisi di problemi mal condizionati; gli attrattori strani, i cicli non periodici per sistemi teoricamente armonici, l’effetto Johanson nelle giunzioni a temperature criogeniche da superconduttività, le scale del diavolo che si manifestano in fenomeni che uno non supporrebbe mai discontinui, visto che non si tratta di fenomeni subatomici, eccetera, sono argomenti interessantissimi e difficilissimi da analizzare, ma sono anche risultati di algoritmi mal condizionati; quelli per i quali il battito delle ali di una farfalla in Brasile può essere la causa sei mesi dopo di un uragano in Cina.

            Visualizzazione 9 filoni di risposte
            • Devi essere connesso per rispondere a questo topic.

            Go to top