Xが[-5、-4]または[1、3]にある場合は1、それ以外の場合は0を与える関数f(x)をMathematicaで定義するにはどうすればよいですか?それはおそらく単純なことですがわからない!
必要な基本構造は Piecewise
です。特に、要求していた関数は次のように記述できます。
f[x_] := Piecewise[{{1, -5 <= x <= -3}, {1, 1 <= x <= 3}}, 0]
または
f[x_] := Piecewise[{{1, -5 <= x <= -3 || 1 <= x <= 3}}, 0]
最後の引数0
は、デフォルトのデフォルトが0であるため、デフォルト(または「else」)値が不要であることを定義します。
Piecewise
と Which
の形式は非常に似ていますが、Piecewise
は関数の作成用であり、Which
はプログラミング用です。 Piecewise
は、統合、単純化などでより適切に機能します。また、適切な左中括弧の数学表記もあります。 ドキュメント の例を参照してください。
必要な区分的関数は非常に単純なので、 Boole
、 UnitStep
、 UnitBox
などのステップ関数から構築することもできます。
UnitBox[(x + 4)/2] + UnitBox[(x - 2)/2]
これらは、Piecewise
で示されているように、PiecewiseExpand
の特殊なケースです。
In[19]:= f[x] == UnitBox[(x+4)/2] + UnitBox[(x-2)/2]//PiecewiseExpand//Simplify
Out[19]= True
または、 HeavisideTheta
や HeavisidePi
などの切り替え関数を使用することもできます。
HeavisidePi[(x + 4)/2] + HeavisidePi[(x - 2)/2]
関数を分布として扱う場合、その導関数は Dirac delta 関数の正しい組み合わせを返すためです。
詳細については、チュートリアル 区分的関数 を参照してください。
サイモンの答えは標準的で正しいものですが、ここに別の2つのオプションがあります。
f[x_] := 1 /; IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
f[x_?NumericQ] := 0
または
f[x_] := If[-5 <= x <= -3 || 1 <= x <= 3, 1, 0]
編集:
最初のオプションは、定義が入力された順序に依存することに注意してください(これを指摘してくれたSjoerdに感謝します)。この問題がなく、入力としてInterval
を指定した場合にも正しく機能する同様のソリューションは次のとおりです。
f[x_] := 0 /; !IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
f[x_] := 1 /; IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
すべてが順調ですが、一般的な経験則として、常に最も単純なアプローチを試し、洗練された高水準プログラミングからできるだけ遠ざける必要があります。この特定の状況では、私は次のことを意味します。
f [x_ /; -5 <= x <= -3] = 0など...など