Re: Il disegno programmato nell’Arte di scrivere con LaTeX

#72643
Liverpool
Partecipante
    Up
    0
    Down
    ::


    Non c’è bisogno di chiedere scusa.

    1.a) La lentezza in fase di compilazione è inevitabile. Attualmente la soluzione migliore è la libreria external di pgf via TikZ (cap. 7 a pag. 349 del manuale), che salva una copia della figura in pdf e le volte successive carica quella, anziché rigenerare il grafico. Si carica con
    `\usepgfplotslibrary{external}
    \tikzexternalize`la seconda riga serve ad attivare la funzione. E’ necessaria una lettura del manuale per conoscere le opzioni.

    1.b) Lo sforamento della memoria. Non so se la risposta che ti do è pertinente, perché forse non ho capito bene il problema. Non dipende dalle potenzialità di calcolo di TeX, ma dalla mole di dati che è necessario memorizzare temporaneamente per tracciare il grafico, quindi il problema non si risolve ricorrendo alla funzione di importazione. La soluzione consiste nell’aumentare la memoria a disposizione di TeX (cap. 6 a pag. 346 del manuale di pgfplots e suggerimenti di Enrico su questo forum). Ho notato che a volte anche suddividere il dominio in intervalli disgiunti può risolvere il problema. Per questo mi sembra strano che il problema sia dato dal numero di grafici nel documento (una ventina, come dici tu). Potrebbe essere che tra di essi ce ne sia almeno uno che da solo sfora la memoria. Potresti mandarmi il sorgente per email?

    2) con [tt]samples=300[/tt] la compilazione richiede meno di 2 secondi e non mi dà nessun problema di memoria. Possibile che abbia problemi con [tt]samples=100[/tt]? Per principio sono generalmente contrario ai metodi di interpolazione per il tracciamento dei grafici, in sostituzione di un maggior numero di punti (ma stavolta il risultato è molto buono). Per informazione, in questo caso il metodo usato è quello delle curve di Bézier cubiche.

    3) [tt]samples=25[/tt]

    4) non ho capito bene cosa vuoi dire. Per le curve dello spazio puoi usare [tt]smooth[/tt]. Per il metodo di colorazione della superficie puoi usare [tt]shader=interp[/tt]. C’è anche la patchplot library (par. 5.6 a pag. 305 del manuale di pgfplots), in particolare con la chiave [tt]patch refines[/tt] per le griglie.

    5) vallo a capire. Una notazione alternativa è [tt]sin(\x r)[/tt] per dire che x è in radianti. In questo caso la barra rovesciata è obbligatoria.

    6) Una scelta come un’altra. Non è vero che [tt]thick, blue[/tt] implica [tt]no marks[/tt]. Se usi [tt]\addplot[/tt] invece di [tt]\addplot+[/tt] i marcatori non ci sono a meno che non lo decida tu.

    7) Dipende dalla visualizzazione. Se usi [tt]axis lines=box[/tt] (per difetto), così in Mathematica e Matlab come qui, l’etichetta dell’asse delle ordinate è centrata e ruotata (in Mathematica devi usare [tt]Frame->true, FrameLabel->{x,y}[/tt]). Se invece usi [tt]axis lines=middle[/tt] l’etichetta è in alto. Puoi modificarne lo stile a piacere con [tt]ylabel style[/tt].

    8 ) [tt]variable=\t[/tt] va scritto tra le opzioni di [tt]\addplot[/tt], non di [tt]\axis[/tt]. Quando tu usi un comando per generare una superficie, pgfplots si crea una matrice i cui elementi sono il prodotto cartesiano dei nodi di x per i nodi di y. Su queste coppie ordinate determina la quota in funzione dell’espressione che dai. Per intenderci, l’esempio del sombrero è equivalente a questa notazione:
    `\addplot3 [surf, samples=10, domain=-2*pi:2*pi, colormap/cool] ({x}, {y}, {sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)});`
    che vuol dire: il primo elemento è l’insieme dei nodi di x, il secondo quello dei nodi di y, il terzo è la funzione costruita sul loro prodotto cartesiano. Se tu dici [tt]samples y=0[/tt] vuoi che la y sia ignorata e che le coppie ordinate diventino funzione solo di x. Però il primo elemento della terna di parametri non è più [tt]{x}[/tt] come nel caso di default, ma è a sua volta una funzione di x, perciò quello che viene fuori è una curva dello spazio:il primo elemento è una funzione di x, il secondo una funzione di x e il terzo ancora una funzione della sola x (perché hai detto ingora y).

    9) azimut ed elevazione. Il manuale non è chiaro su quali siano i lati dell’azimut (che si possono desumere dalla prima figura del par. 4.10.1), però dice che la chiave [tt]view[/tt] è compatibile con l’omonimo comando di Matlab. Sulla guida di questo software si legge che l’azimut ha per lato fisso il semiasse negativo delle y, come mostra la figura seguente:

    [attachment=257]view.png[/attachment]

    10) Questa è difficile. La tridimensionalità di pgfplots è l’illusione generata dalla disposizione dei punti in un grafico bidimensionale. Il valore di [tt]z buffer[/tt] stabilisce quali sono i punti che vanno disegnati per primi e quindi possono essere nascosti dai successivi. Nel caso di [tt]sort[/tt] i punti più in profondità sono i primi. Il codice è corretto.

    11) Il problema è che Mathematica scive [tt]ComplexInfinity[/tt] nella tabella, ma pgfplots capisce solo inf e nan, perciò bisogna sostituire tutte le occorrenze del primo con uno dei secondi. Preferisco NaN perché noi non sappiamo se è +inf o -inf. Il codice Mathematica rivisto è:
    `out = Table[{x, Gamma[x]}, {x, -5, 5, 0.01}] /. {ComplexInfinity -> NaN};
    Export[“gamma.txt”, out, “Table”];`
    Il comando di tracciamento per pgfplots è
    `\addplot [unbounded coords=jump] file {gamma.txt};`
    [tt]unbounded coords[/tt] dice cosa fare quando incontra un valore inf o nan. In questo caso dice di ignorarlo, perciò il grafico viene interrotto nei punti adiacenti. Se avessi scelto [tt]discard[/tt] (default), avrebbe collegato con un segmento i punti adiacenti (come fa Mathematica).

    12) … gli americani! Scrivi
    `\begin{axis}[yticklabel style={/pgf/number format/set thousands separator={}}]`

    Attachments:
    You must be logged in to view attached files.

    Go to top