主要内容

piecewise

按条件定义的表达式或函数

说明

pw = piecewise(cond1,val1,cond2,val2,...) 返回分段表达式或分段函数 pw,当条件 cond1 为 true 时,其值为 val1,当条件 cond2 为 true 时,其值为 val2,依此类推。如果没有条件为 true,则 pw 的值为 NaN

示例

pw = piecewise(cond1,val1,cond2,val2,...,otherwiseVal) 返回分段表达式或分段函数 pw,如果没有条件为 true,则其值为 otherwiseVal

示例

示例

全部折叠

使用 piecewise 定义以下分段表达式。

y={-1x<01x>0

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

{-1 if  x<01 if  0<x

使用 subsx 进行代入,计算 y-202 处的值。由于 yx = 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 的值对其进行计算。计算 y(x)-202 处的值。由于 y(x)x = 0 处未定义,因此值为 NaN。有关详细信息,请参阅创建符号函数

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

通过指定一个附加的输入参量,设置分段函数在没有条件为 true 时的值(称为 otherwise 值)。如果未指定附加参量,函数的默认 otherwise 值为 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 的值,计算 y(x)-31 之间的值。在 -20 处,y(x) 的计算结果为 1,因为其他条件均不为 true。

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")

分别使用 diffintlimit 对分段表达式进行求导、积分和求极限。

使用 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

使用 inty 进行积分。

inty = int(y,x)
inty = 

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

使用 limity0 处的极限。

limit(y,x,0)
ans = 1

y-1 处的右极限和左极限。有关详细信息,请参阅limit

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

对两个分段表达式进行加、减、除和乘运算。所得的分段表达式仅在定义了初始分段表达式的区域内有定义。

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<-2-2<xx<22<x)

使用 subs 替换分段表达式的部分内容以修改该表达式。通过将分段表达式指定为新分段表达式的 otherwise 值来扩展该表达式。此操作将合并两个分段表达式。piecewise 不会检查条件是否重叠或冲突。而是像 if-else 梯形结构一样,piecewise 会返回第一个 true 条件对应的值。

使用 subs 将分段表达式中的条件 x < 2 更改为 x < 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

通过创建一个以 pw 为 otherwise 值的新分段表达式,向 pw 中添加条件 x > 5 及对应的值 1/x

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

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

自 R2025a 起

定义一个包含分段表达式的方程组。第一个方程针对 0<x<22<x<4 这两个条件定义变量 y。第二个方程针对相同的两个条件定义 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)

为求解此方程组,首先将第二个方程中的变量 y 代换为第一个方程中 y 的表达式。您可以使用 lhsrhs 函数获取第一个方程的左侧和右侧。

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

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

然后,求解第二个方程关于变量 x 的值。

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 的值,请使用 subspw 中的变量进行代入。

提示

  • piecewise 不会检查条件是否重叠或冲突。分段表达式会返回第一个 true 条件对应的值,并忽略后续任何重叠的 true 表达式。因此,piecewise 遵循 if-else 语句的行为。

  • 在 R2025a 中: 您可以使用 lhsrhs 函数获取包含分段表达式的符号方程的左侧和右侧。

版本历史记录

在 R2016b 中推出

另请参阅

| | | | | | | |