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

Matrizen sequenziell abarbeiten bzw. lokalisieren...

 

Hape
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.11.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 19.11.2008, 18:05     Titel: Matrizen sequenziell abarbeiten bzw. lokalisieren...
  Antworten mit Zitat      
Hallo zusammen,
ich hab noch nicht so viel MatLab Erfahrung, aber nachdem ich jetzt ewig nach einer Lösung für mein Problem gesucht hab stell ich lieber mal eine blöde Frage.

Ich habe 15 Dateien die B1.txt ... B15.txt benannt sind. Ich habe es fertig bekommen die einzelnen Dateien mit einer Schleife Stück für Stück in meinen workspace zu laden. Ich möchte sie dort ebenfalls Stück für stück abarbeiten.

Wie rufe ich jetzt mit einer weiteren Schleife die Matrizen einzeln auf, und war sequenziell?

Ich stelle mir das so in der Art vor:

Code:
%Auswahl
for i = 1:15
 
%Berechnung
 ergebnis  = 'B'i * irgendwas
save 'ergebnis'i.dat

end



Das ganze soll also bei jeder Schleifenwiederholung ablaufen und zwar zuerst für Matrize B1, dann B2 usw....


ich steh irgendwie auf dem Schlauch....wer nkann mir helfen?
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 19.11.2008, 18:54     Titel:
  Antworten mit Zitat      
Moin,

wieso löst du das Problem nicht in einer Schleife?

Wenn du die Dateien schon in einer Schleife einlesen kannst, dann kannst du doch auch die gewonnen Daten in der gleichen Schleife abspeichern.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Hape
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.11.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 19.11.2008, 19:24     Titel:
  Antworten mit Zitat      
naja beim einlesen hab ich mir einen String zusammengeschuster, aus:

"B", "Zahl von 1-15" und ".txt"

diesen String kann ich ohne Probleme an die Funktion "load" übergeben.

Wenn ich die Matrizen aber dann mal im Speicher hab will ich ja direkt mit ihnen rechnen und nicht über eine Funktion.

Im Grunde will ich sozusagen eine Berechnugn wie "B1 * B1" in einer allgemeinen Schleifen Schreibweise haben, also "Bi * Bi". Und wie das geht weiß ich net so recht ....


Ist die Sache jetzt klarerer ...? Danke schon mal!
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 19.11.2008, 19:29     Titel:
  Antworten mit Zitat      
Aha.

Wie lädst du denn die Dateien?

Wenn du die über
Code:
B{i} = load('dein string');
lädst, dann müsste es doch funktionieren, oder?

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2008, 19:41     Titel:
  Antworten mit Zitat      
Hallo,

oder du machst das ganze mit "eval", z.B. so
Code:
for i=1:10
eval(['B_tmp = B' num2str(i) ';']);
eval(['ergebnis' num2str(i) ' = B_tmp*B_tmp;']);


Ist aber eher abzuraten (generell sollte eval nur in Ausnahmefällen verwendet werden). Die Methode, die steve vorschlägt, ist um einiges eleganter, übersichtlicher und imho besser.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Hape
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.11.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 19.11.2008, 19:59     Titel:
  Antworten mit Zitat      
Die zwei Lösungsansätze sind nicht das was ich mir vorstelle.....




Also nochmal zu meiner Idee:
Ich lade die Datei mit folgendermaßen:

(z.B. bei der 10. Schleife, i sei also 10)

load ('B10.txt')
dann habe ich eine Matrix mit dem Namen "B10"

Diese will ich jetzt direkt referenzieren. Das Script muss also wissen das es die Matrix mit dem Buchstaben "B" und der Nummer "10" (i) benutzen soll.

Mein String-Zusammenschuster-Script kann ich da ja net verwenden, denn sonst stände ja z.B. irgendwas wie das hier da:

Neue_Matrix = ("B", "i") * ("B", "i") .....was natürlich net geht.




geh ich die Sache irgendwie zu kompliziert an?
Private Nachricht senden Benutzer-Profile anzeigen
 
siegi
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 14.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2008, 08:52     Titel:
  Antworten mit Zitat      
Die antwort von steve war doch schon die lösung, eigentlich genau das was du brauchst. Innerhalb einer schleife kannst du deine Strings von B1..B15 erstellen und mit der load funktion in den workspace laden
mit B{i} = load(['B',num2str(i),'.txt'])
Private Nachricht senden Benutzer-Profile anzeigen
 
Hape
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.11.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 20.11.2008, 09:13     Titel:
  Antworten mit Zitat      
nicht ganz ....

das Laden ist kein Problem, das hab ich hinbekommen, aber das ansprechen der Matrizen B1...B15 mit einer Variablen "i" bekomme ich nicht hin....

in meiner eigentlichen Berechnung habe ich bis jetzt
Code:
a = B1 .* (B1 >= treshold);

stehen. Das will ich irgendwie allgemein formulieren,sodass bei jeder Schleife eine ander B-Matrix angesprochen wird. Ich will also z.B. die B1 Matrix ansprechen (nicht die Datei B1.txt laden).

Mein Wunsch-Code sollte also so in der Art aussehen (was aber nicht geht):
Code:
for i = 1:15
a = B(i) .* (B(i) >= treshold);
end


Uiuiui.... ist es klarerer?
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 20.11.2008, 10:57     Titel:
  Antworten mit Zitat      
Hallo Hape,

ich versuche mal, es ganz deutlich zu machen: So, wie Du momentan die txt-Dateien lädst, ist es sehr schwierig, diese später in einer Schleife anzusprechen. Deshalb war der Vorschlag von steve und siegi, das Laden zu ändern, damit Du später sehr einfach mit B{i} auf die Matrizen zugreifen kannst.

Code:
for i = 1:15
    B{i} = load(['B',num2str(i),'.txt']);
    a = B{i} .* (B{i} >= treshold);
end


Du kannst natürlich auch erst in einer Schleife alle Matrizen erzeugen und danach in einer weiteren Schleife die Berechnungen durchführen.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Hape
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.11.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 20.11.2008, 11:11     Titel:
  Antworten mit Zitat      
Okay, vielleicht hab ich mich nur ein bisschen gesträubt die ganze Sache mit einem Array zu machen, aber so ist es wahrscheinlich schon schlauer.

Vielen 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 - 2024 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.