Programmflußsteuerung < Matlab < Mathe-Software < Mathe < Vorhilfe
|
|
Status: |
(Antwort) fertig | Datum: | 14:19 Mi 29.11.2006 | Autor: | dormant |
Hi!
Naja, wenn es sich um nur 2 Funktionen handelt, ist es am Einfacsten eine if-else Anweisung zu benutzen:
flag=input('1 für Zylinder, 2 für Kegel eingeben:');
if flag==1 function1;
elseif flag==2 function2;
else disp('Falsche Eingabe!'); end
Wenn du aber unbedingt switch benutzen willst, bietet sich an einfach help switch bei matlab einzugeben.
Jedenfalls solltest du auf sowas kommen:
switch flag
case 1 function1;
case 2 function2;
otherwise disp('Falsche Eingabe');
end
Gruß,
Yanko
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:35 Mi 29.11.2006 | Autor: | CAS |
So... danke dir erstmal.... habe die switch Funktion benutzt...
wenn ich jetzt weiter gehe im Histogramm.... die Maße abfrage und sie dann in einer Variable speichern will.....
---------------------------------------------------------------
input ('Geben Sie die Breite in mm an:');
if b < 0, disp ('ungültiger Wert');
----------------------------------------------------------------
wie muss ich das Schreiben um den Wert auf b zu speichern, um auch noch später damit zu rechnen....?
LG
|
|
|
|
|
Hallo,
du musst den Eingabewert schon vorher explizit einer Variablen zuweisen, z.B.
b_ungeprueft = input ('Geben Sie die Breite in mm an:');
if b_ungeprueft < 0, disp ('ungültiger Wert') %Hier kein Semikolon, sonst keine Ausgabe!!!
else b=b_ungeprueft;
end;
Stellt sich nur die Frage, warum man die Zuweisung nicht immer ausführen sollte, denn bei einer ungültigen Eingabe wird die Berechnung eh nicht ausgeführt.
b = input ('Geben Sie die Breite in mm an:');
if b < 0, disp ('ungültiger Wert') %Hier kein Semikolon, sonst keine Ausgabe!!!
end;
Gruß
Martin
|
|
|
|
|
Hallo,
ich weiß ja nicht, woher der Bereich k=1:100 kommt, aber mit k=1:200 sieht es schon deutlich ähnlicher aus.
Oder du skalierst die Achsen anders. Die y-Achse ist nämlich deutlich gestaucht.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:19 Mi 31.01.2007 | Autor: | CAS |
... Danke dir.... [hab die Achsen neu skaliert] .....
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 14:21 Mi 31.01.2007 | Autor: | CAS |
bei meinem jetzigen Programm zeigt es mir diesen Fehler an:
??? Error using ==> plus
Matrix dimensions must agree.
Error in ==> NEU10 at 31
Z= Z+S;
was bedeutet dies?....
[ Z, S stehen in einer for-Schleife, wobei alle beide vordeklariert sind]
LG....
|
|
|
|
|
Hallo,
das bedeutet, dass die beiden Variablen unterschiedlich große Matrizen darstellen. Daher sind sie nicht addierbar. Wie hast du S und Z denn initialisiert?
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 06:54 Do 01.02.2007 | Autor: | CAS |
Hallo mal wieder....
also.... Z wird auf Null gesetzt und S wird als Formel dargestellt [im ersten Durchlauf]....also sollten doch beide nur einen Wert besitzen, oder seh ich das Falsch?
aus sicherheit hab' ich dir noch mal den m-file angehangen.....
LG
Datei-Anhang
Dateianhänge: Anhang Nr. 1 (Typ: m) [nicht öffentlich]
|
|
|
|
|
Hallo,
beim Übergang zu 2. Lauf werden X und Y neu definiert und bekommen eine andere Größe. Ich vermute, dass du da Z und die anderen nullinitialisierten Variablen da auch gern wieder auf 0 hättest. Dann tu das einfach immer nach der "if lauf..."-Abfrage. Dann wird Z wieder skalar und Z=Z+S klappt.
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 10:39 Do 01.02.2007 | Autor: | CAS |
.... also bei dem k-Durchlauf sollen nur im ersten Lauf die Variabeln Null sein, dann sollen sie sich aufaddieren.
Der Q-Durchlauf soll dann jedesmal mit einem Nulldurchgang starten....
hab das jetzt mal alles nach der if lauf-Anweisung gepackt.... doch jetzt macht er gar nichts mehr.... weder Fehler noch Rechenoperation....
an was kann das jetzt liegen?
|
|
|
|
|
Hallo,
> .... also bei dem k-Durchlauf sollen nur im ersten Lauf die Variabeln Null sein, dann sollen sie sich aufaddieren.
> Der Q-Durchlauf soll dann jedesmal mit einem Nulldurchgang starten....
OK, dann ging dein ursprünglicher Quelltext schon in die richtige Richtung, aaaaber:
Beim Durchlauf mit k=1 sind X und Y 61x61-Matrizen, beim Durchlauf mit k=2 sind es 211x211-Matrizen. Das passt nicht zusammen.
Oder soll die Initialisierung mit 0 doch zwischen "for lauf=1:2," und "if lauf..." stattfinden? Dann rechnet Matlab nämlich eine halbe Ewigkeit, aber es treten keine Fehler auf.
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 12:45 Di 06.02.2007 | Autor: | CAS |
... die Initialisierung der Variablen soll eigentlich zwischen "for lauf=1:2" und "if lauf..." stattfinden....
wenn ich nun das Programm starte, rechnet Matlab ca ne halbe Stunde.....es treten zwar keine Fehler auf, aber auch keine Ergebnisse werden angezeigt....
obwohl wenn man Q festlegt mit einem Wert (z.B. 50) und den Bereich für Max/Min begrenzt, Ergebnisse rauskommen (manuel berechnet)
also irgendwo muss noch ein Fehler liegen, aber ich weis echt nicht wo.... Kannst du mir vielleicht noch mal helfen.....? Schon mal danke dafür....
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:20 Sa 10.02.2007 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|