メインコンテンツ

piecewise

条件定義された式または関数

説明

pw = piecewise(cond1,val1,cond2,val2,...) は、条件 cond1 が true の場合の値が val1、条件 cond2 が true の場合の値が val2 (以下同様) になる、区分的な式または関数 pw を返します。どの条件も true ではない場合、pw の値は NaN になります。

pw = piecewise(cond1,val1,cond2,val2,...,otherwiseVal) は、どの条件も true ではない場合に otherwiseVal の値を持つ区分的な式または関数 pw を返します。

すべて折りたたむ

piecewise を使用して次の区分的式を定義します。

y={-1x<01x>0

syms x
y = piecewise(x < 0,-1,x > 0,1)
y = 

{-1 if  x<01 if  0<x

subs を使用して x を置き換え、-20、および 2 のときの y を評価します。y は、x = 0 では未定義であるため、値は NaN になります。

subs(y,x,[-2 0 2])
ans = (-1NaN1)

次の関数をシンボリックに定義します。

y(x)={-1x<01x>0

syms y(x)
y(x) = piecewise(x < 0,-1,x > 0,1)
y(x) = 

{-1 if  x<01 if  0<x

y(x) はシンボリック関数であるため、x の値について直接評価できます。-20 および 2 のときの y(x) を評価します。y(x) は、x = 0 では未定義であるため、値は NaN になります。詳細については、シンボリック関数の作成を参照してください。

y([-2 0 2])
ans = (-1NaN1)

どの条件も true ではない場合の区分的関数の値 ("その他の値" と呼ばれる) を、追加の入力引数を指定して設定します。追加の引数を指定しない場合、関数のその他の値は、既定では NaN です。

区分的関数の定義

y={-2x<-20-2<x<01otherwise.

syms y(x)
y(x) = piecewise(x < -2,-2,(-2 < x) & (x < 0),0,1)
y(x) = 

{-2 if  x<-20 if  x(-2,0)1 otherwise

linspace を使用して x の値を生成し、区間 -3 から 1y(x) を評価します。他の条件が true でないため、-2 および 0 のときの y(x)1 と評価されます。

xvalues = linspace(-3,1,5)
xvalues = 1×5

    -3    -2    -1     0     1

yvalues = y(xvalues)
yvalues = (-21011)

fplot を使用して次の区分的式をプロットします。

y={-2x<-2x-2<x<22x>2.

syms x
y = piecewise(x < -2,-2,-2 < x < 2,x,x > 2,2);
fplot(y)

Figure contains an axes object. The axes object contains an object of type functionline.

区分的式では、作成時に既存の仮定が適用されます。区分的式の作成後に設定された仮定は、simplify を使用して式に適用します。

x > 0 と仮定します。次に、同じ条件 x > 0 を持つ区分的式を定義します。piecewise は自動的に仮定を適用して条件を単純化します。

syms x
assume(x > 0)
pw = piecewise(x < 0,-1,x > 0,1)
pw = 1

x の仮定を消去して計算を続けます。

assume(x,"clear")

x > 0 の条件を持つ区分的式 pw を作成します。次に、x > 0 という仮定を設定します。simplify を使用して pw に仮定を適用します。

pw = piecewise(x < 0,-1,x > 0,1);
assume(x > 0)
pw = simplify(pw)
pw = 1

x の仮定を消去して計算を続けます。

assume(x,"clear")

diffint、および limit をそれぞれ使用して、区分的式の微分、積分、極限を求めます。

diff を使用して次の区分的式を微分します。

y={1/xx<-1sin(x)/xx-1

syms x
y = piecewise(x < -1,1/x,x >= -1,sin(x)/x);
diffy = diff(y,x)
diffy = 

{-1x2 if  x<-1cos(x)x-sin(x)x2 if  -1<x

int を使用して、y を積分します。

inty = int(y,x)
inty = 

{log(x) if  x<-1sinint(x) if  -1x

limit を使用して、0 における y の極限を求めます。

limit(y,x,0)
ans = 1

-1 における y の右側極限と左側極限を求めます。詳細については、limitを参照してください。

limit(y,x,-1,"right")
ans = sin(1)
limit(y,x,-1,"left")
ans = -1

2 つの区分的式の和算、減算、除算および乗算を行います。結果の区分的式は、最初の区分的式が定義される場所でのみ定義されます。

syms x
pw1 = piecewise(x < -1,-1,x >= -1,1);
pw2 = piecewise(x < 0,-2,x >= 0,2);
add = pw1+pw2
add = 

{-3 if  x<-1-1 if  x[-1,0)3 if  0x

sub = pw1-pw2
sub = 

{1 if  x<-13 if  x[-1,0)-1 if  0x

mul = pw1*pw2
mul = 

{2 if  x<-1-2 if  x[-1,0)2 if  0x

div = pw1/pw2
div = 

{12 if  x<-1-12 if  x[-1,0)12 if  0x

children 関数を使用して、区分的式から条件と値を抽出します。

syms x
pw = piecewise(x < -2,sin(x),(-2 < x) & (x < 2),x,2 < x,exp(-x))
pw = 

{sin(x) if  x<-2x if  x(-2,2)e-x if  2<x

c = children(pw);
pwExpr = [c{:,1}]
pwExpr = (sin(x)xe-x)
pwCond = [c{:,2}]
pwCond = (x<-2x(-2,2)2<x)

区分的式の変更は、subs で式の一部を置き換えることによって変更します。区分的式の拡張は、新しい区分的式のその他の値として式を指定します。この操作により 2 つの区分的式が結合されます。piecewise では条件の重複や競合はチェックされません。代わりに、piecewise は、if-else ラダーと同様に、最初の真条件の値を返します。

subs を使用して、区分的式の条件 x < 2x < 0 に変更します。

syms x
pw = piecewise(x < 2,-1,x > 0,1);
pw = subs(pw,x < 2,x < 0)
pw = 

{-1 if  x<01 if  0<x

条件 x > 5 と値 1/xpw に追加するには、pw をその他の値とする新しい区分的式を作成します。

pw = piecewise(x > 5,1/x,pw)
pw = 

{1x if  5<x-1 if  x<01 if  0<x

R2025a 以降

区分的式を含む連立方程式を定義します。最初の方程式は、2 つの条件 0<x<2 および 2<x<4 における変数 y を定義します。2 番目の方程式は、同じ 2 つの条件における xy を定義します。

syms x y
eq1 = y == piecewise((0 < x) & (x < 2),x^2 + x - 2,(2 < x) & (x < 4),3/2*x)
eq1 = 

{y=x2+x-2 if  x(0,2)y=3x2 if  x(2,4)

eq2 = y*x == piecewise((0 < x) & (x < 2),x - 1,(2 < x) & (x < 4),9)
eq2 = 

{xy=x-1 if  x(0,2)xy=9 if  x(2,4)

この連立方程式を解くには、まず、2 番目の方程式の変数 y に最初の方程式における y の式を代入します。lhs 関数と rhs 関数を使用して、最初の方程式の左辺と右辺を取得できます。

eq2 = subs(eq2,lhs(eq1),rhs(eq1))
eq2 = 

{xx2+x-2=x-1 if  x(0,2)3x22=9 if  x(2,4)

次に、変数 x について 2 番目の方程式を解きます。

sols = solve(eq2,x)
sols = 

(162-1)

ここで、x=1x=2-1 が条件 0<x<2 を満たす解で、x=6 が条件 2<x<4 を満たす解です。

入力引数

すべて折りたたむ

条件。シンボリックな条件または変数として指定します。シンボリック変数は未知条件を表します。

例: x > 2

条件を満たす場合の値。数値、ベクトル、行列または多次元配列、あるいはシンボリック数、変数、ベクトル、行列、多次元配列、関数または式として指定します。

どの条件も true ではない場合の値。数値、ベクトル、行列または多次元配列、あるいはシンボリック数、変数、ベクトル、行列、多次元配列、関数または式として指定します。otherwiseVal が指定されていない場合、この値は NaN になります。

出力引数

すべて折りたたむ

区分的な式または関数。シンボリック式またはシンボリック関数として指定します。pw の値は、最初に true になる条件 cond の値 val です。pw の値を求めるには、subs を使用して、pw の変数を置き換えます。

ヒント

  • piecewise は条件の重複や競合をチェックしません。区分的式は、最初の真条件の値を返し、以降の重複する真の式をすべて無視します。したがって、piecewise は If-else ステートメントの動作に従います。

  • R2025a において: lhs 関数と rhs 関数を使用して、区分的式を含むシンボリック方程式の左辺と右辺を取得できます。

バージョン履歴

R2016b で導入