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

mehrere if-Anweisungen mit einer for-Schleife vereinfachen

 

Primo00
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.03.2010, 21:21     Titel: mehrere if-Anweisungen mit einer for-Schleife vereinfachen
  Antworten mit Zitat      
Hallo,

habe hier diese if-Anweisungen, könnte mir bitte einer sagen, wie ich diese mit einer for Schleife vereinfachen kann, damit ich nicht mehr so viele if-Anweisungen hintereinander schreiben muss.

if strcmp(aRT0, 'a^0')
aRT0=0;
x0=1;
end
if strcmp(aRT1, 'a^0')
aRT1=0;
x1=1;
end
if strcmp(aRT2, 'a^0')
aRT2=0;
x2=1;
end
....
....
if strcmp(aRT126, 'a^0')
aRT126=0;
x126=1;
end

wie man unschwer erkennen kann ändert sich hier nur die Zahl hinter 'aRT' und 'x'


und hier noch eine weitere if-Anweisungen die ich vereinfachen will...

if strcmp(aRT0,'a^1') %hier ändert sich die Potenz 'a^' um 1 sowie
aRT0=1; %bei 'aRT0=' um 1
x0=1;
end
if strcmp(aRT0,'a^2')
aRT0=2;
x0=1;
end
if strcmp(aRT0,'a^3')
aRT0=3;
x0=1;
end
....
....
if strcmp(aRT0,'a^126')
aRT0=126;
x0=1;
end

...
...if strcmp(aRT1,'a^1')
aRT1=1;
x1=1;
end
if strcmp(aRT1,'a^2')
aRT1=2;
x1=1;
end
if strcmp(aRT1,'a^3')
aRT1=3;
x1=1;
end
...
...
if strcmp(aRT1,'a^126')
aRT1=126;
x1=1;
end


Gibt es hierzu ne schicke Lösung zur Vereinfachung der if-Anweisungen?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.03.2010, 21:35     Titel:
  Antworten mit Zitat      
Hallo,

das geht schon:

Code:
for I=0:126
if strcmp(eval(['aRT', num2str(I)]), 'a^0')
eval(['aRT', num2str(I), '=0;']);
eval(['x', num2str(I), '=1;']);
end


Die anderen kannst du ja dann vielleicht selber mal nach demselben Prinzip versuchen Wink Wobei ich mich immer frage, was jemand mit 127 Variablen will...

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Primo00
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2010, 17:34     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für die schnelle Antwort. Die vielen Variablen brauche ich für die Ein-und Ausgabe einer GUI zur Transformation von Codewörtern, da gibt es schon mal CW mit einer Länge von 127 Smile
Habe jetzt ne Weile versucht die anderen if-Anweisungen mit dem selben Prinzip zu schreiben, aber ich bekomm es einfach nicht gebacken.
Kannste mir da vielleicht noch einmal weiterhelfen.

Beste Grüße und nochmals danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 03.03.2010, 18:43     Titel:
  Antworten mit Zitat      
Hi,

ich glaube Harald wollte darauf hinaus, dass man die vielen Variablen zu einem Vektor zusammen fassen könnte Wink

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Primo00
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2010, 19:01     Titel:
  Antworten mit Zitat      
Ist alles Neuland für mich, was das Programmieren angeht... Aber falls du/ihr mir ne schickere Lösung mit dem Zusammenfassen der Vektoren hast/habt, ...nur her damit. Bin über jede Hilfe froh! Daher habe ich mich ja auch an euch gewannt Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Primo00
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2010, 19:34     Titel:
  Antworten mit Zitat      
Hallo, habe den anderen Teil nun hinbekommen! jetzt stehe ich aber vor dem nächsten Problem und zwar mit diesen if_Anweisungen.

if aRT0== 0 && x0==1
y0 = [0 0 1];
elseif aRT0== 1
y0 = [0 1 0] ;
elseif aRT0== 2
y0 = [1 0 0] ;
elseif aRT0== 3
y0 = [0 1 1];
elseif aRT0== 4
y0 = [1 1 0];
elseif aRT0== 5
y0 = [1 1 1];
elseif aRT0 == 6
y0 = [1 0 1];
elseif aRT0 ==0 && x0==0
y0=[0 0 0];
end
if aRT1== 0 && ff1==1
y1 = [0 0 1];
elseif aRT1== 1
y1 = [0 1 0] ;
elseif aRT1== 2
y1 = [1 0 0] ;
elseif aRT1== 3
y1 = [0 1 1];
elseif aRT1== 4
y1 = [1 1 0];
elseif aRT1== 5
y1 = [1 1 1];
elseif aRT1 == 6
y1 = [1 0 1]
elseif aRT1 ==0 && x1==0
y1=[0 0 0];
end
...
...
if aRT6== 0 && ff6==1
y6 = [0 0 1];
elseif aRT6== 1
y6 = [0 1 0] ;
elseif aRT6== 2
y6 = [1 0 0] ;
elseif aRT6== 3
y6 = [0 1 1];
elseif aRT6== 4
y6 = [1 1 0];
elseif aRT6== 5
y6 = [1 1 1];
elseif aRT6 == 6
y6 = [1 0 1]
elseif aRT6 ==0 && x1==0
y6=[0 0 0];
end


habe es versucht nach dem Prinzip vom Harald zu machen, aber bekomme dann diese Fehlermeldung: ??? Undefined function or variable "y0".

Hier mein Versuch die if-Anweisungen zu vereinfachen:

for I=0:6
if ((eval(['aRT', num2str(I),'==0']))&&(eval(['x', num2str(I),'==1'])))
eval(['y', num2str(I), '=[0 0 1];']);
elseif eval(['aRT', num2str(I),'==1'])
eval(['y', num2str(I), '=[0 1 0];']);

elseif eval(['aRT', num2str(I),'==2'])
eval(['y', num2str(I), '=[1 0 0];']);

elseif eval(['aRT', num2str(I),'==3'])
eval(['y', num2str(I), '=[0 1 1];']);

elseif eval(['aRT', num2str(I),'==4'])
eval(['y', num2str(I), '=[1 1 0];']);

elseif eval(['aRT', num2str(I),'==5'])
eval(['y', num2str(I), '=[1 1 1];']);

elseif eval(['aRT', num2str(I),'==6'])
eval(['y', num2str(I), '=[1 0 1];']);

elseif ((eval(['aRT', num2str(I),'==0']))&&(eval(['x', num2str(I),'==1'])))
eval(['y', num2str(I), '=[0 0 0];']); ;
end
end

Hat jemand ne Idee wie ich das ganze lösen kann?

Beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2010, 20:03     Titel:
  Antworten mit Zitat      
Hallo,

das kann ich mir auch nicht erklären, da das eine Zuweisung sein sollte. Kommt die Fehlermeldung denn aus einer dieser Zeilen, oder evtl. von woanders?

Wie Jan schon angedeutet hat, solltest du dir vielleicht die Grundlagen (z.B. könnten hier Cell Arrays hilfreich sein) von MATLAB aneignen anstatt mit solchen Monsterkonstrukten zu arbeiten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Primo00
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2010, 15:06     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung kommt nach der for-Schleife. Denn nach der for-Schleife sollen die y0....y6-Werte addiert werden.

Die Fehlermeldung kommt hier:
k= y0 + y1 + y2 + y3 + y4 + y5 + y6;

Irgendeine Ahnung warum?

Gruß
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: 08.03.2010, 14:56     Titel:
  Antworten mit Zitat      
Hallo Primo00,

Du hast in Deiner if-Anweisung keinen "else"-Fall. Das bedeutet, dass y0 nicht angelegt wird, wenn keiner der Fälle eintrifft. Eventuell hast Du es ja mit Rundungsungenauigkeiten zu tun. Um das zu überprüfen, kannst Du Dir die Variablen aRT0 und x0 vor den if-Anweisungen ausgeben lassen.

Herzliche Grüße
Bijick

P.S. Bitte benutze die Code-Umgebung, wenn Du Matlab-Code wiedergibst. Danke. Smile
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.