Problema con pgfplots

  • Creatore
    Topic
  • #78948
    Up
    0
    Down
    ::


    Ciao a tutti. Sto provando a compilare il primo esempio del quarto capitolo (“Curve campionate da file”) de “L’arte di disegnare grafici con LaTeX” utilizzando un mio file contenente i punti (triplette, ma solo i primi due dati mi servono).

    Ottengo però il seguente errore:
    `TeX capacity exceeded, sorry [main memory size=3000000]`

    Che significa? Come posso risolverlo?

    Grazie.

Visualizzazione 36 filoni di risposte
  • Autore
    Risposte
    • #78949
      admin
      Amministratore del forum
        Up
        0
        Down
        ::

        Rocco M.” post=78010Ciao a tutti. Sto provando a compilare il primo esempio del quarto capitolo (“Curve campionate da file”) de “L’arte di disegnare grafici con LaTeX” utilizzando un mio file contenente i punti (triplette, ma solo i primi due dati mi servono).

        Ottengo però il seguente errore:
        `TeX capacity exceeded, sorry [main memory size=3000000]`

        Che significa? Come posso risolverlo?

        Grazie.

        Il tanto noto errore di memoria di pgfplots: trovi sul forum la soluzione o nel manuale. Ho visto un po’, puoi anche partire da http://www.guitex.org/home/it/forum/5-tex-e-latex/71851-il-disegno-programmato-nellarte-di-scrivere-con-latex?limit=15&start=135#72884 .

        Ciao
        Orlando

      • #78950
        Up
        0
        Down
        ::

        ansys” post=78018

        Ciao a tutti. Sto provando a compilare il primo esempio del quarto capitolo (“Curve campionate da file”) de “L’arte di disegnare grafici con LaTeX” utilizzando un mio file contenente i punti (triplette, ma solo i primi due dati mi servono).

        Ottengo però il seguente errore:
        `TeX capacity exceeded, sorry [main memory size=3000000]`

        Che significa? Come posso risolverlo?

        Grazie.

        Il tanto noto errore di memoria di pgfplots: trovi sul forum la soluzione o nel manuale. Ho visto un po’, puoi anche partire da http://www.guitex.org/home/it/forum/5-tex-e-latex/71851-il-disegno-programmato-nellarte-di-scrivere-con-latex?limit=15&start=135#72884 .

        Ciao
        Orlando

        Grazie per i consigli. Ma di quanto dovrei aumentare la memoria? Quello che mi serve adesso è aggiungere il grafico della traiettoria di un satellite, simulata per 1000s a passi di 0.1 s… Il mio Mac ha 16GB di ram. Come consigli di modificare le righe citate nella discussione?

        Grazie.

      • #78951
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Comincia a ridurre il numero di campioni; 1000 secondi sono un tempo non tanto lungo, circa 17 minuti; in questo lasso di tempo il satellite , se non è bombardato da sciami di meteoriti, si muove molto regolarmente. Quindi campionare ogni secondo è giā troppo, la l’impegno della memoria diminuisce di 10 volte. Da ingegnere o da scienziato devi domandarti quanto siano significativi 10000 punti tracciati lungo una linea abbastanza regolare, che occupa al massimo lo specchio di stampa; è totalmente privo di senso; su uno schermo normale a 72 pixel al pollice rischi di mettere una mezza dozzina di punti nel luogo dove comunque lo schermo mostra sempre solo un pixel. Pensa alla stampa su carta con una densità di 600 punti al pollice, ma dove l’algoritmo di stampa non disegna mai linee troppo sottili per non farle svanire quando sono troppo sottili; fatti due conti sulle dita e vedrai che due pixel adiacenti conterranno sempre, ciascuno, un paio di punti del tuo disegno.

          Mai sprecare risorse; aumentare la memoria a 8.00.0000 di parole di 4 byte, cioè di 32 bit, arrivi a 256 000 000 bit per rappresentare il tuo disegno con mezzi che non possono arrivare a una definizione così alta. Poi fai come credi, a non sprecherei la ram per un problema mal posto. Se mi dici che vorresti mostrare i quei 17 minuti scarsi le micro deviazioni dalla traiettoria prevista, allora un disegno con 10 000 punti non dice assolutamante nulla, ma le informazioni che servono sono date dal valore medio e dalla sigma, diciamo ogni minuto; una tabella di una ventina di righe dice di più di una figura dove non si capisce niente se non che si tratta di rumore.

        • #78952
          Up
          0
          Down
          ::

          Rocco M.” post=78010Ciao a tutti. Sto provando a compilare il primo esempio del quarto capitolo (“Curve campionate da file”) de “L’arte di disegnare grafici con LaTeX” utilizzando un mio file contenente i punti (triplette, ma solo i primi due dati mi servono).

          Ottengo però il seguente errore:
          `TeX capacity exceeded, sorry [main memory size=3000000]`

          Che significa? Come posso risolverlo?

          Grazie.

          Compila con lualatex

          Ciao
          Enrico

        • #78953
          Liverpool
          Partecipante
            Up
            0
            Down
            ::

            Rocco M.” post=78027Ma di quanto dovrei aumentare la memoria?

            Atteso che i consigli degli autorevoli @OldClaudio e @egreg9 sono inappuntabili, non ci crederai ma è difficile calcolare di quanto debba essere incrementata la memoria. Io stesso procedo per tentativi. La memoria fisica di cui tu parli (16 GiB) non è vincolante, per via della presenza della memoria virtuale, che ne simula il comportamento occupando una porzione del disco fisso, perciò non dovresti preoccuparti di “esagerare”. Tuttavia, a chi chiedeva una stima della capacità minima da aggiungere, l’autore del pacchetto rispose che è difficile calcolarla a priori e consigliò di partire con un valore “sufficientemente alto” e poi ridurlo progressivamente per tentativi.

            Dopo aver risposto alla tua domanda, se la curva che devi tracciare è abbastanza regolare, io ti consiglio di seguire il suggerimento di @OldClaudio. Non è nemmeno necessario mettere mano al file di dati, perché [tt]\addplot[/tt] ha un’opzione [tt]each nth point={<...>}[/tt] che consente di prendere un punto ogni tot dai dati (vedi sul manuale altre opzioni collegate). Es: un punto ogni cento
            `\addplot [each nth point={100}, …] …;`Non sai se la curva è abbastanza regolare? Parti da un numero sufficientemente basso che ti consenta di non sforare la capacità di memoria, osserva l’andamento del grafico e poi ricompila con un valore più alto finché il risultato ti sembra ragionevole. In questo modo il vantaggio visibile per te sta nella velocità di compilazione, nella velocità di apertura del pdf (o di apparizione del grafico sulla pagina) e nella riduzione di dimensioni dello stesso pdf.

            Poi facci sapere che strada hai preso.
            Ciao

          • #78954
            Up
            0
            Down
            ::

            OldClaudio” post=78031Comincia a ridurre il numero di campioni; 1000 secondi sono un tempo non tanto lungo, circa 17 minuti; in questo lasso di tempo il satellite , se non è bombardato da sciami di meteoriti, si muove molto regolarmente. Quindi campionare ogni secondo è giā troppo, la l’impegno della memoria diminuisce di 10 volte. Da ingegnere o da scienziato devi domandarti quanto siano significativi 10000 punti tracciati lungo una linea abbastanza regolare, che occupa al massimo lo specchio di stampa; è totalmente privo di senso; su uno schermo normale a 72 pixel al pollice rischi di mettere una mezza dozzina di punti nel luogo dove comunque lo schermo mostra sempre solo un pixel. Pensa alla stampa su carta con una densità di 600 punti al pollice, ma dove l’algoritmo di stampa non disegna mai linee troppo sottili per non farle svanire quando sono troppo sottili; fatti due conti sulle dita e vedrai che due pixel adiacenti conterranno sempre, ciascuno, un paio di punti del tuo disegno.

            Mai sprecare risorse; aumentare la memoria a 8.00.0000 di parole di 4 byte, cioè di 32 bit, arrivi a 256 000 000 bit per rappresentare il tuo disegno con mezzi che non possono arrivare a una definizione così alta. Poi fai come credi, a non sprecherei la ram per un problema mal posto. Se mi dici che vorresti mostrare i quei 17 minuti scarsi le micro deviazioni dalla traiettoria prevista, allora un disegno con 10 000 punti non dice assolutamante nulla, ma le informazioni che servono sono date dal valore medio e dalla sigma, diciamo ogni minuto; una tabella di una ventina di righe dice di più di una figura dove non si capisce niente se non che si tratta di rumore.

            Ho letto male l’esercizio e i secondi da simulare sono solo 500s. Ma il problema persiste. Essendo un esercizio non è una mia scelta: devo simulare con passi di tempo da 20s, 10s, 1s, e 0.1s e confrontare i vari risultati con la soluzione analitica del problema. So bene (perché quest’estate ho studiato per conto mio la materia, visto che mi interessa molto) che basterebbe un passo di tempo molto inferiore e uno schema variabile (non so quale sia il termine esatto in italiano per uno schema che cambia il passo di tempo) con una maggiore risoluzione unicamente nel punto in cui la sonda apre il paracadute. Ma ciò non è richiesto.

            In realtà i grafici avremmo dovuto farli con Matlab (script già pronto), ma io mi sono rifiutato. ;).

          • #78955
            Up
            0
            Down
            ::

            egreg9″ post=78035

            Ciao a tutti. Sto provando a compilare il primo esempio del quarto capitolo (“Curve campionate da file”) de “L’arte di disegnare grafici con LaTeX” utilizzando un mio file contenente i punti (triplette, ma solo i primi due dati mi servono).

            Ottengo però il seguente errore:
            `TeX capacity exceeded, sorry [main memory size=3000000]`

            Che significa? Come posso risolverlo?

            Grazie.

            Compila con lualatex

            Ciao
            Enrico

            Cos’è LuaLaTeX?

          • #78956
            Liverpool
            Partecipante
              Up
              0
              Down
              ::

              Rocco M.” post=78050Essendo un esercizio non è una mia scelta: devo simulare con passi di tempo da 20s, 10s, 1s, e 0.1s e confrontare i vari risultati con la soluzione analitica del problema.

              Allora le strade da percorrere sembrerebbero solo due: LuaLaTeX o l’incremento di main memory (sul manuale del pacchetto l’esempio riporta il valore 90 milioni). Tuttavia io non scarterei il suggerimento di @OldClaudio a priori. In fondo il tuo docente vuole che tu confronti i risultati e per far questo è sufficiente un qualunque sottoinsieme di valori che non “distorca” il grafico originale. Lui vedrà solo il disegno stampato (o sul pdf), perciò non saprà mai quanti punti sono stati effettivamente tracciati. Quindi io un tentativo di sottocampionamento lo farei.

              Ciao

            • #78957
              Up
              0
              Down
              ::

              Liverpool” post=78052

              Essendo un esercizio non è una mia scelta: devo simulare con passi di tempo da 20s, 10s, 1s, e 0.1s e confrontare i vari risultati con la soluzione analitica del problema.

              Allora le strade da percorrere sembrerebbero solo due: LuaLaTeX o l’incremento di main memory (sul manuale del pacchetto l’esempio riporta il valore 90 milioni). Tuttavia io non scarterei il suggerimento di @OldClaudio a priori. In fondo il tuo docente vuole che tu confronti i risultati e per far questo è sufficiente un qualunque sottoinsieme di valori che non “distorca” il grafico originale. Lui vedrà solo il disegno stampato (o sul pdf), perciò non saprà mai quanti punti sono stati effettivamente tracciati. Quindi io un tentativo di sottocampionamento lo farei.

              Ciao

              Alla luce del tuo precedente intervento (che non ho visto quando ho risposto agli altri) penso che procederò come consigliato da OldClaudio con il comando che mi hai indicato. Se i risultati non dovessero rivelarsi soddisfacenti, mi informerò sul LuaLaTeX o aumenterò la memoria.

              Grazie mille a tutti, vi farò sapere.

            • #78958
              Liverpool
              Partecipante
                Up
                0
                Down
                ::


                In ogni caso, visto che i dati sono generati in Matlab, sapere se il grafico è ragionevolmente non distorto è ancora più semplice: confronta il risultato approssimato di pgfplots con il plot di Matlab.

              • #78959
                Up
                0
                Down
                ::

                Liverpool” post=78064In ogni caso, visto che i dati sono generati in Matlab, sapere se il grafico è ragionevolmente non distorto è ancora più semplice: confronta il risultato approssimato di pgfplots con il plot di Matlab.

                I dati non sono generati in Matlab ma con un programma in C++. Poi abbiamo uno script Matlab che prende l’output del programma in C++ e disegna il grafico. Ad ogni modo farò un confronto!

                Grazie.

              • #78960
                Up
                0
                Down
                ::

                Rocco M.” post=78070

                In ogni caso, visto che i dati sono generati in Matlab, sapere se il grafico è ragionevolmente non distorto è ancora più semplice: confronta il risultato approssimato di pgfplots con il plot di Matlab.

                I dati non sono generati in Matlab ma con un programma in C++. Poi abbiamo uno script Matlab che prende l’output del programma in C++ e disegna il grafico. Ad ogni modo farò un confronto!

                Grazie.

                Io per la mia tesi ho fatto parecchie simulazioni e avevo scritto il simulatore proprio in C++. Per i grafici ho sempre usato [tt]pgfplots[/tt] e anche a me era spuntato quel famoso errore di memoria quando scrivevo dei report temporanei (tra parentesi il pacchetto “legge” file testuali come [tt].dat[/tt] perciò si possono evitare software esterni come gnuplot o matlab e si risparmia tempo). Ho risolto con la libreria [tt]external[/tt] e compilando con [tt]pdflatex -shell-escape[/tt].

                Ciao
                Claudio

              • #78961
                Up
                0
                Down
                ::

                cfiandra” post=78072

                [quote=”Liverpool” post=78064]In ogni caso, visto che i dati sono generati in Matlab, sapere se il grafico è ragionevolmente non distorto è ancora più semplice: confronta il risultato approssimato di pgfplots con il plot di Matlab.

                I dati non sono generati in Matlab ma con un programma in C++. Poi abbiamo uno script Matlab che prende l’output del programma in C++ e disegna il grafico. Ad ogni modo farò un confronto!

                Grazie.

                Io per la mia tesi ho fatto parecchie simulazioni e avevo scritto il simulatore proprio in C++. Per i grafici ho sempre usato [tt]pgfplots[/tt] e anche a me era spuntato quel famoso errore di memoria quando scrivevo dei report temporanei (tra parentesi il pacchetto “legge” file testuali come [tt].dat[/tt] perciò si possono evitare software esterni come gnuplot o matlab e si risparmia tempo). Ho risolto con la libreria [tt]external[/tt] e compilando con [tt]pdflatex -shell-escape[/tt].

                Ciao
                Claudio[/quote]

                Puoi essere più preciso per favore?

                Basta aggiungere
                `\usepackage{external}`

                e compilare con il comando

                `pdflatex -shell-escape`

                ?

                Grazie.

              • #78962
                Up
                0
                Down
                ::


                Certo 🙂

                Sia TikZ che pgfplots sono dotati di una libreria chiamata [tt]external[/tt]; questa libreria, ogni volta che in fase di compilazione si incontra una figura/grafico interrompe la compilazione per generare in via separata la figura (in genere in pdf, ma anche in ps volendo) e includerla nel documento più o meno come si fa con [tt]\includegraphics[/tt]. Questa è in breve la spiegazione ad alto livello, almeno per come l’ho capita io :D. Il fatto di creare separatamente le figure implica da un lato che si debba compilare il file con [tt]pdflatex -shell-escape[/tt] e che si risolva il problema della memoria (di cui TikZ, e per estensione ovviamente pgfplots, abusa).

                La libreria pare sia stata scritta proprio dall’autore di pgfplots e puoi richiamarla aggiungendo queste chiamate nel tuo preambolo:

                `\usepackage{pgfplots}
                \usepgfplotslibrary{external}
                \tikzexternalize`

                In realtà funziona anche:

                `\usepackage{pgfplots}
                \usetikzlibrary{external}
                \tikzexternalize`

                La differenza, come spiegato nella documentazione di pgfplots, è che la prima versione dovrebbe essere più robusta, ovvero se si ha una versione di pgf vecchia (e quindi la chiamata [tt] \usetikzlibrary{external} [/tt] non sarebbe valida) verrebbe caricata una copia locale di pgfplots.

                Ciao
                Claudio

              • #78963
                Up
                0
                Down
                ::


                Ho utilizzato il consiglio di liverpool. Era solo la soluzione analitica ad avere troppi punti. Mi è bastato aggiungere

                `\addplot[each nth point={10}]`

                Grazie mille!

                Allego il risultato ottenuto. Non è il massimo: le varie linee si confondono. Consigliate di rappresentare le soluzioni numeriche con solo i punti? In tal caso, si può creare un offset per il comando each nth point (utilizzare i punti 1, 11, 21, … per una soluzione e i punti 5, 15, 25, … per un altra)? O consigliate altre modifiche?

                Grazie!

                Attachments:
                You must be logged in to view attached files.
              • #78964
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Secondo me va bene così; sia a riprova che anche nella soluzione numerica (oltre che in quella grafica) un sovra campionamento non serve a niente.

                  Non mi piace invece la scala delle ordinate; se la virgola è quella deicmale, allora le tre cifre dopo la virgola non servono a nente e anche la virgola è inutile.
                  se servono per separare i gruppi di tre cifre, allora le norme ISO lo vietano ma prevedono solo uno spazio fine, non un segno “inchiostrato”; in questo caso preferirei che si tog Se si tratta di km/sliessero gli zeri e la virgola e si esprimesse il tutto in km/s.
                  Siccome non sono del campo non ho idea delle velocità che hanno i satelliti in caduta libera o frenata, e nemmeno la velocità che hanno in orbita geostazionaria (potrei farmi due conti, ma a quest’ora non ne ho voglia). quindi il mio dubbio sul reale valore della scala e delle unità di misura usate resta.

                  Se si tratta di km/s risulta che dopo 200 s di caduta frenata con il paracadute la velocità del satellite è ancora due volte la velocità del suono in aria a temperatura e a pressino a quota del terreno. capisco che nell’aria rarefattissima dell’alta atmosfera un paracadute possa fare ben poco, ma… Ecco perché, non essendo del campo, sono stupito dei valori delle ordinate.

                • #78965
                  Up
                  0
                  Down
                  ::

                  OldClaudio” post=78117Secondo me va bene così; sia a riprova che anche nella soluzione numerica (oltre che in quella grafica) un sovra campionamento non serve a niente.

                  Non mi piace invece la scala delle ordinate; se la virgola è quella deicmale, allora le tre cifre dopo la virgola non servono a nente e anche la virgola è inutile.
                  se servono per separare i gruppi di tre cifre, allora le norme ISO lo vietano ma prevedono solo uno spazio fine, non un segno “inchiostrato”; in questo caso preferirei che si tog Se si tratta di km/sliessero gli zeri e la virgola e si esprimesse il tutto in km/s.
                  Siccome non sono del campo non ho idea delle velocità che hanno i satelliti in caduta libera o frenata, e nemmeno la velocità che hanno in orbita geostazionaria (potrei farmi due conti, ma a quest’ora non ne ho voglia). quindi il mio dubbio sul reale valore della scala e delle unità di misura usate resta.

                  Se si tratta di km/s risulta che dopo 200 s di caduta frenata con il paracadute la velocità del satellite è ancora due volte la velocità del suono in aria a temperatura e a pressino a quota del terreno. capisco che nell’aria rarefattissima dell’alta atmosfera un paracadute possa fare ben poco, ma… Ecco perché, non essendo del campo, sono stupito dei valori delle ordinate.

                  Il grafico è relativo alla discesa senza il paracadute. Viene quindi raggiunta una velocità limite di circa 1000m/s. La virgola è un separatore e si tratta quindi di 5500m/s come velocità iniziale. Mi scuso ma non ho ancora avuto il tempo di leggere per intero l’articolo di Lorenzo (“L’arte di disegnare grafici con LaTeX”) e quindi non ho aggiunto l’opzione che imposta la virgola come separatore decimale (sono andato un po’ a caso seguendo gli esempi riportati nell’articolo)…

                  Comunque davvero non da fastidio la sovrapposizione delle linee (che, chiaramente, è naturale)? Non sembra un po’ un pasticcio?

                • #78966
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    No, non è un pasticcio.

                    Per le norme ISO, che acquistate presso l’Ente Nazionale di UNificazione Italiano costano a peso d’oro, possono venire consultate in forma “esegetica” scaricando dal sito NIST sp811.pdf (cerca sp811.pdf con google e lo trovi subito); è una versione commentata delle norme ISO riguardanti la metrologia, lo scrivere metrologico, eccetera. Salvo alcune raccomandazioni valida per chi scrive in inglese, tutto il resto è applicabile alla lettera.
                    Vedrai che:
                    1) Il separatore di terne di cifre è solo lo spazio sottile
                    2) non si dividono le terne di cifre con lo spazio sottile quando sono rispettivamente meno di 5 prima della virgola o meno di 5 dopo la virgola (cioè fino a quattro cifre prima o dopo la virgola non si usa nesun separatore)
                    3) che le Cifre da riportare devono essere confrontabili con la precisione della misura, quindi di solito non superiore alle tre cifre significative.

                    Io, da ingegnere, aggiungo (e il documento sb811 lo conferma) che i prefissi decimali sono da usare sistematicamente in modo da usare il minor numero di cifre possibile, a parte i trailng zeros, evitando per quanto possibile gli zeri prima della virgola; per cui nel tuo diagramma la scala dovrebbe essere tarata in km/s e non avere nessun separatore decimale né trailing zeros; prova a comporre il tuo diagramma così e vedrai come si legge meglio.

                  • #78967
                    Up
                    0
                    Down
                    ::

                    OldClaudio” post=78136No, non è un pasticcio.

                    Per le norme ISO, che acquistate presso l’Ente Nazionale di UNificazione Italiano costano a peso d’oro, possono venire consultate in forma “esegetica” scaricando dal sito NIST sp811.pdf (cerca sp811.pdf con google e lo trovi subito); è una versione commentata delle norme ISO riguardanti la metrologia, lo scrivere metrologico, eccetera. Salvo alcune raccomandazioni valida per chi scrive in inglese, tutto il resto è applicabile alla lettera.
                    Vedrai che:
                    1) Il separatore di terne di cifre è solo lo spazio sottile
                    2) non si dividono le terne di cifre con lo spazio sottile quando sono rispettivamente meno di 5 prima della virgola o meno di 5 dopo la virgola (cioè fino a quattro cifre prima o dopo la virgola non si usa nesun separatore)
                    3) che le Cifre da riportare devono essere confrontabili con la precisione della misura, quindi di solito non superiore alle tre cifre significative.

                    Io, da ingegnere, aggiungo (e il documento sb811 lo conferma) che i prefissi decimali sono da usare sistematicamente in modo da usare il minor numero di cifre possibile, a parte i trailng zeros, evitando per quanto possibile gli zeri prima della virgola; per cui nel tuo diagramma la scala dovrebbe essere tarata in km/s e non avere nessun separatore decimale né trailing zeros; prova a comporre il tuo diagramma così e vedrai come si legge meglio.

                    Ho cercato su iso.org e ho visto che per esempio la norma ISO 80000-10:2009 (Quantities and units — Part 10: Atomic and nuclear physics) costa ben 175.- CHF! Ma stiamo scherzando? Come mai questo costo così elevato per dei documenti di standardizzazione a cui tutti dovrebbero avere liberamente accesso se vogliono conormarsi? Grazie per il link che mi hai passato. Lo leggerò sicuramente appena avrò un po’ di tempo libero!

                    Questo pomeriggio cerco di formattare il grafico come mi hai consigliato, grazie.

                    Comunque, come fisico in erba, io preferisco non utilizzare i prefissi decimali: normalmente prediligo la notazione scientifica (un solo numero prima della virgola) e le potenze di 10 al posto dei prefissi. Se mettessi (10^3 m/s) nel grafico e cambiassi la scala andrebbe bene comunque? Oppure direttamente 5.5 10^3 nella scala… Che dici, si può fare? È tipograficamente accettabile e/o corretto? In caso di risposta negativa utilizzerò i prefissi come hai consigliato. 😉

                  • #78968
                    Liverpool
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      Per giocare con i marcatori devi usare le chiavi [tt]mark phase[/tt] e [tt]mark repeat[/tt]. La prima imposta l’ordinale del primo marcatore nel grafico, la seconda imposta il passo. Ad esempio, se vuoi partire dal secondo marcatore e tracciarne uno ogni dieci, scrivi [tt]\addplot [each nth point=10, mark phase=2, mark repeat=10] …;[/tt]. Per il secondo grafico puoi partire dal terzo marcatore e così via. Come vedi, non ho modificato each nth point ma ho solo spostato i marcatori.

                      Secondo me il grafico sta bene così. Con i marcatori diventa ancora più pasticciato e in più, se li trasli, non puoi confrontare direttamente i valori allo stesso istante. Al massimo ispessirei le linee, perché a me piacciono abbastanza spesse. Puoi provare con la chiave [tt]thick[/tt]. Una domanda: sei sicuro che non si possa ridurre ancora il numero di campioni? Perché guardando il grafico sullo schermo mi sembra abbastanza denso.

                      Un’altra osservazione: le voci della legenda mi sembrano disallineate così. Io userei tra le opzioni di axis, [tt]legend cell align=left[/tt] (oppure right a piacere).

                      Secondo me meglio 5500 m/s di \(5,5\times10^3\) m/s. 5,5 km/s ovviamente va bene, ma bisogna anche vedere qual è la consuetudine in quell’ambito, dato che l’alternativa non è sbagliata. Un po’ come per le lunghezze d’onda dello spettro visibile: i fisici usano l’angstrom, gli ingegneri il nanometro, ma alla fine bisognerebbe usare il terahertz (cioè riferirsi alle frequenze).

                      Ciao

                    • #78969
                      OldClaudio
                      Partecipante
                        Up
                        0
                        Down
                        ::


                        Vedi la norma ISO è cogente anche per i fisici; non lo è per i matematici; il documento sb811.pdf è scritto per i metrologi del National Institute of Science and Technology (era il National Bureau of Standards degli Stati UNiti d’America) che sono quasi tutti fisici 🙂
                        La Norma ISO si riferisce esplicitamente alla scrittura delle unità nella “scienza e nella tecnologia” e fino a prova contraria la fisica è una scienza.
                        E leggendo le norme capisci anche che l’amstrong è una unità non SI, quindi, benché ancora tollerata, è deprecata; quindi non la devono usare neè i fisici nè gli ingegneri, né nessun altro. I nanometri vanno benissimo per la lunghezza d’onda; per la freuenza il simbolo generalmente usato dai fisici è $\nu$, mentre gli ingenri usano $f$; sono entrambi permessi dalle norme ISO; A me personalmente l’uso della $\vu$ mi ricorda troppo da vicino la locuzione “numero di cicli al secondo” non più usato, se non forse negli USA dove sono abbastanza tradizionalisti per quel che riguarda la terminologia metrologica (come puoi leggere nel documneti sb811, il pollice è per legge definito come 25,4mm esatti, quando in passato era solo approssimativamente 25,4mm — gli USA hanno adottato il SI, ma conservano le lori unità anglo, salvo averle definite esattamente in termini di unità SI 😉 ) . La locuzione numero di cicli…” è conservato dai meccanici, non solo i riparatori dei veicoli, ma anche i progettisti e parlano “spudoratamente” di numero di giri (per parlare della grandezza `velocità angolare’) o peggio ancora di giri (per parlare della misura della velocità angolare).
                        Comunque queste sono osservazioni chiaramente off topic.

                        Concludendo: siccome sei un fisico e siccome la fisica è una scienza, devi usare i km/s 🙂

                      • #78970
                        Up
                        0
                        Down
                        ::


                        Grazie per i consigli. Ho aggiunto l’opzione per impostare la virgola come separatore decimale, ma ora utilizza il punto per separare i numeri… 😕

                        Come faccio a toglierlo?

                        Questo il mio codice:

                        `\usepackage{pgfplots}
                        \pgfplotsset{/pgf/number format/use comma,compat=newest}

                        % Figure
                        \begin{figure}
                        \centering
                        \begin{tikzpicture}
                        \begin{axis}[xmin=0,xmax=200,ymin=0,ymax=5600,title={Simulation sans parachute},%
                        xlabel=Temps (\si{\second}), ylabel=Vitesse (\si{\meter\second^{-1}}),%
                        legend cell align=left]

                        \addplot[each nth point={10},black,thick]
                        file {Data/curiosity_analitical.dat};
                        \addplot[red,thick]
                        file {Data/curiosity_nopar_0.1s.dat};
                        \addplot[blue,thick]
                        file {Data/curiosity_nopar_1s.dat};
                        \addplot[yellow,thick]
                        file {Data/curiosity_nopar_10s.dat};
                        \addplot[green,thick]
                        file {Data/curiosity_nopar_20s.dat};

                        \legend{Eq. \eqref{eq:sol}, \(\tau=\SI{0.1}{\second}\), \(\tau=\SI{1}{\second}\), \(\tau=\SI{10}{\second}\), \(\tau=\SI{20}{\second}\)}
                        \end{axis}
                        \end{tikzpicture}
                        \caption[Simulation sans parachute]{Simulation de la descente de la sonde Curiosity sans parachute. Différents pas de temps \( \tau \) sont utilisés pour confronter les résultats numériques avec la solution analytique.}
                        \end{figure}
                        % Figure

                        % Figure
                        \begin{figure}
                        \centering
                        \begin{tikzpicture}
                        \begin{axis}[xmin=0,xmax=500,ymin=0,ymax=5600,title={Simulation avec parachute},%
                        xlabel=Temps (\si{\second}), ylabel=Vitesse (\si{\meter\second^{-1}}),%
                        legend cell align=left]

                        \addplot[each nth point={10},black,ultra thick]
                        file {Data/curiosity_analitical.dat};
                        \addplot[red,thick]
                        file {Data/curiosity_par_0.1s.dat};
                        \addplot[blue,thick]
                        file {Data/curiosity_par_1s.dat};
                        \addplot[yellow,thick]
                        file {Data/curiosity_par_10s.dat};
                        \addplot[green,thick]
                        file {Data/curiosity_par_20s.dat};

                        \legend{Eq. \eqref{eq:sol},\(\tau=\SI{0.1}{\second}\), \(\tau=\SI{1}{\second}\), \(\tau=\SI{10}{\second}\), \(\tau=\SI{20}{\second}\)}
                        \end{axis}
                        \end{tikzpicture}
                        \caption[Simulation avec parachute]{Simulation de la descente de la sonde Curiosity avec parachute. Différents pas de temps \( \tau \) sont utilisés pour confronter les résultats numériques avec la solution analytique de la descente sans parachute.}
                        \end{figure}
                        % Figure`

                        Inoltre, come si può notare, il secondo grafico è completamente sballato per via della soluzione instabile con un passo di tempo di 10s. Come mai, malgrado le opzioni, il grafico mostra anche y negative o y molto elevate?

                        Attachments:
                        You must be logged in to view attached files.
                      • #78971
                        Up
                        0
                        Down
                        ::


                        Come utilizzo i km/s se i risultati del programma C++ (creato dal professore, noi dovevamo solo completarlo) sono dati in m/s? Devo farlo manualmente con ytick e yticklabels o c’é un modo automatico?

                      • #78972
                        OldClaudio
                        Partecipante
                          Up
                          0
                          Down
                          ::


                          La documentazione esiste ma è difficile da trovare, perché rinvia alla documentazione di pgfplotstable; qui poi bisogna saper leggere l’indice; ,a il tutto è descritto nel §2.7.1. Per lo spazio fine basta scrivere `/pgf/number format/use comma,1000 sep={\,}`

                          Per la caduta con il paracadute, direi che sia il diagramma verde quello troppo instabile e se uno dei punti del diagramma vale –qualcosa per 10^{185} è chiaro che questo dato sballa tutto e cambiando scala, gli altri diagrammi si appiattiscono sull’asse delle ascisse. Esamina leggendola la lista dei dati della curva verde e vedi se si tratta di rumore, o se c’è solo un punto che ha prodotto una saturazione negativa; vedi se eliminando quel dato il diagramma viene bene.

                        • #78973
                          Liverpool
                          Partecipante
                            Up
                            0
                            Down
                            ::


                            Per il separatore delle migliaia, ti ha già risposto Claudio, comunque per essere completi usa:
                            `\pgfplotsset{/pgf/number format/.cd, use comma, 1000 sep={\,}, min exponent for 1000 sep=4}`per indicare che la separazione ha inizio dopo il numero 10000.

                            Per avere le ordinate in km/s, è sufficiente applicare un filtro. Tra le opzioni di axis aggiungi [tt]y filter/.code=\pgfmathdivide{#1}{1000}[/tt]. A questo punto le impostazioni sul separatore delle migliaia sono superflue.

                            Per il terzo problema, non so. Il codice mi sembra a posto. Potresti allegare in un file compresso i file dei dati? Altrimenti il codice è incompilabile…

                            Ciao

                            Edit: prima di allegare i dati, puoi provare a vedere per conto tuo che succede aggiungendo alle opzioni di axis [tt]restrict y to domain=0:5.6[/tt]

                          • #78974
                            Up
                            0
                            Down
                            ::

                            OldClaudio” post=78162La documentazione esiste ma è difficile da trovare, perché rinvia alla documentazione di pgfplotstable; qui poi bisogna saper leggere l’indice; ,a il tutto è descritto nel §2.7.1. Per lo spazio fine basta scrivere `/pgf/number format/use comma,1000 sep={\,}`

                            Per la caduta con il paracadute, direi che sia il diagramma verde quello troppo instabile e se uno dei punti del diagramma vale –qualcosa per 10^{185} è chiaro che questo dato sballa tutto e cambiando scala, gli altri diagrammi si appiattiscono sull’asse delle ascisse. Esamina leggendola la lista dei dati della curva verde e vedi se si tratta di rumore, o se c’è solo un punto che ha prodotto una saturazione negativa; vedi se eliminando quel dato il diagramma viene bene.

                            So che il grafico verde è completamente sballato perché in tale caso l’algoritmo è instabile. Mi chiedevo come mai pgfplots mi mostra il grafico sballato (cioé fino a valori di 10^{185}) anche se ho impostato ymin e ymax…

                            Per quanto riguarda il comando che mi avete fornito entrambi, sembra non funzionare… Ottengo l’errore: “I don’t know the key ‘/pgfplots/1000 sep’… Come mai?

                          • #78975
                            Liverpool
                            Partecipante
                              Up
                              0
                              Down
                              ::

                              Rocco M.” post=78169Per quanto riguarda il comando che mi avete fornito entrambi, sembra non funzionare… Ottengo l’errore: “I don’t know the key ‘/pgfplots/1000 sep’… Come mai?

                              Hai scritto il [tt]\pgfplotsset[/tt] esattamente come il mio? Perché devi dire a pgfplots di cercare l’opzione in number format. Da solo pgfplots non sa che 1000 sep appartiene alla directory number format. Per indicarlo, o lo devi specificare per ogni chiave (e quindi una volta per use comma e una per 1000 sep), oppure gli devi indicare di cambiare directory una volta per tutte e cercare lì le opzioni che seguono.

                            • #78976
                              Up
                              0
                              Down
                              ::

                              Liverpool” post=78171

                              Per quanto riguarda il comando che mi avete fornito entrambi, sembra non funzionare… Ottengo l’errore: “I don’t know the key ‘/pgfplots/1000 sep’… Come mai?

                              Hai scritto il [tt]\pgfplotsset[/tt] esattamente come il mio? Perché devi dire a pgfplots di cercare l’opzione in number format.

                              Ora l’ho scritto esattamente come l’hai scritto tu e non funziona più compat=newest… 😕

                            • #78977
                              Liverpool
                              Partecipante
                                Up
                                0
                                Down
                                ::

                                Rocco M.” post=78172Ora l’ho scritto esattamente come l’hai scritto tu e non funziona più compat=newest… 😕

                                Forse perché l’hai messo in fondo. Ho modificato il messaggio precedente con una spiegazione. La chiave compat appartiene alla directory radice di pgfplots…
                                `\pgfplotsset{compat=newest, /pgf/number format/.cd, use comma, 1000 sep={\,}, min exponent for 1000 sep=4}`

                              • #78978
                                Up
                                0
                                Down
                                ::

                                Liverpool” post=78173

                                Ora l’ho scritto esattamente come l’hai scritto tu e non funziona più compat=newest… 😕

                                Forse perché l’hai messo in fondo. Ho modificato il messaggio precedente con una spiegazione. La chiave compat appartiene alla directory radice di pgfplots…
                                `\pgfplotsset{compat=newest, /pgf/number format/.cd, use comma, 1000 sep={\,}, min exponent for 1000 sep=4}`

                                Ora ho capito e funziona. Cercherò di mettere a posto il grafico del paracadute (che tra l’altro forse è sbagliato perché sembra identico alla soluzione analitica) e se ho problemi posto ancora! 😉

                                Grazie mille ad entrambi!

                              • #78979
                                Up
                                0
                                Down
                                ::


                                Di nuovo io! ; ). Ho utilizzato il comando

                                `restrict y to domain=0:5600`

                                per restringere il campo del grafico. Questo comando funziona però come filtro ed elimina (ignora) tutti i punti non compresi in tale range. Il problema è che io ho bisogno che vengano disegnate anche le curve che escano da questo range, ma se escono già al secondo punto ciò non accade. Quello di cui necessito è poter disegnare tutto il grafico (con tutti i punti, differenti da inf e NaN, per quanto grandi o piccoli essi siano) e di guardarne solo una parte (ossia il dominio 0:5600)… È possibile? Come? (Credevo la funzione di ymin e ymax fosse proprio questa…).

                                Grazie!

                              • #78980
                                Up
                                0
                                Down
                                ::


                                Inoltre, se utilizzo
                                `\addplot[dashed]{1000}`

                                nei precedenti esempi da file non succede niente. Come mai? Se poi scrivo
                                `\addplot[orange] coordinates { (4 punti) }
                                \addplot[teal] coordinates { (1 punto) }`

                                Mi appare una linea continua che tocca tutti e 5 i punti… Come posso fare per ottenere i quattro punti su una linea e il terzo staccato e di colore differente?

                                Grazie!

                              • #78981
                                Liverpool
                                Partecipante
                                  Up
                                  0
                                  Down
                                  ::


                                  Troppe domande contemporaneamente. Risolviamo un problema alla volta, altrimenti non si capisce niente.

                                  Devo dedurre che non hai usato il filtro per i km/s, visto che parli di 0:5600. Sinceramente non ho capito qual è il problema (tranne che forse dovresti provare la variante [tt]restrict y to domain*[/tt] con valori opportuni es: [tt]restrict y to domain*=-20000:20000[/tt]). Anch’io pensavo che il compito di ymax fosse quello da te indicato, ma evidentemente c’è qualcosa che non va. Per questo ti avevo chiesto di allegare il file di dati della curva incriminata per provare un po’.

                                  Per il resto, posto che hai dimenticato tutti i punti e virgola, a me funziona tutto a dovere. Per il dashed, forse hai delle restrizioni sugli assi che non ti fanno vedere la linea (oppure prova con un altro visualizzatore pdf). Per l’altro non so che dire. Se ci scrivi un esempio minimo compilabile, vediamo di replicare il problema anche noi.

                                  Ciao

                                • #78982
                                  Up
                                  0
                                  Down
                                  ::

                                  Liverpool” post=78217Troppe domande contemporaneamente. Risolviamo un problema alla volta, altrimenti non si capisce niente.

                                  Devo dedurre che non hai usato il filtro per i km/s, visto che parli di 0:5600. Sinceramente non ho capito qual è il problema (tranne che forse dovresti provare la variante [tt]restrict y to domain*[/tt] con valori opportuni es: [tt]restrict y to domain*=-20000:20000[/tt]). Anch’io pensavo che il compito di ymax fosse quello da te indicato, ma evidentemente c’è qualcosa che non va. Per questo ti avevo chiesto di allegare il file di dati della curva incriminata per provare un po’.

                                  Per il resto, posto che hai dimenticato tutti i punti e virgola, a me funziona tutto a dovere. Per il dashed, forse hai delle restrizioni sugli assi che non ti fanno vedere la linea (oppure prova con un altro visualizzatore pdf). Per l’altro non so che dire. Se ci scrivi un esempio minimo compilabile, vediamo di replicare il problema anche noi.

                                  Ciao

                                  Scusa, hai ragione. Troppe domande in una volta.

                                  Questo è il grafico che cambia se aggiungo il secondo addplot. Io lo vorrei esattamente come se il secondo addplot non ci fosse, e con il punto del secondo addplot separato dalla linea degli altri tre punti e di colore differente.
                                  `\begin{figure}
                                  \centering
                                  \begin{tikzpicture}
                                  \begin{axis}[title={Erreur d'arrondi},xlabel={\(\tau\) (\si{\second})},ylabel={\(v(\SI{100}{\second})\) (\si{\meter\second^{-1}})}]
                                  \addplot[orange]
                                  coordinates {(10,875.52749808118) (1,993.78375548475) (0.1,1004.5025834295)};
                                  \addplot[teal] % Se elimino questo e la linea sottostante ottengo tre punti legati da una linea. Se aggiungo ottengo una linea continua passante per i quattro punti
                                  coordinates {(0,1005.34957684)}; % Io vorrei i tre punti legati dalla linea e questo quarto punto separato dal resto e di colore differente.
                                  \end{axis}
                                  \end{tikzpicture}
                                  \caption[\(\tau\) et erreur de troncature]{Le résultats de la vitesse à \(t = \SI{100}{\second}\) en fonction du pas de temps \(\tau\) montrent que la dépendance en \(\tau\) de l'erreur d'arrondi est linéaire, i. e. \(O(\tau)\). La vitesse calculée avec \(\tau = \SI{20}{\second}\) n'est pas reporté car avec un tel pas de temps l'algorithme d'Euler est instable.}
                                  \end{figure}`

                                  Questo invece il contenuto del file incriminato:
                                  `0 5500 227000
                                  20 -326.44454290086 233528.89085802
                                  40 -1833.9424425888 270207.73970979
                                  60 -51679.919240166 1303806.1245131
                                  80 -39692949.188774 795162789.9
                                  100 -23384720610291 4.676952073686e+14
                                  120 -8.1165054198238e+24 1.6233010839694e+26
                                  140 -9.7778389084672e+47 1.9555677816934e+49
                                  160 -1.4190263754218e+94 2.8380527508437e+95
                                  180 -2.9887228740931e+186 5.9774457481862e+187
                                  200 -inf inf
                                  220 -inf inf
                                  240 -inf inf
                                  260 -inf inf
                                  280 -inf inf
                                  300 -inf inf
                                  320 -inf inf
                                  340 -inf inf
                                  360 -inf inf
                                  380 -inf inf
                                  400 -inf inf
                                  420 -inf inf
                                  440 -inf inf
                                  460 -inf inf
                                  480 -inf inf
                                  500 -inf inf
                                  520 -inf inf
                                  540 -inf inf
                                  560 -inf inf
                                  580 -inf inf
                                  600 -inf inf
                                  620 -inf inf
                                  640 -inf inf
                                  660 -inf inf
                                  680 -inf inf
                                  700 -inf inf
                                  720 -inf inf
                                  740 -inf inf
                                  760 -inf inf
                                  780 -inf inf
                                  800 -inf inf
                                  820 -inf inf
                                  840 -inf inf
                                  860 -inf inf
                                  880 -inf inf
                                  900 -inf inf
                                  920 -inf inf
                                  940 -inf inf
                                  960 -inf inf
                                  980 -inf inf
                                  1000 -inf inf
                                  `

                                  Come vedi se utilizzo il filtro, rimane un unico punto. Io vorrei disegnare almeno la linea tra il primo e il secondo punto, ma lasciando gli assi calibrati sul grafico giusto (tra x tnel dominio 0:300 e y nel dominio 0:5600). Se cambio in km/s (cosa che pensavo di fare solo alla fine) non cambia niente.

                                  Grazie mille!

                                • #78983
                                  Liverpool
                                  Partecipante
                                    Up
                                    0
                                    Down
                                    ::


                                    Inizio a rispondere alla prima parte. Quando tu assegni esplicitamente delle opzioni ad addplot, lui ignora quelle di default (che comprendono l’uso dei marcatori) e parte con una linea nera senza marcatori. Poiché tu hai inserito solo un punto, non viene tracciata alcuna linea e quindi non vedi niente. Dovresti dire che vuoi un marcatore, ad esempio con [tt]mark=*[/tt]. Oltre tutto, i punti sono troppo vicini per vedere ad occhio la separazione tra linea e punto.

                                  • #78984
                                    Liverpool
                                    Partecipante
                                      Up
                                      0
                                      Down
                                      ::


                                      Indubbiamente il comportamento è anomalo, ma ti è andata già bene, perché di solito quando le dimensioni della tela sono molto più piccole dei valori da tracciare, si ha un errore di dimensioni troppo grandi dovuto al fatto che pgfplots converte i valori assoluti in punti. Sicuramente risolvi con:
                                      `restrict y to domain=-1000:6000`che diventa [tt]-1:6[/tt] se dividi le ordinate per 1000 (cioè km/s).

                                      Prima non andava perché tra 0 e 5600 c’è solo un punto e non è sufficiente per tracciare una linea. Devi scegliere un intervallo in cui ricadano almeno due punti (anche se fuori dalla tela).

                                    • #78985
                                      Up
                                      0
                                      Down
                                      ::

                                      Liverpool” post=78224Indubbiamente il comportamento è anomalo, ma ti è andata già bene, perché di solito quando le dimensioni della tela sono molto più piccole dei valori da tracciare, si ha un errore di dimensioni troppo grandi dovuto al fatto che pgfplots converte i valori assoluti in punti. Sicuramente risolvi con:
                                      `restrict y to domain=-1000:6000`che diventa [tt]-1:6[/tt] se dividi le ordinate per 1000 (cioè km/s).

                                      Prima non andava perché tra 0 e 5600 c’è solo un punto e non è sufficiente per tracciare una linea. Devi scegliere un intervallo in cui ricadano almeno due punti (anche se fuori dalla tela).

                                      Perfetto, così funziona bene!

                                      Grazie mille!

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

                                  Go to top