Verspeichern von if-Schleifen < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Aufgabe | Problem: muss folgendes überprüfen:
a<b<c
falls bedingung erfüllt ist soll in einen vektor Ergebnis an erster stelle 'erfüllt' gesetzt werden, falls bedingung nicht erfüllt ist soll 'unerfüllt' gesetzt werden.
wie würdet ihr das programmieren?
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt. |
ich habe es so programmiert-funktioniert jedoch nicht:
a,b und c sind vektoren mit 10 elementen
k=1:10
if a(k)<b(k)
if b(k)<c(k)
Ergebnis(k)={'erfüllt'}
else
Ergebnis(k)={'unerfüllt'}
end
end
in Ergebnis sollten nun 10 Werte stehen die entweder 'erfüllt' oder 'unerfüllt' lauten.
Könnt ihr mir dabei helfen!
danke messenmann
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Hallo,
du hast die for-Schleife vergessen. Es muss heißen:
for k=1:10,
....
end;
Allerdings wirst du einige leere Einträge haben im Falle [mm] a(k)$\geq$b(k). [/mm] Vielleicht solltest du den Fall auch behandeln.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:27 Mo 24.12.2007 | Autor: | messenmann |
Hallo Martin, danke für die antwort1
For schleife für das k läuft durch, habe ich vergessen zu schreiben, das ist nicht das problem.
ich will nur wissen ob die bedingung a(k)<=b(k)<=c(k) erfüllt ist. ist diese bedingung erfüllt soll in einem vektor Ergebnis(k) 'erfüllt' gesetzt werden andernfalls 'unerfüllt'.
wie würdest du das programmiern?
danke lukas
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:04 Mo 24.12.2007 | Autor: | Martin243 |
Hallo,
soetwas habe ich mir gedacht, war mir aber nicht ganz sicher, ob das deine Absicht ist. In Matlab kann man Bedingungen logisch verknüpfen. In deinem Fall bei UND:
1: | for k=1:10,
| 2: | if (a(k)<b(k)) && (b(k)<c(k)),
| 3: | Ergebnis(k)={'erfüllt'};
| 4: | else
| 5: | Ergebnis(k)={'unerfüllt'};
| 6: | end
| 7: | end |
Gruß
Martin
|
|
|
|
|
hallo nochmal!
hab es jetzt so programmiert, funktioniert soweit, nur wenn man sich den ergebnisvektor anschaut stehen da nicht diese 'erfüllt' oder 'unerfüllt' drinnen. Z.B. sieht der so aus: Ergebnis= [] [] 'erfüllt'
klickt man 2 mal im workspace auf den Ergebnis vektor steht überhaupt: unsupported variable class or newline in string.
was hab ich falsch gemacht?
vielen dank für deine hilfe und frohe weihnachten.
Lg lukas
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 21:50 Mo 24.12.2007 | Autor: | Blech |
> was hab ich falsch gemacht?
Ich denke (hab kein Matlab zur Hand) es müßte Ergebnis{k} statt Ergebnis(k) lauten.
Nur in cell-arrays können die einzelnen Einträge unterschiedliche Länge haben.
Wenn Du nicht unbedingt die "erfüllt" und "unerfüllt" in einem Vektor haben mußt, sondern es 0en und 1en auch tun, ginge das ganze leichter. (evtl. könntest Du dann bei der Ausgabe formatieren oder so)
Ergebnis=a<b&b<c
gibt Dir einen Vektor mit Ergebnis(k)=1, falls a(k)<b(k)<c(k) und 0 sonst.
Leider gibt es keine so elegante Methode, das in strings umzuwandeln (denk ich, in R ginge es =), also bräuchtest Du die for-Schleife:
1: | Ergebnis=a<b&b<c;
| 2: | Erg=cell(length(Ergebnis),1);
| 3: | for i=1:length(Ergebnis)
| 4: | if Ergebnis(i)==1
| 5: | Erg{i}='erfuellt';
| 6: | else
| 7: | Erg{i}='nicht erfuellt';
| 8: | end
| 9: | end
|
(ich denke die Syntax sollte stimmen)
|
|
|
|