PDA

View Full Version : Latex main memory size



letscho84
24-10-2011, 21:35
Hallo zusammen,

ich arbeite mit dem Paket pgfplots und importiere immer mal wieder Datensätze in meine Datei. Nun tritt bei mir aber folgender Fehler auf:

TeX capacity exceeded, sorry [main memory size=3000000]

und es erfolgt kein Output.

Ich verwende zur Erstellung der Pdf´s TeXnicCenter. Nun habe ich heraus gefunden, dass dieser Fehler nur bei sehr großen Datensätzen auftritt. Ist es vielleicht möglich diese Speicherkapazität hinaufzusetzen?

Grüße, Letscho

bobmalaria
24-10-2011, 22:09
hi,

ja das ist möglich. allerdings solltest du dir eventuell vorher gedanken machen ob es nicht besser ist deine daten zu reduzieren. natürlich ist es verlockend einfach 10.000 datensätze einfach mal in ein diagramm zu packen.

aber dabei muss man sich fragen: sehe ich das im druck überhaupt?

die antwort ist natürlich: nein

also reicht es eventuell nur jeden 5. oder 10. punkt zu plotten.

da du texniccenter verwendest nehme ich an, dass deine distribution miktex ist. hier ist nämlich das limit zu verändern. bei texlive funktioniert das wieder anders.

für miktex also:

gehe in die eingabeaufforderung/dos-fenster.

gebe dort:


initexmf --edit-config-file=pdflatex

ein.

eine datei sollte sich önnen diese ist eventuell leer. dort dann


main_memory=4000000
extra_mem_bot=4000000
font_mem_size=4000000

einfügen und speichern. dannach nochmal versuchen.

eventuell solltest du dir auch die externalize funktion von tikz/pgf ansehen. damit können diagramme in bilder gespeichert werden und es muss nicht bei jedem kompilieren neu gerechnet werden.

gruss

Schweinebacke
25-10-2011, 07:51
Wenn man so viel main_memory für Plots benötigt, wird übrigens nicht nur TeX ein wenig langsam. Auch die Ergebnisdateien werden recht groß und der Seitenaufbau im Viewer oder Druckjob langsam.

letscho84
24-11-2011, 14:45
hi,

ja das ist möglich. allerdings solltest du dir eventuell vorher gedanken machen ob es nicht besser ist deine daten zu reduzieren. natürlich ist es verlockend einfach 10.000 datensätze einfach mal in ein diagramm zu packen.


Hallo bob,

danke für den Hinweis. Ich würde ja auch lieber gerne weniger Daten ploten. Jedoch sind die Datensätze, die ich für die Grafiken habe ziemlich groß. Also falls du einen guten Weg weißt, um Datensätze zu verkleinern UND dann dabei noch die Hauptaussage bei zu behalten. Dann bin ich immer offen für Vorschläge!

Mich würde noch interessieren, ob dieser Main Memory Faktor auf ein gesamtes Dokument begrenzt oder für jedes Bild neu berechnet wird?

Grüße, letscho

bobmalaria
24-11-2011, 16:15
hi,

bei der daten verkleinerung kommt es ganz auf die natur der daten an.
generelle tipps sind da schwer.

aber z.b. adjacent-averaging funktioniert unter umstaneden ganz gut. ein schnitt aus z.b. 5 punkten. entsprechende funktionen gibt es sicher in Origin oder auch R oder matlab oder sonst wo.

aber man kann aus spass mal rechnen. das paket layout sagt mir z.b. das ich mit der article class eine textbreite von 430pt habe. durch die achenbeschriftung und so verliere ich horizontal platz und da beliben mir dann, was weiss ich, 350pt fuer mein diagramm.
angenommen ich habe einen x/y datensatz mit 10 000 punkten der z.b. einen zeit/konzentrationsverlauf darstellt. mache meinen datenpunkt 1pt gross dann hab ich immer noch 10000/350=28 ca. 28x mehr punkte als ich visuell ueberhaupt darstellen kann.
da nur jeden 10 punkt zu plotten oder vorher zu mitteln ist sicher nicht falsch. natuerlich stimmt das nicht fuer alle datensaetze aber doch fuer viele.

wenn du natuerlich millisekunden aenderungen in einem plot ueber studnen hast, dann musst du aufpassen, aber dann ist das vermutlich auch nicht die richtige darstellungsform...

gruss

Schweinebacke
25-11-2011, 08:44
Bei Plots mit mehr Punkten, als überhaupt darstellbar sind, kann es sinnvoll sein, zunächst eine statistische Betrachtung darüber anzustellen, wie häufig ein Punkt in einem (tatsächlich darstellbaren) Gebiet auftritt. Man fasst also, wie bereits von meinen Vorrednern erwähnt benachbarte Punkte zu einem Punkt zusammen. Die Häufigkeit, in der Punkte in diesem Gebiet auftreten, sind dann eine neue Dimension. Bei zweidimensionalen Daten, könnte man nun einen dreidimensionalen Plot erstellen. Der ist aber am Ende kaum übersichtlicher. Ich habe hingegen schon gesehen, dass bei solchen Plots als dritte Dimension dann eine Spektralfarbe zwischen blau und rot verwendet wurde, um die Häufigkeit darzustellen. Alternativ kann man die Gebiete größer fassen und dann Punkte dicker oder dünner malen. Gegenüber kleineren Gebieten (bei denen näher beieinander liegende Gebiete dann ggf. ebenfalls fetter wirken) hat man hier die Möglichkeit die Skala selbst zu wählen, also beispielsweise den Radius eines Punktes über den Zehnerlogarithmus statt die Wurzel der Häufigkeit zu bestimmen. Dabei ist es sogar möglich, den Radius über die Gebietsgrenzen hinaus zu vergrößern, wenn man Überdeckungen farblich darstellen kann. Man kann den Aufwand für eine aussagekräftige Lösung hier beliebig steigern. Einfach wahllos Punkte zu erzeugen, die drucktechnisch und optisch nicht mehr von bereits vorhandenen Punkten abgrenzbar sind, ist auf jeden Fall die schlechteste Lösung.

letscho84
25-11-2011, 11:20
Ich danke euch für die Ausführungen. Nach langem probieren habe ich eine gute Möglichkeit gefunden meine Datensätze zu verkleinern. Jedoch sagt mir Latex immernoch das der main memory nicht ausreicht. Daher meine Frage, ob sich dieser auf eine Abbildung oder ein Dokument beschrenkt?

Grüße, Letscho

Schweinebacke
25-11-2011, 11:24
Es beschränkt sich darauf, was gleichzeitig im Speicher gehalten werden muss. Dazu gehört neben der aktuellen Seite einschließlich des kompletten Absatzes, der eventuell nicht mehr auf die aktuelle Seite passt (das kann dazu führen, dass mehrere große Grafiken, die später auf mehrere Seiten verteilt werden aber im gleichen oder zwei aufeinander folgenden Absätzen enthalten sind, auch einmal gleichzeitig im Speicher gehalten werden müssen), auch alle definierten Makros. Ob pgfplot zusätzliche Makros je plot definiert, weiß ich nicht. Ich gehe aber davon aus, dass nach dem Ende der aktuellen tikz-Umgebung nicht viel davon übrig bleibt.

Du kannst das aber leicht selbst testen, indem Du nur ca. die letzten beiden Bilder vor der Fehlermeldung in eine eigene Datei packst.

BTW: Bereits eine Punktedichte von 100dpi nimmt das Auge nicht mehr als Punkte, sondern als Linie (in zwei Dimensionen dann als Fläche) wahr. Ein Textbereich einer A4-Seite ist grob gechätzt 8" hoch und 6" breit. Also wären das ca. 480000 Punkte, die maximal verwendbar sind aber bereits als homogene, graue Fläche wahrgenommen werden. Ich nehme an, dass man sich auf weit weniger als 5000 Punkte beschränken sollte. Gibt das bereits Probleme?

letscho84
25-11-2011, 11:35
Das würde heißen, wenn die Großen Datensätze auf unterschiedlichen Seiten bzw Abschnitten untergebracht wären, dürfte es kein Speicherproblem geben?!?

Schweinebacke
25-11-2011, 11:37
Wie gesagt, weiß ich zu wenig von der internen Arbeitsweise von tikz und pgfplots, um dazu definitiv etwas sagen zu können. Ich würde aber genau davon ausgehen.