|
|
strcat zum Befüllen von Matrizen benutzen |
|
seppl123 |

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 06.07.08
|
 |
|
 |
Wohnort: Stuttgart
|
 |
|
 |
Version: 7.4.0
|
 |
|
|
 |
|
Verfasst am: 27.09.2010, 14:34
Titel: strcat zum Befüllen von Matrizen benutzen
|
 |
|
 |
|
Hallo,
ich versuche gerade ein Script zu schreiben, welches mir ermöglicht viele Messdaten bequem einzulesen und automatisiert auszuwerten.
Jede Messung wurde 5 mal wiederholt und bei verschiedenen Temperaturen wiederholt, hier Beispiele wie die Dateinamen sind:
Messung_50Grad_v01
Messung_50Grad_v02
Messung_50Grad_v03
Messung_50Grad_v04
Messung_50Grad_v05
Messung_100Grad_v01
Messung_100Grad_v02
usw.
Eingelesen hab ich die Daten jetzt mittels folgendem Code:
Das funktioniert auch ganz gut. Jetzt will ich die Daten die ich dort lade, zusammen in einer Matrix speichern. Beispielsweise will ich jeweils die erste Spalte der 5 Messungen bei 50 Grad zusammen in einer Matrix speichern.
Wie kann ich hier den Befehl strcat einbauen? Folgendes hier funktioniert nicht:
Es soll also hier eine Matrix entstehen, welche beispielsweise frequenz50 heißt und in 5 Spalten jeweils alle Frequenzwerte aus den Messungen v01, v02, v03, v04 und v05 gespeichert werden.
Kann mir jemand helfen wie ich das schaffe?
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 27.09.2010, 15:46
Titel: Re: strcat zum Befüllen von Matrizen benutzen
|
 |
Hallo Seppl123,
Zitat: |
Es soll also hier eine Matrix entstehen, welche beispielsweise frequenz50 heißt ... |
Mach das nicht. Dieses Forum wimmelt von Fragen, wie man nachher wieder elegant auf "frequenz50" zugreifen kann. Und dann soll das Programm auf 10.000 verschiedene Werte erweitert werden und wird ganz überraschen langsam...
Es ist viel sauberer, sicherer, wartbarer und logischer die Variablen mit einem entsprechenden Index abzuspeichern, z.B. "frequenz(50)" oder "frequenz(50, :, :)" oder "frequenz{50}" oder "frequenz.Spec = '50'; frequenz.Data = rand(1,100)".
Die Namen der Variablen mit Beutung zu versehen ist eine programmiertechnische Sackgasse. Die Römer haben zwar auch ihre Söhne durchnummeriert, aber es ist ja auch bekannt, was aus dem Römischen Reich geworden ist...
Gruß, Jan
|
|
|
seppl123 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 06.07.08
|
 |
|
 |
Wohnort: Stuttgart
|
 |
|
 |
Version: 7.4.0
|
 |
|
|
 |
|
Verfasst am: 28.09.2010, 14:35
Titel:
|
 |
|
 |
|
Hallo,
danke für deinen Tip. Erstmal vorweg: Ich bin kein Programmierer, somit habe ich das "Handwerk" nicht sehr gut erlernt. Matlab hab ich mir selbst beigebracht via Internet. Aus diesem Grund werden meine Skripte auch immer sehr groß. Beim aktuellen Skript habe ich ca. 2000 Zeilen für das Einlesen der Messdaten und ersten Verarbeitung.
Um das Programm nicht weiter aufzublähen würde ich bestimmte Zeilen gerne nur einmal schreiben und nicht für jeden Messdatensatz einzeln. Das sehe ich auch so als sinnvoll an, da mein Programm mit jeder Zeile langsamer wird.
Dazu benötige ich aber oben geschriebenes. Ich lese in einer for-Schleife die verschiedenen Datensätze (50 Grad, 100 Grad, 150 Grad, 200 Grad, usw.) und will dann alle Messdaten nach dem gleichen Prinzip auswerten und abspeichern. Dazu erscheint es mir schon sinnvoll die entsprechenden Befehle jeweils nur einmal zu programmieren und dann beim Abspeichern der Daten nur jeweils andere Namen zu vergeben.
Aus diesem Grund auch die Nachfrage nach der richtigen Anwendung von strcat.
PS: Ich versuche gerade auf anderem Wege das aufgeblähte Skript zu verkürzen. Ziel sind ca. 500 Zeilen statt 2000
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 29.09.2010, 15:30
Titel:
|
 |
|
 |
|
Hallo seppl123,
Zitat: |
Um das Programm nicht weiter aufzublähen würde ich bestimmte Zeilen gerne nur einmal schreiben und nicht für jeden Messdatensatz einzeln. Das sehe ich auch so als sinnvoll an, da mein Programm mit jeder Zeile langsamer wird. |
Ein Programm wird mit jeder Zeile langsamer, wenn man die Anzahl der Variablen erhöht. Je mehr Variablen Du hast, desto länger sind die Tabellen, die Matlab durchsuchen muss, wenn es auf eine Variable zugreifen möchte.
ist dewegen dramatisch effizienter bezüglich Speicherplatz und Zugriffsgeschwindigkeit als:
Zugegebenermaßen kann man bei 2 Variablen den Unterschied nur mit sehr großem Aufwand messen. Bei 1000 Variablen fällt das aber sehr ins Gewicht. Wenn man dann noch die Variablen-Namen dynamisch erzeugt, z.B. mit STRCAT und per EVAL darauf zugreift, hat Matlab überhautp keine Chance mehr, per JIT-Acceleration seine magischen Beschleunigungs-Methoden anzuwenden. Für zur Zeit der Komplierung (also beim ersten Einlesen des Files) bekannte Variablennamen kann Matlab nämlich schon die Indices aus einer statischen Tabelle auslesen und gleich ins Programm einfügen. Deshalb wird Matlab auch ausgebremst, wenn man eine bestimmte Variable immer wieder mit unterschiedlichen Typen belegt:
Und dann versuche das mal ohne "clear('v')" !
Deshalb gebe ich Dir den Rat: Konstruiere keine Variablen-Namen während der Laufzeit.
In der englischsprachigen CSSM-Newsgroup lautet die Antwort auf diese und ähnliche Fragen nach tausenden von Diskussionen nur noch: "Don't do it."
Matlab hat ein enormes Potential - viel Spaß beim Lernen!
Gruß, Jan
|
|
|
seppl123 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 06.07.08
|
 |
|
 |
Wohnort: Stuttgart
|
 |
|
 |
Version: 7.4.0
|
 |
|
|
 |
|
Verfasst am: 02.10.2010, 22:37
Titel:
|
 |
Vielen Dank für deine ausführliche Antwort. Ich werd es mal probieren, hab grad viel gelernt...
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 04.10.2010, 15:03
Titel: Re: strcat zum Befüllen von Matrizen benutzen
|
 |
Hallo seppl123,
Du möchtest also Aufwand betreiben, um dynamisch einen komplizierten Variablen-Namen erzeugen zu können, der den Index bereits als Namen eingebaut hat.
Wenn ich mir die vielen hundert ähnlichen Anfragen zu diesem Thema in diesem Forum anschaue, wird es dann ein paar Tage dauern, und dann fragst Du, wie Du dynamisch auf komplizierte Variablen-Namen wieer zugreifen kannst, in denen der Index innerhalb des Namens verborgen ist.
Darum antworte ich wie immer: Mach das nicht.
Wenn "temperatur" ein numerischen Messwert ist, verstecke ihn nicht im Namen. Benutze lieber Ein Struct mit dem Feld "Temperatur". Das gleiche für "volumen".
Später kann man das per numerischem Vergleich auch wieder finden:
Du kannst in diesem Forum nach EVAL suchen und von den zahlreichen Problemen von dynamisch erzeugten Variablen lesen.
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|