Seite 1 von 1

Problem: Submatrix in einer Matrix

Verfasst: Di 4. Apr 2017, 13:09
von cremefresh
Hallo, ich möchte eine große Matrizengleichung aufstellen und habe mir gedacht, dass ich einfach Submatrizen in einer Matrix aufstelle.
Doch das Ergebnis sieht leider so aus:
Bild

Dabei handelt es sich um eine 6x6 Matrix in dessen einträge die Submatrizen liegen.

Ich muss theoretisch nur die automatische Zentrierung der Einträge von der 6x6-Matrix ausschalten. Ist das ohne weiteres möglich?

Verfasst: Di 4. Apr 2017, 13:29
von markusv
Hallo,

ein lauffähiges Beispiel als Quellcode wäre hier sinnvoller als eine überdimensionale Grafik, die sich nicht komplett anschauen lässt.

Wie hast du die Matrizen denn erstellt?
Wenn du hier array nutzt, lässt sich das sicherlich schnell umsetzen, ein Beispiel siehe hier.

Daraus anbei noch ein Beispiel:
\documentclass{scrartcl}  
\begin{document}
\[
\begin{array}{r@{\,}l}
    \mathbf{A}_i(q_i) = & {}^{i-1}\mathbf{T}_i(\mathbf{q}_i) \\[1em]
    = & \left(\begin{array}{cccc}
        c_{\theta_i} & -s_{\theta_i} & 0 & 0 \\
        s_{\theta_i} & c_{\theta_i} & 0 & 0\\
        0 & 0 & 1 & 0 \\
        0 & 0 & 0 & 1\\
     \end{array}\right)\\[3em]
    = & \left(\begin{array}{cccc}
        c_{\theta_i} & -s_{\theta_i}c_{\alpha_i} & s_{\theta_i}s_{\alpha_i} & a_{i}c_{\theta_i} \\
        s_{\theta_i} & c_{\theta_i}c_{\alpha_i} & -c_{\theta_i}s_{\alpha_i} & a_{i}s_{\theta_i}\\
        0 & s_{\alpha_i} & c_{\alpha_i} & d_i \\
        0 & 0 & 0 & 1\\
     \end{array}\right)
\end{array}
\]
\end{document}

Verfasst: Di 4. Apr 2017, 14:04
von cremefresh
Dein Beispielcode hat mir sehr geholfen! Danke
Wie kriege ich jedoch weitere Matrizen rechts ran?

Verfasst: Di 4. Apr 2017, 14:14
von markusv
cremefresh hat geschrieben: Wie kriege ich jedoch weitere Matrizen rechts ran?
Indem du die array-Umgebung um weitere Spalten erweiterst.
Aus
\begin{array}{r@{\,}l}
wird dann
\begin{array}{r@{\,}l@{\,}l@{\,}l@{\,}l}
Die @{\,} definieren den Spaltenabstand, hier also ein halbes Leerzeichen. rllll heißt eine Spalte rechtsbündig, die restlichen linksbündig, genau wie bei Tabellen!

Das Studieren einer Einführung in Latex könnte sicherlich auch nicht schaden. :wink:

Verfasst: Di 4. Apr 2017, 15:01
von cremefresh
Danke, hat teilweise geklappt, denn die 4. Matrix in der 2. Zeile rutscht an eine komische Position:

Bild

mein Code sieht so aus:
% 

\[
\begin{array}{r@{\,}l@{\,}l@{\,}l@{\,}l}
    \mathbf{A}_i(q_i) = & {}^{i-1}\mathbf{T}_i(\mathbf{q}_i) \\[1em]
    = 
     & \left(\begin{array}{cccc}
        c_{\theta_i}& -s_{\theta_i}  & 0 &0 \\ 
        s_{\theta_i} & c_{\theta_i} & 0 &0 \\ 
        0&0  &1  &0 \\ 
        0 & 0 &  0& 1 \\
     \end{array}\right)
      \left(\begin{array}{cccc}
        c_{\theta_i} & -s_{\theta_i} & 0 & 0 \\
        s_{\theta_i} & c_{\theta_i} & 0 & 0\\
        0 & 0 & 1 & 0 \\
        0 & 0 & 0 & 1\\
     \end{array}\right)
     \left(\begin{array}{cccc}
        1& 0 & 0 &0 \\ 
        0 & 1 & 0 &0 \\ 
        0&0  &1  &d_i \\ 
        0 & 0 &  0& 1\\
     \end{array}\right)\\
     \left(\begin{array}{cccc}
        1& 0 & 0 &a_i \\ 
        0 & 1 & 0 &0 \\ 
        0&0  &1  &0 \\ 
        0 & 0 &  0& 1 \\
     \end{array}\right)\\
    = & \left(\begin{array}{cccc}
        c_{\theta_i} & -s_{\theta_i}c_{\alpha_i} & s_{\theta_i}s_{\alpha_i} & a_{i}c_{\theta_i} \\
        s_{\theta_i} & c_{\theta_i}c_{\alpha_i} & -c_{\theta_i}s_{\alpha_i} & a_{i}s_{\theta_i}\\
        0 & s_{\alpha_i} & c_{\alpha_i} & d_i \\
        0 & 0 & 0 & 1\\
     \end{array}\right)
\end{array}
\]

 

Verfasst: Di 4. Apr 2017, 15:13
von markusv
cremefresh hat geschrieben:hat teilweise geklappt, denn die 4. Matrix in der 2. Zeile rutscht an eine komische Position:
Das liegt an deinem komischen Code :lol:

Nein Spaß beiseite. Du musst Latex natürlich sagen, wann eine Spalte beendet ist. Dies tust du mit &. Eine Zeile beendest du mit \\.

Wie in den Submatrizen musst du dies auch für die umgebende Matrix tun.
Hier hast du einiges durcheinander gewürfelt. Nach der 3. Matrix kommt ein \\, dies sollte ein & sein. Außerdem trennst du die vorherigen Submatrizen nicht durch &. So werden alle einfach nur als eine Spalte betrachtet.

Siehe folgenden Code:
\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
% 

\[
\begin{array}{r@{\,}l@{\,}l@{\,}l@{\,}l}
    \mathbf{A}_i(q_i) = & {}^{i-1}\mathbf{T}_i(\mathbf{q}_i) \\[1em]
    = 
    & 
    \left(\begin{array}{cccc}
        c_{\theta_i}& -s_{\theta_i}  & 0 &0 \\ 
        s_{\theta_i} & c_{\theta_i} & 0 &0 \\ 
        0&0  &1  &0 \\ 
        0 & 0 &  0& 1 \\
     \end{array}\right)
    &
    \left(\begin{array}{cccc}
        c_{\theta_i} & -s_{\theta_i} & 0 & 0 \\
        s_{\theta_i} & c_{\theta_i} & 0 & 0\\
        0 & 0 & 1 & 0 \\
        0 & 0 & 0 & 1\\
     \end{array}\right)
    &
    \left(\begin{array}{cccc}
        1& 0 & 0 &0 \\ 
        0 & 1 & 0 &0 \\ 
        0&0  &1  &d_i \\ 
        0 & 0 &  0& 1\\
     \end{array}\right)
    &
    \left(\begin{array}{cccc}
        1& 0 & 0 &a_i \\ 
        0 & 1 & 0 &0 \\ 
        0&0  &1  &0 \\ 
        0 & 0 &  0& 1 \\
     \end{array}\right)
     \\
     = 
     & 
     \left(\begin{array}{cccc}
        c_{\theta_i} & -s_{\theta_i}c_{\alpha_i} & s_{\theta_i}s_{\alpha_i} & a_{i}c_{\theta_i} \\
        s_{\theta_i} & c_{\theta_i}c_{\alpha_i} & -c_{\theta_i}s_{\alpha_i} & a_{i}s_{\theta_i}\\
        0 & s_{\alpha_i} & c_{\alpha_i} & d_i \\
        0 & 0 & 0 & 1\\
     \end{array}\right)
\end{array}
\]
 
\end{document}

Verfasst: Di 4. Apr 2017, 16:24
von cremefresh
Danke für die Tipps und deine Geduld! Aber ich hätte da noch ein letztes kleines Problem.
Tut mir wirklich leid, dass ich wegen jeder Kleinigkeit fragen muss.

Jetzt habe ich wieder das Problem, dass der Platz in den Spalten entsprechend der größten Matrize in den jeweiligen Zeile bestimmt wird:

Bild
% 
\[
\begin{array}{r@{\,}l@{\,}l@{\,}l@{\,}l}
    \mathbf{A}_i(q_i) = & {}^{i-1}\mathbf{T}_i(\mathbf{q}_i) \\[1em]
    =
    &
    \left(\begin{array}{cccc}
        c_{\theta_i}& -s_{\theta_i}  & 0 &0 \\
        s_{\theta_i} & c_{\theta_i} & 0 &0 \\
        0&0  &1  &0 \\
        0 & 0 &  0& 1\\
     \end{array}\right)
    &
    \left(\begin{array}{cccc}
        1& 0 & 0 &0 \\
        0 & 1 & 0 &0 \\
        0&0  &1  &d_i \\
        0 & 0 &  0& 1\\
     \end{array}\right)
    &
    \left(\begin{array}{cccc}
        1& 0 & 0 &a_i \\
        0 & 1 & 0 &0 \\
        0&0  &1  &0 \\
        0 & 0 &  0& 1 \\
     \end{array}\right)
     &
       \left(\begin{array}{cccc}
          1& 0 & 0 &0 \\ 
          0 & c_{\alpha_i} & -s_{\alpha_i} &0 \\ 
          0&s_{\alpha_i}  &c_{\alpha_i}  &0 \\ 
          0 & 0 &  0& 1 \\
     \end{array}\right)
     \\
     =
     &
      \left(\begin{array}{cccc}
     c_{\theta_i}& -s_{\theta_i} & 0 &0 \\ 
     s_{\theta_i} & c_{\theta_i} & 0 &0 \\ 
      0&0  &1  &0 \\ 
     0 & 0 &  0& 1\\ 
     \end{array}\right)
     &
      \left(\begin{array}{cccc}
        1&0 & 0 &a_i \\ 
      0 & 1 & 0 &0 \\ 
       0&0  &1  &d_i \\ 
      0 & 0 &  0& 1\\ 
     \end{array}\right)
     &
     \left(\begin{array}{cccc}
       1& 0 & 0 &0 \\ 
       0 & c_{\alpha_i} & -s_{\alpha_i} &0 \\ 
      0&s_{\alpha_i}  &c_{\alpha_i}  &0 \\ 
      0 & 0 &  0& 1 \\
     \end{array}\right)
      \\
      = 
      &
    \left(\begin{array}{cccc}
    c_{\theta_i}&-s_{\theta_i}\,c_{\alpha_i} & s_{\theta_i}\,s_{\alpha_i} & a_i\,c_{\theta_i} \\ 
    s_{\theta_i} & c_{\theta_i}\,c_{\alpha_i} & -c_{\theta_i}\,s_{\alpha_i} &a_i\,s_{\theta_i} \\ 
     0&s_{\alpha_i}  &c_{\alpha_i}  &d_i \\ 
     0 & 0 &  0& 1\\
     \end{array}\right)
\end{array}
\]
% Ende des Dokumentes 

Verfasst: Mi 5. Apr 2017, 07:22
von markusv
cremefresh hat geschrieben: Jetzt habe ich wieder das Problem, dass der Platz in den Spalten entsprechend der größten Matrize in den jeweiligen Zeile bestimmt wird:
Ja natürlich. Darum geht es bei Umgebungen mit Spaltendefinitionen.

Willst du alles nach dem = hintereinander haben, benutze entweder nur eine Spalte, oder versuch es mit der split-Umgebung:
\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
% 
\[
\begin{split}
	\mathbf{A}_i(q_i) = & {}^{i-1}\mathbf{T}_i(\mathbf{q}_i) \\[1em]
    =
    &
    \left(\begin{array}{cccc}
        c_{\theta_i}& -s_{\theta_i}  & 0 &0 \\
        s_{\theta_i} & c_{\theta_i} & 0 &0 \\
        0&0  &1  &0 \\
        0 & 0 &  0& 1\\
     \end{array}\right)
    \,
    \left(\begin{array}{cccc}
        1& 0 & 0 &0 \\
        0 & 1 & 0 &0 \\
        0&0  &1  &d_i \\
        0 & 0 &  0& 1\\
     \end{array}\right)
    \,
    \left(\begin{array}{cccc}
        1& 0 & 0 &a_i \\
        0 & 1 & 0 &0 \\
        0&0  &1  &0 \\
        0 & 0 &  0& 1 \\
     \end{array}\right)
     \,
       \left(\begin{array}{cccc}
          1& 0 & 0 &0 \\ 
          0 & c_{\alpha_i} & -s_{\alpha_i} &0 \\ 
          0&s_{\alpha_i}  &c_{\alpha_i}  &0 \\ 
          0 & 0 &  0& 1 \\
     \end{array}\right)
     \\
     =
     &
      \left(\begin{array}{cccc}
     c_{\theta_i}& -s_{\theta_i} & 0 &0 \\ 
     s_{\theta_i} & c_{\theta_i} & 0 &0 \\ 
      0&0  &1  &0 \\ 
     0 & 0 &  0& 1\\ 
     \end{array}\right)
     \,
      \left(\begin{array}{cccc}
        1&0 & 0 &a_i \\ 
      0 & 1 & 0 &0 \\ 
       0&0  &1  &d_i \\ 
      0 & 0 &  0& 1\\ 
     \end{array}\right)
     \,
     \left(\begin{array}{cccc}
       1& 0 & 0 &0 \\ 
       0 & c_{\alpha_i} & -s_{\alpha_i} &0 \\ 
      0&s_{\alpha_i}  &c_{\alpha_i}  &0 \\ 
      0 & 0 &  0& 1 \\
     \end{array}\right)
      \\
      = 
      &
    \left(\begin{array}{cccc}
    c_{\theta_i}&-s_{\theta_i}\,c_{\alpha_i} & s_{\theta_i}\,s_{\alpha_i} & a_i\,c_{\theta_i} \\ 
    s_{\theta_i} & c_{\theta_i}\,c_{\alpha_i} & -c_{\theta_i}\,s_{\alpha_i} &a_i\,s_{\theta_i} \\ 
     0&s_{\alpha_i}  &c_{\alpha_i}  &d_i \\ 
     0 & 0 &  0& 1\\
     \end{array}\right)
\end{split}
\]
% Ende des Dokumentes 
\end{document}
Diese kennt nur eine Trennstelle (&). Die Abstände der Submatizen habe ich selbst gesetzt (statt der nachfolgenden & in der array-Umgebung)

Verfasst: Mi 5. Apr 2017, 12:24
von cremefresh
Es sieht nun wunderbar aus!

Ich danke dir Markus! :wink: