Pattern di matrici

  • Questo topic ha 4 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 11 anni fa da OldClaudio.
  • Creatore
    Topic
  • #102895
    Enrico Maria
    Partecipante
      Up
      0
      Down
      ::


      Mi sono scontrato con questo problema quando ho iniziato a scrivere la tesi.
      E cioè mostrare la struttura di una matrice senza ricorrere a troppi \dots e in particolare senza arrivare a scritture, a mio parere pesanti, come questa. Ho cercato su google cose come “matrix pattern latex” (e tanti altri tentaivi) senza mai trovare qualcosa che mi aggradasse.
      In effetti io pensavo al mio professore di numerica che nell’indicare una matrice diagonale, ad esempio, disegnava un quadrato con la diagonale e, tutt’al più, spezzava quest’ultima nel mezzo scrivendo il numeretto che popolava la diagonale. E’ con queste idee in mente che cercavo sul web. Non trovando nulla ho usato tikz per ottenere qualcosa come in allegato.

      Qui, alla slide 6, potete vedere che a volte sono ben gradite, in determinati contesti, rappresentazioni abbastanza sintetiche. Per non parlare di questo paper: la figura 1 è il corrispettivo di quella fatta da me che vi allego.

      La domanda è: potrebbe essere di interesse la creazione di un pacchetto che possa fare figure del genere? Un pacchetto che presuppone il caricamento di tikz, naturalmente. Mi immagino una riga del codice tipo
      `
      \draw[width=1cm, height=1cm] tridiag {$\mathbf{A}_1$};
      `
      per fare un blocchetto dell’immagine che ho allegato.

      Sicuramente non in quanto a fattibilità, ma in quanto a utilità sto fantasticando?

      Attachments:
      You must be logged in to view attached files.
    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #102896
        Up
        0
        Down
        ::

        Aster1989″ post=102867La domanda è: potrebbe essere di interesse la creazione di un pacchetto che possa fare figure del genere? Un pacchetto che presuppone il caricamento di tikz, naturalmente. Mi immagino una riga del codice tipo
        `
        \draw[width=1cm, height=1cm] tridiag {$\mathbf{A}_1$};
        `
        per fare un blocchetto dell’immagine che ho allegato.

        Sicuramente non in quanto a fattibilità, ma in quanto a utilità sto fantasticando?

        Non avendo mai avuto la necessità di rappresentare matrici in questo modo non posso darti nessun feedback sull’utilità o di quanto interesse ci sia in merito. Su TeX.SX trovi numerose soluzioni al problema (cerca “matrix block” e varianti), ma non mi ricordo soluzioni che proponi tu.

        Quello che posso dire è che se vuoi creare un pacchetto con TikZ, appoggiati già alla libreria delle matrici. Il tuo pseudo codice presuppone di creare un operatore, il che non è proprio banale. Per esempio, questa è il codice che crea l’operatore rectangle 😮 : `% Syntax for rectangles:
        % rectangle
        \def\tikz@rect ectangle{%
        \tikz@flush@moveto%
        \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
        \tikz@@rect}%
        \def\tikz@@rect{%
        \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikz@@rect}{%
        \pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikz@@rect}%
        {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikz@@rect}%
        {
        \pgf@xa=\tikz@lastx\relax%
        \pgf@ya=\tikz@lasty\relax%
        \tikz@scan@one@point\tikz@rectB}}}}
        \def\tikz@rectB#1{%
        \tikz@make@last@position{#1}%
        \edef\tikz@timer@end{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
        \let\tikz@timer=\tikz@timer@line%
        \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
        \tikz@path@lineto{\pgfqpoint{\pgf@xa}{\tikz@lasty}}%
        \tikz@path@lineto{\pgfqpoint{\tikz@lastx}{\tikz@lasty}}%
        \tikz@path@lineto{\pgfqpoint{\tikz@lastx}{\pgf@ya}}%
        \iftikz@snaked%
        \tikz@path@lineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
        \fi%
        \pgfpathclose%
        \pgfpathmoveto{\pgfqpoint{\tikz@lastx}{\tikz@lasty}}%
        \def\pgfstrokehook{}%
        \let\tikz@tangent\relax%
        \tikz@scan@next@command%
        }` Ciao
        Claudio

      • #102897
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Io di matrici tridiagonali ne ho composte tante, ma mi sono trovato benissimo con l’ambiente array, ma suppongo che pmatrix e simili vadano altrettanto bene.
          Basta scrivere solo gli elementi sulle tre diagonali, mettendo dei \ddots dove vuoi interrompere la diagonale e non metti niente nelle caselle vuote; se proprio ci tieni metti uno 0 (zero) in neretto al centro di ciascuno dei triangoli vuoti. Il tutto risulta molto più leggibile con non quelle righe diagonali con i pallini neri. Un trattamento simile, molto più semplice, si applica alla colonna delle incognite e a quella dei termini noti.
          La situazione sarebbe molto diversa se dovessi creare delle matrici con delle suddivisioni contenti anche sotto-matrici rettangolari, perché il pacchetto amsmath ti mette a disposizione un comando per mettere una linea orizzontale di puntini che attraversa tutta la matrice, ma non mette a disposizione un comando equivalente per mettere una linea verticale di puntini. Ci si può arrangiare, ma non è banale.

        • #102898
          Enrico Maria
          Partecipante
            Up
            0
            Down
            ::

            OldClaudio” post=102874
            Basta scrivere solo gli elementi sulle tre diagonali

            Be’, tridiagonale non vuol dire per forza Toeplitz, però.

            Il tutto risulta molto più leggibile con non quelle righe diagonali con i pallini neri.

            Con quelle righe diagonali intendo dire che ci sono elementi non nulli, poco importa quali siano gli elementi, né se gli è stato attribuito un simbolo. L’idea che intendo dare con quelle figure è quella che si da con la funzione SPIKE di Matlab, per intenderci. Questo significherebbe riempire di pallini (\bullet, per esempio) le posizioni degli elementi non nulli, il che va bene per matrici di ordine basso, dove i pallini non si accavallano. Ma se la matrice è di ordine elevato o non specificato? E allora ho utilizzato quelle linee che intendono dire “qui ci sono elementi non nulli”. Per quanto riguarda i pallini nella figura che ho postato, hanno a che vedere con lo specifico problema che sto analizzando (è veramente tridiagonale, non daigonale a blocchi con blocchi tridiagonali).

            Vabbe’, comunque evidentemente non c’è diffusa necessità di rappresentare in questi modi la “sparsità” di una matrice (benché non mi risulti difficile trovare rappresentazioni non molto dissimili). Chiedo scusa 😳

          • #102899
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Non c’è da chiedere scusa. Hai fatto benissimo a chiedere.Chiedendo si ottengono tante risposte diverse che fanno pensare sia te si chi di noi le legge. Quindi hai fatto una cosa utilissima per te e per gli altri lettori, me compreso.

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

          Go to top