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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top