matlab kann nicht mit / teilen
-
28-10-2019 - |
Frage
Ich habe eine einfache Funktion, die einen Wert annimmt
Dieser Wert ist das Abhaken einer Reihe von if- oder elseif-Anweisungen, um einen anderen Wert zu berechnen.
Das Problem ist, dass beim Ausführen ein Fehler gefunden wird, der lautet
Fehler beim Verwenden von / Die Matrixdimensionen müssen übereinstimmen.
Fehler in abc (Zeile 9) a= 5000 / g;
Der Code lautet wie folgt
function abc(g)
if (g == 100)
a = 1;
elseif (g <= 99 & g >= 50)
a = 200 -2*g;
elseif (g <= 50 & g >= 1)
a = 5000 / g;
else
warning('Invalid value passed, a defaults to 1');
a =1;
end
end
Also, ich übergebe abc 100 und ich erwarte, dass a 1 ist, aber stattdessen läuft es durch jedes if / elseif und wirft einen Fehler auf a= 5000 / g
Ich sollte auch erwähnen, dass ich anfänglich versucht habe, && in den elseifs zu verwenden, aber dies ergab auch einen Fehler, der sagte
Operanden für ||und && Operatoren müssen in logische Skalarwerte konvertierbar sein.
Fehler in abc (Zeile 6) elseif (g <= 99 && g>= 50)
Hat jemand eine Idee, was hier los ist? Danke
Lösung
Sie übergeben wahrscheinlich eine Matrix an Ihre Funktion, z. wenn Sie anrufen
abc(yourdata)
yourdata
ist eigentlich keine Zahl, sondern eine Matrix. Wenn Sie direkt angerufen haben
abc(100)
Sie sollten Ihr Problem nicht sehen (oder doch?).
Mit anderen Worten, Ihr Hauptproblem liegt nicht in Ihrer Funktion , sondern wenn Sie es aufrufen!
In Anbetracht Ihrer Beschreibung scheint es, dass Sie yourdata(1)
auf den Wert 100 setzen, den Sie testen möchten, aber ein anderes Element der Matrix hat einen anderen Wert, weshalb das if
-Konstrukt in den else-Fall verzweigt. Dort benötigen Sie ./
anstelle von /
, wenn Sie elementweise Unterteilung anstelle von Matrixteilung .
Aber in Wirklichkeit müssen Sie wahrscheinlich nur sicherstellen, dass yourdata
skalar ist, wenn Sie Ihre Funktion aufrufen.