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

for mit dynamischen Variablen

 

Falke2
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 28.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2010, 12:09     Titel: for mit dynamischen Variablen
  Antworten mit Zitat      
Hallo Matlab-Forum,

hiermit poste ich meinen ersten Hilferuf. Vielen Dank schon jetzt für eure Zeit. Die anderen Artikel im Forum haben mir leider nicht geholfen.
Ich bin gerade beim Umsteigen auf Matlab und möchte in einer Schleife Vektoren berechnen. Jetzt habe ich probleme bei der Laufvariable.
Ich möchte alle die Norm (Skalarprodukt) aller Ergebnisvektoren von Ms-MM(n)

clear
Ms=[ 34168 ; 16152 ; -4635 ];
MM1=[ -4550 ; -705 ; -601 ];
MM2=[ -4552 ; -613 ; 1161 ];
AAA = zeros(2,1);
for n=1:2
AAA(n:2)=norm(Ms-MM(n)); %so stellte ich es mir vor
end

nach meinen Recherchen sollte es in etwa so sein:

clear
Ms=[ 34168 ; 16152 ; -4635 ];
MM1=[ -4550 ; -705 ; -601 ];
MM2=[ -4552 ; -613 ; 1161 ];
AAA = zeros(2,1);
for n=1:2

AAA(n:2)=norm(Ms-eval(['MM' int2str(n) '= n']));

end
Leider funktioniert es noch nicht wegen der eval Funktion welche mir MM1, MM2 usw. geben sollte.

Die Lösung sollte AAA =
4.2421
4.2590

Aus der Hilfe werde ich nicht wirklich schlau.
Vielen dank für eure Hilfe.
Falke2
Private Nachricht senden Benutzer-Profile anzeigen


Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 28.06.2010, 12:27     Titel:
  Antworten mit Zitat      
es war fast richtig, hab nur was kleines geändert.

Code:

Ms=[ 34168 ; 16152 ; -4635 ];
MM1=[ -4550 ; -705 ; -601 ];
MM2=[ -4552 ; -613 ; 1161 ];
AAA = zeros(2,1);
for n=1:2

AAA(n,1)=norm(Ms-eval(['MM' int2str(n)]));

end
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2010, 12:35     Titel:
  Antworten mit Zitat      
Hallo Falke,

an deinem Code ist lediglich eine Zeile nicht in Ordnung. Mit

Code:
AAA(n)=norm(Ms-eval(['MM',int2str(n)]))


funktioniert es.

Du könntest allerdings auch die einzelnen MM's in einer Matrix speichern und dann für die Berechnung auf die einzelnen Spalten zugreifen, z.B.:

Code:


Wäre wohl eleganter...

Gruß

Vega
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2010, 13:28     Titel:
  Antworten mit Zitat      
Dynamische Variablennamen... Nenene ;) Grundsätzlich ist es immer zu bevorzugen, alles in Matrizen abzulegen. Matlab erlaubt n-Dimensionale Matrizen - da bekommt man im Prinzip alles irgendwie einsortiert.

Zum einem ist das ganze dann deutlich schneller, zum anderen kann man sehr schnell und einfach feststellen, wie viele Elemente es nun gibt. Hat man eine unbestimmte Anzahl von Variablen, deren Namen einem bestimmten Muster folgen und möchte nun in einem Schleifendurchlauf auf jede dieser Variablen zugreifen, muss man erstmal rausfinden, welche Zahl hinter der letzten Variablen steht. Stehen die Werte alle in einer Matrix, weiß man sofort, wieviele Elemente die Matrix hat und entsprechend auch, bis wohin die Schleife laufen muss.
Ganz abgesehen davon, ist Code, in dem nicht 50% der Befehle sich mit den Variablennamen beschäftigen müssen deutlich besser lesbar.

Kurz: dynamische Variablennamen wirklich nur verwenden, wenn es gar nicht anders geht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Falke2
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 28.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2010, 14:16     Titel:
  Antworten mit Zitat      
Vielen Dank Fourier und vega1013 für die Verbesserung!

Wegen der Angesprochenen Zusammenfassung in einer Matrix, danke für den Hinweis. Am Anfang beim Programmieren finde ich es aber immmer
ein bisschen klarer wenn man mehr Arrays benutzt. Manchmal verliert man aus dem Blick wo was nochmal abgelegt war. Die Geschwindigkeit geht durch Schleifen natürlich verloren.
Frohes schaffen.
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.