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

Skalar-Variablen aus Vektor auslesen

 

tom24
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 29.09.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2008, 20:28     Titel: Skalar-Variablen aus Vektor auslesen
  Antworten mit Zitat      
Hallo Leute,

vielleicht kann mir hier jemand helfen?

Im folgenden Fall ist x_p ein Spaltenvektor mit 3 Elementen. Seine Einträge sind Ergebnisse einer Rechnung, diese Einträge sollen nun wieder einzelnen Skalarvariablen zugewiesen werden (also der Vektor wird aufgespalten).

Wie mache ich das (für längere Vektoren) in einem Schritt, d.h. ohne jede Zuweisung einzeln hinschreiben zu müssen.

Ich habe es mit

Code:

[s1; s2; s3]=x_p


 


probiert, wobei s1, s2 und s3 die zu füllenden Skalarvariablen sind.
Das klappt natürlich so nicht!

Für einen Tipp wäre ich dankbar.
Beste Grüße,
Tom
Private Nachricht senden Benutzer-Profile anzeigen


samsa10
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 10.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2008, 20:43     Titel:
  Antworten mit Zitat      
Hallo

nenne deine drei skalaren-Variablen doch x_p(1) , x_p(2) und x_p(3). ;)
Eigens neue Variablen anlegen ist bestimmt nicht Performance dienlich.
Schlimmsten Falls einen zweiten Vektor anlegen, mit den Einträgen von x_p und dort die einzelnen Komponenten ansprechen.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
tom24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 29.09.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2008, 20:56     Titel:
  Antworten mit Zitat      
Hallo,

danke für deinen tipp aber so einfach geht es ja leider nicht.

du meintest

Code:

[s1; s2; s3] = [x_p(1); x_p(2); x_p(3)]
 

???

Dann kommt die Fehlermeldung:
??? Error: An array for multiple LHS assignment must be a vector.

als zeilenvektor geht es genauso wenig. wenn man schreibt
Code:

[s1 s2 s3] = [x_p(1) x_p(2) x_p(3)]
 


kommt die meldung
??? Too many output arguments.

ausserdem erspare ich es mir mit der lösung ja auch nicht, die lange rehcte seite komplett auszuschreiben (in wirklichkeit größerer vektor).

Noch einen besseren Vorschlag?
Danke und Grüsse
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 16.12.2008, 22:40     Titel:
  Antworten mit Zitat      
Die Frage bleibt, warum du nicht einfach die einzelnen Elemente des Vektors in den weiteren Schritten nutzt und umständlich in andere Variablen umschreiben willst?

Das ganze Umschreiben könntest du in einer for-schleife machen:

Code:

for i=1:length(x_p)
com=['s' num2str(i) '=x_p(' num2str(i) ');'];
eval(com)
end
 

_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
tom24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 29.09.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2008, 12:50     Titel:
  Antworten mit Zitat      
Vielen Dank.

Deine Frage im Detail zu beantworten würde etwas zu lange dauern. Kurz gesagt brauche ich für die einzelnen Elemente des Vektors sprechende Namen, da man sonst in meiner Parameterschätzung völlig den Überblick verliert. Die Variablen heißen nämlich leider in Wirklichkeit nicht s1-sn. Ich wollte das Problem nur möglichst einfach posten, was mir scheinbar nicht so ganz gelungen ist.

Außerdem reden wir von über 50 einzelnen m-files, in den die Variablen jeweils mehrfach verwendet werden, die ich nicht alle wieder ändern will. Das Programm ist über einen Zeitraum von 2 Monaten entstanden und die Notwendigkeit für den diskutierten Rechenschritt hat sich erst nachträglich ergeben.

Meine Idee war einfach folgende: In Matlab gibts ja eine ganze Reihe von Funktionen, die mehrere Argumente zurückgeben, z.B. [V,D] = eig(A) .
Daher dachte ich sollte es einen Befehl geben, bei der in ähnlicher Notation Werte aus einem Vektor x den einzelen Skalarvariablen zugeordnet werden.

Na ja, offenbar gibt es so was doch nicht, aber werd mich schon irgendwie arrangieren...

Gruß
Tom
Private Nachricht senden Benutzer-Profile anzeigen
 
samsa10
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 10.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2008, 14:45     Titel:
  Antworten mit Zitat      
Hallo,

Wenn du deine Variablen-Namen mit Nummerierung verteilst, das heißt
s1, s2, ... dann ist das doch gerade so gut wie mit x_p(1), x_p(2),... anzusprechen. Das heißt, ich gehe davon aus, du willst die Namen nicht nur nummeriert, sondern gänzlich verschieden (ansonsten könnte man ja mit den Komponenten arbeiten). Dann musst du aber ohnehin jeden Namen eigens angeben, und dann kannst du es ja gleich direkt zuweisen:
Code:

name1=x_p(1);
name2=x_p(2);
...
 


Es bleibt für mich also offen, wie sich das Problem - eine solche Zuweisung zu benötigen - überhaupt ergeben kann, da eigentlich nur die zwei oben genannten Fälle in Frage kommen...

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 17.12.2008, 16:09     Titel:
  Antworten mit Zitat      
50 m-files die alle nicht-funktional aufgebaut sind? *hm* Beim nächsten Projekt würde ich an deiner Stelle möglichst von anfang an funktional arbeiten.

Ansonsten bleibt dir nur die obige Zuweisung wie samsa sie dir beschrieben hat. Kannst ja eine Funktion draus machen. Smile
_________________

>> why
The computer did it.
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.