WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

num2str in loop , und '

 

juniata
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.11.2011, 16:01     Titel: num2str in loop , und '
  Antworten mit Zitat      
Hallo,

ich versuche hier ein ganz simples Programm zu schreiben, das mir im Workspace vorhandene Matrizen addiert. Diese sind mit Flow100mlFA5_1, Flow100mlFA5_2 usw benannt. Mir ist bisher die Logik der Kommasetzung und der Apostrophe nicht ganz einleuchtend. Funktioniert das Ding deswegen vielleicht nicht? Habe schon verschiedene Varianten ausprobiert und dabei jeweils Bespiele genommen und mich ander Übertragung versucht. Kann mir jemand hier helfen?

Mittelung=zeros(130,256);

for n=1:2;
F='Flow100mlFA5_'num2str(n)'{1,2};
Mittelung = Mittelung + F;
end

Ah, vielleicht sollte ich noch dazu sagen, dass sich die zu addierenden Matrizen jeweils in der ersten Zeile, zweite Spalte befinden, deswegen {1,2}.

Vielen Dank!
Kathrin
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.11.2011, 17:00     Titel: Re: num2str in loop , und '
  Antworten mit Zitat      
Hallo Kathrin,

Dein code hat mit Matlab nicht viel gemeinsam. Ich empfehle die Getting Started Kapitel der Dokumentation durchzuarbeiten.

Es ist in jeder Programmiersprache ausgeprochen unpraktisch, die Indices in die Namen der Variablen zu packen, wie z.B. in "Flow100mlFA5_1", "Flow100mlFA5_2". Wie Du merkst wird dann der spätere Zugriff unnötig erschwert. Ein Idex ist viel besser als Index geeignet! Hört sich trivial an, aber es stolpern viele Programmierer darüber.

Code:

Mittelung=zeros(130,256);
Flow100mlFA5{1} = rand(3, 4);
Flow100mlFA5{2} = rand(3, 4);
etc.

In Deinem Fall sind die Daten wohl ganz anders, aber dies soll nur ein Beispiel sein. Bist Du sicher, dass Du zum Indizieren die geschweiften Klammern benötigst?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
juniata
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2011, 08:36     Titel:
  Antworten mit Zitat      
Ich gebe es ungern zu, aber getting started hab ich schon hinter mir. Vielleicht stehe ich auf dem Schlauch oder habe mich auf eine Lösungsidee versteift.

Die Matrizen werden mir so geliefert. Ich möchte einfach nur die Matrizen M_1{1,2}, M_2{1,2} usw. (einige hundert, umbenennen o.ä. keine Option) addieren, ohne spezifieren zu müssen wie viele es sind, denn die Anzahl ist immer verschieden. Das wollte ich später in das Skript einarbeiten, aber ich hänge ja schon jetzt, ohjeohje.

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.11.2011, 12:04     Titel:
  Antworten mit Zitat      
Hallo juniata,

Das Problem ist folgendes:
Code:
F='Flow100mlFA5_'num2str(n)'{1,2};   % ERROR

Hier werden zwei String und ein Cell Vector aneinandergehängt und Du erwartest, das aus den zwei Strings einer wird und dass dieser automatisch als Name der Variablen erkannte wird.

Eine Möglichkeit dies in validem Matlab auszuführen wäre:
Code:
F = eval(sprintf('Flow100mlFA5_%d{1,2}', n));

Aber schon beim Schreiben wird mir unwohl. EVAL ist immer immer immer wieder eine Quelle von Fehlern, unerwarteten Ergebnissen und es bremst Matlab brutal aus. Wenn Du schreibst, dass Du "einige hundert" Variablen hast, die "M_1, M_2, ..." heißen, halte ich es für das beste, das Programm zu löschen und von vorne zu beginnen - sorry.
Die Alternative ist, dass Du anfängst mit EVAL herumzuwursten, noch drei Wochen weiter programmierst, dann 4 Wochen mit Debuggen verbringst um festzustellen, dass das Programm einen Tag Laufzeit benötigt, obwohl die eigentlichen Berechnungen nur wenige Sekunden dauern.

Siehe: http://matlab.wikia.com/wiki/FAQ#Ho......2C....2CA10_in_a_loop.3F
Neben den Getting Started Kapiteln sind auch die FAQ ausgesprochen sinnvoll für Anfänger: Dort kann man aus den Fehlern lernen, die andere Programmierer gemacht haben, sogar "frequently".

Wie genau werden Dir die Matrizen "geliefert"? Stehen sie in MAT Files? Dann könnte man sie leicht konvertieren. Liefert sie ein anderes Programm in diesem Format? Dann teile dem Autor mit, dass dies Unfug ist. Ein programm mit "mehreren Hundert" Variablen kann kein Mensch debuggen oder warten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
juniata
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2011, 14:56     Titel:
  Antworten mit Zitat      
Hi Jan,

vielen Dank für die Hilfe! Es läuft jetzt und darf sich einen Wolf rechnen. Du hast recht, die eleganteste Lösung ist es nicht. Wenn Du das ganze Skript sehen würdest, würde Dir wahrscheinlich noch schlechter werden, denn es sind verschachtelte Loops mit noch mehr eval. Aber wenigstens läuft es jetzt erstmal. Ich schau nochmal, ob mir was besseres einfällt.

Vielen herzlichen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.