PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Große Matrizen



W2K
07-03-2007, 22:24
Hallo,

ich habe folgendes Problem:

Ich muss eine große Matrix erzeugen, die lediglich auf einigen Diagonalen Elemente enthält - ansonsten nur Nullen. Also so genannte Bandmatrizen.

Dabei treten folgende Probleme auf:

1) Die Umgebung smallmatrix ist von der Schriftdarstellung genau richtig für mein Problem. Leider werden Punktlinien \ddots, \hdots, \vdots nicht mitskaliert, so dass die Diagonalstruktur in dem Feld nicht herauskommt.
2) Außerdem sind die Abstände zwischen den einzelnen Spalten und Zeilen zu groß.



\documentclass[a4paper, oneside, headsepline, 12pt]{scrbook}
\usepackage[ngerman]{babel} % Schriftsatz; neue dt. Rechtschreibung
\usepackage[latin1]{inputenc} % Dateicodierung:: Linux: latin1,
% Windows: ansinew
\usepackage[left=2.0cm, %
right=2.0cm, %
top=1.5cm, %
bottom=1.5cm, %
headheight=1cm, %
headsep=1.5cm, %
footskip=1.0cm, %
includeheadfoot]{geometry}
% Geometrie der Seiten setzen
\usepackage{color} % Farben
\usepackage{graphicx} % Grafiken
\usepackage{wrapfig} % Textumflossene Grafiken einfgen
\usepackage[table]{pstricks} % Packet, um PS-Zeichnungen einzufgen
\usepackage{pst-vue3d, pst-plot}
\usepackage{amsmath} % Erweiterungen mathematischer Umgebungen
\usepackage{setspace} % Zeilenabstand setzen
\usepackage{caption} % Bildunterschriften
\usepackage[colorlinks=true, %
citecolor=red, %
linkcolor=blue, %
pdfpagelabels=true]{hyperref}
\usepackage{calc}
\usepackage{multido}
\usepackage{pstricks}
\newcommand{\TCircle}[1]{
\setlength{\unitlength}{10pt}
\begin{pspicture}(0.0, 0.38)
\psovalbox[framesep=1pt, boxsep=1pt, linewidth=0.5pt,
linecolor=black,fillstyle=solid]{#1}
\end{pspicture}
}
%
\newcommand{\p}[2]{\frac{\partial#1}{\partial#2}}
%
\newcommand{\D}{
\begin{pspicture}(0.0, 0.0)
\psframe[linewidth=0.2pt,linestyle=dashed,dash=0.5mm 0.5mm,
framearc=0.0,fillstyle=solid,fillcolor=white](-0.1,-0.005)(0.1,0.195)
\end{pspicture}
}
%
\begin{document}
\begin{align}
\left(\begin{smallmatrix}
\D & \ddots & \hdots & \ddots & \D & \ddots & \hdots & \ddots &
\D & \D & \D & \ddots & \hdots & \ddots & \D & \ddots & \hdots &
\ddots & \D & \ddots & \vdots \\
0 & \D & 0 & \hdots & 0 & \D & 0 & \hdots & 0 &
\D & \D & \D & 0 & \hdots & 0 & \D & 0 & \hdots & 0 & \D & 0\\
\end{smallmatrix}\right)
\end{align}
\end{document}


Vielen Dank bereits im Voraus für die Unterstützung.

countbela666
08-03-2007, 12:44
Hallo,

wie wär's damit:

\let\orghdots\hdots
\let\orgddots\ddots
\let\orgvdots\vdots
\def\defaultscale{.5} %%% Standardwert
\renewcommand*{\hdots}[1][\defaultscale]{$\scalebox{#1}{$\orghdots$}$}
\renewcommand*{\ddots}[1][\defaultscale]{$\scalebox{#1}{$\orgddots$}$}
\renewcommand*{\vdots}[1][\defaultscale]{$\scalebox{#1}{$\orgvdots$}$}
%%% Verwendung
% \hdots % Skalierung mit Standardwert
% \hdots[1] % Originalgröße
% usw.Grüße
Marcel

W2K
08-03-2007, 13:44
Super.

Vielen Dank.

W2K
08-03-2007, 20:08
Das klappt bei mir leider nicht. Ich erhalte Fehlermeldungen aus denen ich nicht schlau werde:


Package hyperref Warning: Rerun to get /PageLabels entry.

! Missing \endgroup inserted.
<inserted text>
\endgroup
l.109 \end{align}

?

Ich habe mal meinen Code angehangen, so dass Du es leichter nachvollziehen kannst.

Zusätzlich würde ich gerne noch wissen, wie man den Schriftgrad benutzerdefiniert verändern kann, ohne auf \scriptsize zurückgreifen zu müssen (s.u.).


%------------------------------------------------------------------------------
\documentclass[a4paper, oneside, headsepline, 12pt]{scrbook}
%------------------------------------------------------------------------------
%
% Zustzliche Paktete
%
%------------------------------------------------------------------------------
\usepackage[ngerman]{babel} % Schriftsatz; neue dt. Rechtschreibung
\usepackage[latin1]{inputenc} % Dateicodierung:: Linux: latin1,
% Windows: ansinew
\usepackage[left=2.25cm, %
right=2.25cm, %
top=1.5cm, %
bottom=1.5cm, %
headheight=1cm, %
headsep=1.5cm, %
footskip=1.0cm, %
includeheadfoot]{geometry}
% Geometrie der Seiten setzen
\usepackage{color} % Farben
\usepackage{graphicx} % Grafiken
\usepackage{wrapfig} % Textumflossene Grafiken einfgen
\usepackage{multicol} % Paket fr mehrspaltige Dokumente
\usepackage{lscape} % Einzelne Seiten auf Landscape-Format
\usepackage{pstricks} % Packet, um PS-Zeichnungen einzufgen
\usepackage{pst-vue3d, pst-plot}
\usepackage{pst-gr3d}
\usepackage{subfig} % Bilder untereinander
\usepackage{amsmath} % Erweiterungen mathematischer \usepackage{pstricks}

%
\let\orghdots\hdots
\let\orgddots\ddots
\let\orgvdots\vdots
\def\defaultscale{.5} %%% Standardwert
\renewcommand*{\hdots}[1][\defaultscale]{$\scalebox{#1}{$\orghdots$}$}
\renewcommand*{\ddots}[1][\defaultscale]{$\scalebox{#1}{$\orgddots$}$}
\renewcommand*{\vdots}[1][\defaultscale]{$\scalebox{#1}{$\orgvdots$}$}
%
\newcommand{\D}{
\begin{pspicture}(0.0, 0.0)
\psframe[linewidth=0.2pt,linestyle=dashed,dash=0.5mm 0.5mm,
framearc=0.0,fillstyle=solid,fillcolor=white](-0.1,-0.005)(0.1,0.195)
%\psframebox[linewidth=0.5pt,linestyle=dashed,dash=0.5mm 0.5mm,
% framesep=0.3mm,fillstyle=solid,fillcolor=white]{
% \scriptsize{$\mathcal{B}$}}
\end{pspicture}
}


%\renewcommand{\hdots}{...}

\begin{document}
\begin{align}
\scriptsize{
\psmatrix[fillstyle=solid,rowsep=0.0,colsep=0.0]
1 & \hdots \\
%\D & \ddots & \hdots & \ddots & \D & \ddots & \hdots & \ddots &
%\D & \D & \D & \ddots & \hdots & \ddots & \D & \ddots & \hdots &
%\ddots & \D & \ddots & \vdots \\
%0 & \D & 0 & \hdots & 0 & \D & 0 & \hdots & 0 &
%\D & \D & \D & 0 & \hdots & 0 & \D & 0 & \hdots & 0 & \D & 0\\
\endpsmatrix }
\end{align}
\end{document}

countbela666
09-03-2007, 10:59
Das klappt bei mir leider nicht. Ich erhalte Fehlermeldungen aus denen ich nicht schlau werdeDas Problem ist die psmatrix-Umgebung. Anhand deines Codes kann ich auch nicht nachvollziehen, wozu du diese brauchst. Eine psmatrix wird genutzt, um automatisch jede "Zelle" mit einem Knotennamen zu versehen, damit man diese dann mit Linien verbinden kann. Diesen Anwendungsfall sehe ich bei dir nicht.

Wenn du stattdessen die array-Umgebung oder eine der matrix-Umgebungen des amsmath-Paketes verwendest, funktioniert dein Beispiel ohne Probleme:

...
\setcounter{MaxMatrixCols}{30}

\begin{document}
{\scriptsize
\begin{align}
%\scriptsize{
%\psmatrix[fillstyle=solid,rowsep=0.0,colsep=0.0]
\begin{pmatrix}
\D & \ddots & \hdots & \ddots & \D & \ddots & \hdots & \ddots &
\D & \D & \D & \ddots & \hdots & \ddots & \D & \ddots & \hdots &
\ddots & \D & \ddots & \vdots \\
0 & \D & 0 & \hdots & 0 & \D & 0 & \hdots & 0 &
\D & \D & \D & 0 & \hdots & 0 & \D & 0 & \hdots & 0 & \D & 0\\
%\endpsmatrix }
\end{pmatrix}
\end{align}}
\end{document}Weitere durchgeführte Änderungen sind:

scriptsize-Befehl aus der Matheumgebung genommen (funktioniert innerhalb nicht)
MaxMatrixCols erhöht (sonst funktionieren nur Matrizen mit bis zu zehn Spalten)


Zusätzlich würde ich gerne noch wissen, wie man den Schriftgrad benutzerdefiniert verändern kann, ohne auf \scriptsize zurückgreifen zu müssen???

Grüße
Marcel

W2K
19-05-2007, 20:12
Hallo ich habe noch ein Formatierungsproblem.

Um die Schrift in der Matrix zu verkleinern, benutze ich \scriptsize. Aus irgend einem Grund führt das aber im Moment dazu, dass der Zeilenabstand in dem Block direkt über der Matrix verkleinerrt wird. Dabei habe ich sogar ein \\ gesetzt.

Danke für die Hilfe ...

W2K
20-05-2007, 12:27
Und nun noch ein Problem...

Ich muss die gesamte Formel/Matrix verkleinern, da ich die Seitenränder geändert habe. Leider funktioniert es nicht mit einer Resizebox. Was kann man da machen?

Noch eine Beobachtung, die ich zu dem oben genannten Problem mit der Schrift in dem vorhergehenden Absatz gemacht habe:
Der Zeilen-Abstand ändert sich nicht, wenn ich eine Umgebung z.B.: {center} um die Matrix setze.

Schafmoeoe
03-06-2007, 18:55
auch ich hatte ein matrizenproblem - ich möchte eine 4x4 matrix darstellen - leider ist sie etwas länglich - ich würde also gern nach der zweiten Spalte einen Zeilenumbruch machen um dann spalte 3 und 4 darunter darstellen zu können. hier ist meine matrixdefinition - ich schreibe in der amsmathumgebung



$ ^{4}D\&H_{10}=$\\
\begin{equation}
\begin{pmatrix}
-sin(\theta_5) & cos(\theta_5)*cos(\theta_6)*cos(\frac{\pi}{30})+co s(\theta_5)*sin(\theta_6)*sin(\frac{\pi}{30}) & -cos(\theta_5)*cos(\theta_6)*sin(\frac{\pi}{30})+co s(\theta_5)*sin(\theta_6)*cos(\frac{\pi}{30}) & 83,93*cos(\theta_5)*cos(\theta_6)+13,65*cos(\theta _5)*sin(\theta_6)+11,75*sin(\theta_)\\
cos(\theta_5) & sin(\theta_5)*cos(\theta_6)*cos(\frac{\pi}{30})+si n(\theta_5)*sin(\theta_6)*sin(\frac{\pi}{30}) & -sin(\theta_5)*cos(\theta_6)*sin(\frac{\pi}{30})+si n(\theta_5)*sin(\theta_6)*cos(\frac{\pi}{30}) & 83,93*sin(\theta_5)*cos(\theta_6)+13,65*sin(\theta _5)*sin(\theta_6)-11,75*cos(\theta_)\\
0 & sin(\theta_6)*cos(\frac{\pi}{30})-cos(\theta_6)*sin(\frac{\pi}{30}) & sin(\theta_6)*sin(\frac{\pi}{30})-cos(\theta_6)*cos(\frac{\pi}{30}) & 83,93*sin(\theta_6)+244,82-13,65*cos(\theta_6)\\
0 & 0 & 0 & 1\\
\end{pmatrix}
\end{equation}



schlucken tut tex das ganze ohne probleme aber ab mitte 3 spalte steht der rest im Nichts ;).

Schafmoeoe
28-06-2007, 16:57
m ich versuch das noch mal - mein problem ist das ich einen vektor habe, der sehr lange elemente enthält. wenn ich das normal in einer equation umgebung mache - rutsch halt recht viel vom vektor über den rechten seiten rand

hier mal ein beispiel


% Formatierungseinstellungen

\documentclass[12pt,a4paper]{report}
%\documentclass[12pt,twoside,a4paper]{scrreprt}
\usepackage{a4}
\usepackage{psfig}
\usepackage{fancyhdr}
\usepackage{latexsym}
\usepackage{amsmath}
\usepackage{amssymb}
%-----------------------
\usepackage{makeidx} %package für den Index
\usepackage{multicol}
%%%%%%%% Index zweispaltig %%%%%%%
\makeatletter
\renewenvironment{theindex}{%
\setlength{\columnsep}{2em}
\begin{multicols}{2}[\section*{\indexname}]
\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\let\item\@idxitem}%
{\end{multicols}\clearpage}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeindex
%-----------------------
\usepackage{nomencl} %package für nomoklatur
\let\abk\nomenclature
\renewcommand{\nomname}{Nomenklatur}%??? hier entsteht noch kein ü
\makenomenclature
\NeedsTeXFormat{LaTeX2e}
\usepackage[dvips]{epsfig}
\usepackage[ansinew]{inputenc}
\usepackage{natbib}
\usepackage{float}
\usepackage{verbatim}
\usepackage{longtable}
\usepackage{tabularx} % Fuer Tabellen laenger als eine Seite
\usepackage{multicol}
\usepackage{ngerman}
%\usepackage{bibgerm}
\usepackage{color}
\usepackage{wrapfig}
%\usepackage{hangcaption}
\usepackage{floatflt}
\usepackage{afterpage}
\usepackage{moreverb} % z.B. \listinginput

\begin{document}

\begin{equation}
\vec w =
\begin{pmatrix}
s(\theta_1+\theta_2)s\theta_3s\theta_5+c(\theta_1+ \theta_2)c\theta_5a_8
+(-s(\theta_1+\theta_2)s\theta_3c\theta_5-c(\theta_1+\theta_2)s\theta_5)a_7
+s(\theta_1+\theta_2)c\theta_3d_6-c(\theta_1+\theta_2)d_3+a_1c\theta_1+a_0\\
c(\theta_1+\theta_2)s\theta_3s\theta_5-s(\theta_1+\theta_2)c\theta_5a_8
-c(\theta_1+\theta_2)s\theta_3c\theta_5+s(\theta_1+ \theta_2)s\theta_5)d_7
+c(\theta_1+\theta_2)c\theta_3d_6+s(\theta_1+\thet a_2)d_3+a_1s\theta_1\\
c\theta_s\theta_5a_8-c\theta_3c\theta_5d_7-s\theta_3d_6+d_2+d_0
\end{pmatrix}
\end{equation}
\end{document}




ich habe nun versuch das mit hilfe eines array zu lösen jedoch mußte ich da die klammer auf der einen seite offen lassen - was ein arry nicht zuläßt:( weiß einer eine lösung ?

Schafmoeoe
28-06-2007, 17:12
ich habe es gelöst bekommen ;)



% Formatierungseinstellungen

\documentclass[12pt,a4paper]{report}
%\documentclass[12pt,twoside,a4paper]{scrreprt}
\usepackage{a4}
\usepackage{psfig}
\usepackage{fancyhdr}
\usepackage{latexsym}
\usepackage{amsmath}
\usepackage{amssymb}
%-----------------------
\usepackage{makeidx} %package für den Index
\usepackage{multicol}
%%%%%%%% Index zweispaltig %%%%%%%
\makeatletter
\renewenvironment{theindex}{%
\setlength{\columnsep}{2em}
\begin{multicols}{2}[\section*{\indexname}]
\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\let\item\@idxitem}%
{\end{multicols}\clearpage}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeindex
%-----------------------
\usepackage{nomencl} %package für nomoklatur
\let\abk\nomenclature
\renewcommand{\nomname}{Nomenklatur}%??? hier entsteht noch kein ü
\makenomenclature
\NeedsTeXFormat{LaTeX2e}
\usepackage[dvips]{epsfig}
\usepackage[ansinew]{inputenc}
\usepackage{natbib}
\usepackage{float}
\usepackage{verbatim}
\usepackage{longtable}
\usepackage{tabularx} % Fuer Tabellen laenger als eine Seite
\usepackage{multicol}
\usepackage{ngerman}
%\usepackage{bibgerm}
\usepackage{color}
\usepackage{wrapfig}
%\usepackage{hangcaption}
\usepackage{floatflt}
\usepackage{afterpage}
\usepackage{moreverb} % z.B. \listinginput

\begin{document}

% Formatierungseinstellungen

\documentclass[12pt,a4paper]{report}
%\documentclass[12pt,twoside,a4paper]{scrreprt}
\usepackage{a4}
\usepackage{psfig}
\usepackage{fancyhdr}
\usepackage{latexsym}
\usepackage{amsmath}
\usepackage{amssymb}
%-----------------------
\usepackage{makeidx} %package für den Index
\usepackage{multicol}
%%%%%%%% Index zweispaltig %%%%%%%
\makeatletter
\renewenvironment{theindex}{%
\setlength{\columnsep}{2em}
\begin{multicols}{2}[\section*{\indexname}]
\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\let\item\@idxitem}%
{\end{multicols}\clearpage}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeindex
%-----------------------
\usepackage{nomencl} %package für nomoklatur
\let\abk\nomenclature
\renewcommand{\nomname}{Nomenklatur}%??? hier entsteht noch kein ü
\makenomenclature
\NeedsTeXFormat{LaTeX2e}
\usepackage[dvips]{epsfig}
\usepackage[ansinew]{inputenc}
\usepackage{natbib}
\usepackage{float}
\usepackage{verbatim}
\usepackage{longtable}
\usepackage{tabularx} % Fuer Tabellen laenger als eine Seite
\usepackage{multicol}
\usepackage{ngerman}
%\usepackage{bibgerm}
\usepackage{color}
\usepackage{wrapfig}
%\usepackage{hangcaption}
\usepackage{floatflt}
\usepackage{afterpage}
\usepackage{moreverb} % z.B. \listinginput

\begin{document}
\begin{equation}
\begin{pmatrix}
\begin{split}
s(\theta_1+\theta_2)s\theta_3s\theta_5+&c(\theta_1+\theta_2)c\theta_5a_8
+(-s(\theta_1+\theta_2)s\theta_3c\theta_5\\-c&(\theta_1+\theta_2)s\theta_5)a_7
+s(\theta_1+\theta_2)c\theta_3d_6-c(\theta_1+\theta_2)d_3+a_1c\theta_1+a_0
\end{split}\\
\begin{split}
c(\theta_1+\theta_2)s\theta_3s\theta_5-&s(\theta_1+\theta_2)c\theta_5a_8
-c(\theta_1+\theta_2)s\theta_3c\theta_5\\+s&(\theta_1+\theta_2)s\theta_5)d_7
+c(\theta_1+\theta_2)c\theta_3d_6+s(\theta_1+\thet a_2)d_3+a_1s\theta_1
\end{split}\\
c\theta_s\theta_5a_8-c\theta_3c\theta_5d_7-s\theta_3d_6+d_2+d_0
\label{eq:vektort}
\end{pmatrix}
\end{equation}

\end{document}

Schafmoeoe
26-08-2007, 13:20
Es gibt eine noch einfachere möglichkeit. Man nutzt einfach eine arryumgebung in der die einezelnen matrizenteile dargestellt werden und macht an den stellen an denen man keine klammer haben möchte einen Punkt. dieser wird als klammersymbol akzeptiert, jedoch nicht dagestellt. das stellt sich für mich als gegenwärtig atraktivste lösung dar. Hier ein beispiel



\begin{equation*}
R^\ast_{RPY}(\vec p \ )=\left(
\begin{array}{{c}l{c}l{c}l}
-s\Theta_0 & c\Theta_0c\Psi_0 & c\Theta_0s\Psi_0 \\
s\Phi_0c\Theta_0 & s\Phi_0s\Theta_0c\Psi_0-c\Phi_0s\Psi_0 & s\Phi_0s\Theta_0s\Psi_0+c\Phi_0c\Psi_0 \\
c\Phi_0c\Theta_0 & c\Phi_0s\Theta_0c\Psi_0+s\Phi_0s\Psi_0 & c\Phi_0s\Theta_0s\Psi_0-s\Phi_0c\Psi_0 \\
0 & 0 & 0
\end{array}
\right.
\end{equation*}
\begin{equation}
\left.
\begin{array}{{c}l}
-c\Theta_0c\Psi_0a8-c\Theta_0s\Psi_0d6+s\Theta_0d7+X_0 \\
-(s\Phi_0s\Theta_0c\Psi_0-c\Phi_0s\Psi_0)a8-(s\Phi_0s\Theta_0s\Psi_0+c\Phi_0c\Psi_0)d6-s\Phi_0c\Theta_0d7+Y_0\\
-(c\Phi_0s\Theta_0c\Psi_0+s\Phi_0s\Psi_0)a8-(c\Phi_0s\Theta_0s\Psi_0-s\Phi_0c\Psi_0)d6-c\Phi_0c\Theta_0d7+Z_0\\
1
\end{array}
\right)
\label{eq:rpyunddh004}
\end{equation}