Verfasst am: 10.10.2013, 23:48
Titel: Ergebnismatritzen in Abhängigkeit von 2 Laufvariiablen
Hallo, vielleicht kann mir blutigen Anfängerin jemand helfen.
Ich habe drei for-Schleifen mit den Variiablen j,i und k und möchte,
dass für jedes i eine Ergebnismatrix erzeugt wird. In der für alle k in einer bestimmten Spalte
meine Ergebnisse stehen. Ich hab im Forum den assignin Befehl gefunden, aber damit weiß ich nicht wie
ich die Spalte, in die mein Ergebnis soll festlegen kann. Außerdem wird im Forum stark von EVAL, EVALIN
und ASSIGNIN abgeraten.Mein Versuchsfeld sieht im Moment so aus:
m=length(Koor(:,1));
n=length(b(:,1));
for i=1:m
for j=1:(n-1) if c(j,1)== Koor(i,1) && d(j,1)== Koor(i,2) assignin('base',['E_' num2str(i)], c(j,1)); %das Funktioniert, aber es fehlt noch dass es in E(k,1) stehen soll
E(k,3) = c(j,1); %hier fehlt die Abhängigkeit zu i
end end end end
Abend Hamsterbacke,
so richtig kann ich noch nicht verstehen was du möchtest... assignin umgehen? Dann gib deiner Funktion einen Output mit den entsprechenden Variablen.
Ich vermute mal, dass ein cell Array abhängig von k hierbei helfen kann.
Lieber ohne cell array, weil ich damit bisher auch nicht zurecht gekommen bin. Ich weiß nicht warum von assignin abgeraten wird. Wenn es nur um die Rechenzeit geht ist es mir egal.
Kann man denn mit assignin auch noch die Ergebnisse in bestimmte Spalten dieser Matritzen speichern? Also quasi E_i(k,1).
Vielen Dank
Von ASSIGNIN wird abgeraten, weil es das Programmieren viel komplizierter macht, wie Du gerade selbst siehst. Mir wird nicht mal klar, was die Zeile überhaupt bewirken soll.
Vielleicht meinst Du "E(i, k, 3)"?
Ein Cell-Array ist weit einfacher als ein ASSIGNIN-Konstrukt, das nicht funktioniert. Das wäre dann z.B. "E{i}(k, 3)". Aber richtig sinnvoll erscheint mir das immer noch nicht.
wie willst du später auf "E_1" bis "E_m" zugreifen? Richtig, dafür benötigst du dann wieder eval, was das ganze nur verkompliziert.
Versuch dich auf cells einzulassen, sie sind eine wichtige und hilfreiche Art Daten zu verwalten. Z.B. lassen sich so schön Arrays unterschiedlicher Länge in "einer Variable" speichern.
Dein Problem solltest du nochmal versuchen anderst zu beschreiben, ich werde nicht ganz so schlau aus deiner Beschreibung.
Zitat:
Ich habe drei for-Schleifen mit den Variiablen j,i und k und möchte,
dass für jedes i eine Ergebnismatrix erzeugt wird. In der für alle k in einer bestimmten Spalte
meine Ergebnisse stehen.
Eventuell lohnt es sich auch entweder die Daten mitzugeben (Anhang) oder minimale Testdaten zu erstellen und hier zusammen mit einem gewünschten Ergebnis posten.
Immer bedenken, dass wir lange nicht so tief in deinem Problem sind (quasi auch Anfänger ) wie du.
Ok, ich versuch jetzt erstmal noch besser zu beschreiben worum es mir geht.
Ich möchte eine große Menge Daten analysieren (z.B. Plots erzeugen) und dazu verschiedene Informationen in definierte Spalten einer Matrix schreiben. Diese Prozedur soll nicht nur für eine Matrix stattfinden
sondern i-Matritzen schreiben.So dass ich dann die Information a,b,c in den Spalten 1-3 stehen habe und
das für i-viele Szenarien in i-Matritzen.
Der folgende Code zeigt mal eine alternative Lösung für mein Problem, mit der ich aber nicht zufrieden bin. Die Ausgabe ist hier eine Matrix E mit 60 Spalten (für i=10). Ich hätte aber gerne 10 Matritzen mit 6 Spalten. Geht sowas nicht?
Code:
for k=1:2000 [a,b,c,d,e,f] = textread('Name'); %Ergebnisse einlesen
Koor = load('Name'); %Koordinaten einlesen
m=length(Koor(:,1));
n=length(b(:,1));
for i=1:m %Koordinaten
for j=1:(n-1) %Ergebnisvektor
if c(j,1)== Koor(i,1) && d(j,1)== Koor(i,2)
E(k,i*8-5) = c(j,1);
E(k,i*8-4) = d(j,1);
E(k,i*8-3) = c(j+1,1);
E(k,i*8-2) = d(j+1,1);
E(k,i*8-1) = e(j+1,1);
E(k,i*8) = f(j+1,1);
end end end end
Verfasst am: 11.10.2013, 14:24
Titel: Problem gelöst
Ich habs jetzt mit dem Cell Array gemacht und es hat gut geklappt. Hab etwas gebraucht, bis ich den Nutzen verstanden habe
Wieder was dazu gelernt!
Vielen Dank für die Hilfe
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
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.