0

値を受け取る単純な関数があります

この値は、別の値を計算するために多数の if または elseif ステートメントをチェックアウトしたものです。

問題は、実行しようとするとエラーが発生するように見えることです。

使用エラー / マトリックスの次元は一致する必要があります。

abc のエラー (9 行目) a = 5000 / g;

コードは次のとおりです

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

だから、私は abc 100 を渡し、私は a が 1 であることを期待していますが、代わりに各 if / elseif を実行し、a = 5000/g でエラーをスローします

また、最初にelseifsで&&を使用しようとしたことにも言及する必要がありますが、これもエラーが発生しました

|| へのオペランド && 演算子は論理スカラー値に変換可能でなければなりません。

abc のエラー (6 行目) elseif (g <= 99 && g >= 50)

ここで何が起こっているのか誰にもわかりませんか?ありがとう

4

1 に答える 1

4

関数に行列を渡している可能性があります。

abc(yourdata)

yourdataは実際には 1 つの数値ではなく、行列です。直接電話した場合

abc(100)

あなたはあなたの問題を見るべきではありません(またはあなたですか?)。

つまり、主な問題は function 内ではなく、呼び出すときです!

あなたの説明を考えると、yourdata(1)テストしたい値 100 に設定しているように見えますが、マトリックスの他の要素の値が異なるため、if構造が else ケースに分岐します。行列除算の代わりに要素ごとの除算を行いたい場合は、./代わりに必要があります。/

yourdataしかし実際には、関数を呼び出すときにそれがスカラーであることを確認する必要があるだけです。

于 2012-02-21T09:53:03.993 に答える