3

次のようなベクトルの自己記述関数「func」を呼び出しています。

x_values=[0 1 2];
result=func(x_values);

問題は、この関数ifに出力を決定するステートメントがあることです。この関数をスカラーに適用する場合は問題ありませんが、数値のベクトルに適用すると、ifステートメントは機能しません。なぜ?そして、どうすれば修理できますか?

function [y]=func(x)
if(x==0)
  y=0
else
  y=1./sin(x);
end
end
4

3 に答える 3

2

ゼロとゼロ以外のエントリを別々に扱う必要があります。これは、インデックスを作成することで簡単に実現できます。

function [y]=func(x)
xIsZero = x==0;

%# preassign y
y = x;

%# fill in values for y
y(xIsZero) = 0

y(~xIsZero) = 1./sin(x(~xIsZero))
于 2012-11-08T19:52:52.890 に答える
1

答えはIFのヘルプ ドキュメントで説明されています。

評価された式は、結果が空ではなく、すべての非ゼロ要素 (論理または実数値) を含む場合に真です。それ以外の場合、式は false です。

結論: for ループを追加するか、式をベクトル化するより良い方法を見つけてください。

于 2012-11-08T19:58:14.220 に答える
0

ベクトルのサブセットのみを割り当てたいとします。例えば:

function [y]=func(x)
    y=zeros(size(x));
    mask = x ~= 0;
    y(mask) = 1 ./ sin(x(mask));
end
于 2012-11-08T19:53:36.317 に答える