0

私はこのような機能を持っています:

y=-2 で x<=0 y=-2+3x^2 で 0=1

ループを使用せずに、1D 行列の各要素に対してこの関数を計算する必要があります。

次のような関数を定義することは可能だと思いました:

function y= foo(x)

if x<=0
    y=-2;
elseif x>=1
    y=1;
else
    y= -2+3*x.^2;
end

end

しかし、これは 1 つの結果しか生成しません。すべての要素を操作するにはどうすればよいでしょうか? 私は知っています。演算子ですが、if 内の単一の要素にアクセスする方法は?

4

2 に答える 2

1
function b = helper(s)
  if s<=0
    b=-2;
  elseif s>=1
    b=1;
  else
    b= -2+3*s^2;
  end
end

次に、単に呼び出す

arrayfun(@helper, x)

関数に必要な動作を生成しますfoo

于 2013-02-18T23:09:32.673 に答える
1

必要のない別のアプローチはarrayfun()、条件を掛けることです。

y = -2*(x <= 0) + (-2+3*x.^2).*(x < 1).*(x > 0) + (x >= 1)

関数を作成することもできます。xこれは、例えば、ベクトル入力を受け入れます

x = [1 4 0 -1 0.5];
y = -2*(x <= 0) + (-2+3*x.^2).*(x < 1).*(x > 0) + (x >= 1)

出力

y =

   1.0000   1.0000  -2.0000  -2.0000  -1.2500
于 2013-02-19T07:28:18.103 に答える