web-dev-qa-db-ja.com

Mathematicaで区間で関数を定義する方法は?

Xが[-5、-4]または[1、3]にある場合は1、それ以外の場合は0を与える関数f(x)をMathematicaで定義するにはどうすればよいですか?それはおそらく単純なことですがわからない!

18
Dunda

必要な基本構造は 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」)値が不要であることを定義します。

PiecewiseWhich の形式は非常に似ていますが、Piecewiseは関数の作成用であり、Whichはプログラミング用です。 Piecewiseは、統合、単純化などでより適切に機能します。また、適切な左中括弧の数学表記もあります。 ドキュメント の例を参照してください。


必要な区分的関数は非常に単純なので、 BooleUnitStepUnitBox などのステップ関数から構築することもできます。

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

または、 HeavisideThetaHeavisidePi などの切り替え関数を使用することもできます。

HeavisidePi[(x + 4)/2] + HeavisidePi[(x - 2)/2]

関数を分布として扱う場合、その導関数は Dirac delta 関数の正しい組み合わせを返すためです。


詳細については、チュートリアル 区分的関数 を参照してください。

30
Simon

サイモンの答えは標準的で正しいものですが、ここに別の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]
13
Dr. belisarius

すべてが順調ですが、一般的な経験則として、常に最も単純なアプローチを試し、洗練された高水準プログラミングからできるだけ遠ざける必要があります。この特定の状況では、私は次のことを意味します。

f [x_ /; -5 <= x <= -3] = 0など...など

0
alinux