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

einträge mittels "eval"-befehl finden und schreib

 

Ikarus

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2010, 18:24     Titel: einträge mittels "eval"-befehl finden und schreib
  Antworten mit Zitat      
hallo zusammen,

ich habe verschiedene matrizen (nx3) namens "b_i", i=1..50 (also b_1, b_2,...,b_50)

von diesen möchte ich jeweils die zugehörigen einträge der 1. und 2. spalte des maximums der dritten spalte in eine neue matrix b_neu schreiben.
beispiel:

b_1 =

900.0000 921.0000 0.4440
901.0000 921.0000 0.4173
899.0000 922.0000 0.3432
900.0000 922.0000 0.5465
901.0000 922.0000 0.5624

1. und 2. spalteneintrag des maximums der dritten spalte sind:

>> b_new(1,1:2) = b_1(b_1(:,3)==max(max(b_1(:,3))),1:2)

b_new =

901 922

Diese beiden Werte sind also die Einträge der ersten Zeile der b_new.

die nächste zeile von b_new ergibt sich dann durch:

b_new(2,1:2) = b_2(b_2(:,3)==max(max(b_2(:,3))),1:2)

.........

nun möchte ich das aber natürlich nicht per hand machen, sondern durchlaufen lassen, komme aber mit eval-funktion nicht weiter.
einer meiner versuche (erstmal ohne laufvariable):

Code:

for i=...
  eval(['b_new(i,1:2) = b_' num2str(i)' (b_' num2str(i) '(:,3)==max(max(b_' num2str(i)' (:,3))),1:2)'])
end
 

im übrigen komme ich an die matrix beispielsweise:

>> eval(['b_' , num2str(i)])

b_1 =

900.0000 921.0000 0.4440
901.0000 921.0000 0.4173
899.0000 922.0000 0.3432
900.0000 922.0000 0.5465
901.0000 922.0000 0.5624

aber wie komme ich nun an die einträge, z.b. b_1(1,2) mit num2str(i) und eval (vor allem wenn das geht, wie dann bitte in der o.g. schleife. eventuell geht das auch ohne eval (??)...

ich hoffe mein problem ist verständlich dargestellt und dass mir jemand helfen kann Smile wenn ich sonst selber doch noch den durchbruch schaffe, poste ich es natürlich hier anschließend.

lg,
christian


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 19.10.2010, 12:15     Titel:
  Antworten mit Zitat      
Hallo

Du musst ja alle i mit NUM2STR konvertieren

Code:

for i=1:50
  eval(sprintf('b_new(%d,1:2) = b_%d(b_%d(:,3)==max(max(b_%d(:,3))),1:2)',i,i,i,i))
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Ikarus

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2010, 13:02     Titel:
  Antworten mit Zitat      
Supi, das ist es... Vielen Dank !

ich frage mich nur, ob das wirklich so einfach war, so schnell bzw. kurz wie du es hingeschrieben hast. ich hab auch schon lange gebraucht herauszufinden, dass man mit eval verschiedene variablen mit laufindex erzeugen kann. bin aber auch noch nicht so lange mit matlab dabei..
wie dem auch sei, vielen dank nochmal !

grüße
Verschoben: 20.10.2010, 13:19 Uhr von denny
Von Simulink nach Programmierung
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.10.2010, 13:21     Titel:
  Antworten mit Zitat      
Hallo

Das Thema hat eigentlich mit Simulink nichts zu tun, deshalb verschiebe ich dein Beitrag in Forum Programmierung
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: 20.10.2010, 17:21     Titel: Re: einträge mittels "eval"-befehl finden und sch
  Antworten mit Zitat      
Hallo Ikarus,

Zitat:
ich habe verschiedene matrizen (nx3) namens "b_i", i=1..50 (also b_1, b_2,...,b_50)

Die beste Lösung dieses Problems wäre, erst gar nicht 50 verschiedene Variablen zu erstellen, sondern ein Cell-Array "b{i}". Einen Index in den Namen zu verstecken macht Programme schwerfällig und schwer zu debuggen. Wenn man dann noch mit EVAL darauf zugreift, werden alle schlauen Methoden, die Matlab verwendet um effizient zu rechnen, über den Haufen geworfen.

Eine einleuchtend bessere Idee einen Index zu verwenden ist, einen Index zu verwenden.
Ich habe ja auch nicht meine Telefonnummer an meinen Vornamen angehängt. ;-)

Wenn Dich das interesiert, kannst Du in ein paar dutzende Threads dazu lesen, die z.B. ich hier geschrieben habe.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Ikarus

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2010, 16:57     Titel:
  Antworten mit Zitat      
hey jan,

wo genau finde ich diese threads ?... mich würde es sehr interessieren, zumal ich (was ich zu erwähnen vergaß) ja unterschiedlich große matrizen b_i habe (unterschiedliche n bei nx3)..

viele grüße
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.10.2010, 17:53     Titel:
  Antworten mit Zitat      
Hallo Ikarus,

Versuche es doch mit der Such-Funktion. Das Stichwort "EVAL" sollte eigentlich helfen. Oder Du kannst in den Threads suchen, die ich geschrieben habe:
http://www.gomatlab.de/search.php?search_author=Jan+S

Gruß, Jan
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.