y = ceil (x) ¶返回不小于 x 的最小整数。
这相当于向正无穷方向取整。
如果 x 是复数,则返回
ceil (real (x)) + ceil (imag (x)) * I。
ceil ([-2.7, 2.7])
⇒ -2 3
y = fix (x) ¶截断 x 的小数部分并返回整数部分。
这相当于向零方向取整。如果 x 是复数,则返回
fix (real (x)) + fix (imag (x)) * I。
fix ([-2.7, 2.7]) ⇒ -2 2
y = floor (x) ¶返回不大于 x 的最大整数。
这相当于向负无穷方向取整。如果 x 是复数,则返回
floor (real (x)) + floor (imag (x)) * I。
floor ([-2.7, 2.7])
⇒ -3 2
y = round (x) ¶返回最接近 x 的整数。
如果 x 是复数,则返回
round (real (x)) + round (imag (x)) * I。如果存在两个最接近的整数,则返回离零更远的那一个。
round ([-2.7, 2.7])
⇒ -3 3
y = roundb (x) ¶返回最接近 x 的整数。如果存在两个最接近的整数,则返回偶数的那一个(银行家舍入)。
如果 x 是复数,则返回
roundb (real (x)) + roundb (imag (x)) * I。
另请参阅: round。
m = max (x) ¶m = max (x, [], dim) ¶m = max (x, [], vecdim) ¶m = max (x, [], "all") ¶m = max (x, [], nanflag) ¶[m, im] = max (…) ¶[m, im] = max (…, "linear") ¶m = max (x, y) ¶m = max (x, y, nanflag) ¶… = max (…, "ComparisonMethod", method) ¶查找数组 x 中的最大值。
如果 x 是向量,则 max (x) 返回 x 中元素的最大值。
如果 x 是矩阵,则 max (x) 返回一个行向量,其中的每个元素包含 x 中对应列的最大值。
如果 x 是多维数组,则 max (x) 沿 x 的第一个非单一维度计算最大值。
可选输入 dim 指定要操作的维度,必须是正整数。指定 x 的任何单一维度(包括超过 ndims (x) 的任何维度)将返回 x 本身。
使用输入 vecdim(一个不重复维度的向量)指定多个维度,将沿 vecdim 定义的数组切片进行操作。如果 vecdim 索引了 x 的所有维度,则相当于选项 "all"。任何大于 ndims (x) 的维度都将被忽略。
将维度指定为 "all" 将使 max 对 x 的所有元素进行操作,等价于 max (x(:))。
如果使用两个输出参数调用,max 还会返回 x 中最大值的第一索引。第二个输出参数仅在 max 对单个输入数组进行操作时有效。设置 "linear" 标志将返回 x 中相应最小值的线性索引。
如果使用两个输入数组(x 和 y)调用,max 根据广播规则返回逐元素的最大值。
可选变量 nanflag 指定是否在计算中包含或排除 NaN 值,可与任何先前指定的输入参数组合使用。nanflag 的默认值为 "omitnan",表示忽略计算中的 NaN 值。要包含 NaN 值,请将 nanflag 设置为 "includenan",在这种情况下,如果操作维度上的任何元素是 NaN,则 max 将返回 NaN。
可选的 "ComparisonMethod" 配对参数指定数值输入的比较方法,适用于单个输入和两个输入数组。method 可以取以下任何值:
'auto'这是默认方法,当 x 为实数时按 real (x) 比较,当 x 为复数时按 abs (x) 比较。
'real'当 x 为实数或复数时按 real (x) 比较元素。对于实部相等的元素,再按 imag (x) 进行第二次比较。
'abs'当 x 为实数或复数时按 abs (x) 比较元素。对于幅度相等的元素,再按 angle (x) 在 -\pi 到 \pi 的区间内进行第二次比较。
m = min (x) ¶m = min (x, [], dim) ¶m = min (x, [], vecdim) ¶m = min (x, [], "all") ¶m = min (x, [], nanflag) ¶[m, im] = min (…) ¶[m, im] = min (…, "linear") ¶m = min (x, y) ¶m = min (x, y, nanflag) ¶… = min (…, "ComparisonMethod", method) ¶查找数组 x 中的最小值。
如果 x 是向量,则 min (x) 返回 x 中元素的最小值。
如果 x 是矩阵,则 min (x) 返回一个行向量,其中的每个元素包含 x 中对应列的最小值。
如果 x 是多维数组,则 min (x) 沿 x 的第一个非单一维度计算最小值。
可选输入 dim 指定要操作的维度,必须是正整数。指定 x 的任何单一维度(包括超过 ndims (x) 的任何维度)将返回 x 本身。
使用输入 vecdim(一个不重复维度的向量)指定多个维度,将沿 vecdim 定义的数组切片进行操作。如果 vecdim 索引了 x 的所有维度,则相当于选项 "all"。任何大于 ndims (x) 的维度都将被忽略。
将维度指定为 "all" 将使 min 对 x 的所有元素进行操作,等价于 min (x(:))。
如果使用两个输出参数调用,min 还会返回 x 中最小值的第一索引。第二个输出参数仅在 min 对单个输入数组进行操作时有效。设置 "linear" 标志将返回 x 中相应最小值的线性索引。
如果使用两个输入数组(x 和 y)调用,min 根据广播规则返回逐元素的最小值。
可选变量 nanflag 指定是否在计算中包含或排除 NaN 值,可与任何先前指定的输入参数组合使用。nanflag 的默认值为 "omitnan",表示忽略计算中的 NaN 值。要包含 NaN 值,请将 nanflag 设置为 "includenan",在这种情况下,如果操作维度上的任何元素是 NaN,则 min 将返回 NaN。
可选的 "ComparisonMethod" 配对参数指定数值输入的比较方法,适用于单个输入和两个输入数组。method 可以取以下任何值:
'auto'这是默认方法,当 x 为实数时按 real (x) 比较,当 x 为复数时按 abs (x) 比较。
'real'当 x 为实数或复数时按 real (x) 比较元素。对于实部相等的元素,再按 imag (x) 进行第二次比较。
'abs'当 x 为实数或复数时按 abs (x) 比较元素。对于幅度相等的元素,再按 angle (x) 在 -\pi 到 \pi 的区间内进行第二次比较。
M = cummax (x) ¶m = cummax (x, dim) ¶m = cummax (x, vecdim) ¶m = cummax (x, "all") ¶m = cummax (…, direction) ¶m = cummax (x, nanflag) ¶[m, im] = cummax (…) ¶[m, im] = cummax (…, "linear") ¶… = cummax (…, "ComparisonMethod", method) ¶从数组 x 返回累积最大值。
如果 x 是向量,则 cummax (x) 返回一个与 x 大小相同的向量,包含 x 的累积最大值。
如果 x 是矩阵,则 cummax (x) 返回一个大小相同的矩阵,包含沿 x 每列的累积最大值。
如果 x 是多维数组,则 cummax(x) 返回一个大小相同的数组,沿 x 的第一个非单一维度计算累积最大值。
输出 y 的类型与输入 x 的类型相同,除非 x 是逻辑型,在这种情况下 y 为 double 类型。
可选输入 dim 指定要操作的维度,必须是正整数。指定 x 的任何单一维度(包括超过 ndims (x) 的任何维度)将返回 x 本身。
使用输入 vecdim(一个不重复维度的向量)指定多个维度,将沿 vecdim 定义的数组切片进行操作。如果 vecdim 索引了 x 的所有维度,则相当于选项 "all"。任何大于 ndims (x) 的维度都将被忽略。
将维度指定为 "all" 将使 cummax 对 x 的所有元素进行操作,等价于 cummax (x(:))。
可选输入 direction 指定操作维度的遍历方式,可以取以下值:
"forward"(默认)累积最大值从操作维度的开始(索引 1)到结束进行计算。
"reverse"累积最大值从操作维度的结束到开始进行计算。
可选变量 nanflag 指定是否在计算中包含或排除 NaN 值,可与任何先前指定的输入参数组合使用。nanflag 的默认值为 "omitnan",表示忽略计算中的 NaN 值。要包含 NaN 值,请将 nanflag 设置为 "includenan",在这种情况下,如果操作维度上的任何元素是 NaN,则 max 将返回 NaN。
如果使用两个输出参数调用,cummax 还会返回 x 中最大值的第一索引。设置 "linear" 标志将返回 x 中相应最小值的线性索引。
可选的 "ComparisonMethod" 配对参数指定数值输入的比较方法,适用于单个输入和两个输入数组。method 可以取以下任何值:
'auto'(默认)当 x 为实数时按 real (x) 比较元素,当 x 为复数时按 abs (x) 比较。
'real'当 x 为实数或复数时按 real (x) 比较元素。对于实部相等的元素,再按 imag (x) 进行第二次比较。
'abs'当 x 为实数或复数时按 abs (x) 比较元素。对于幅度相等的元素,再按 angle (x) 在 -\pi 到 \pi 的区间内进行第二次比较。
M = cummin (x) ¶m = cummin (x, dim) ¶m = cummin (x, vecdim) ¶m = cummin (x, "all") ¶m = cummin (…, direction) ¶m = cummin (x, nanflag) ¶[m, im] = cummin (…) ¶[m, im] = cummin (…, "linear") ¶… = cummin (…, "ComparisonMethod", method) ¶从数组 x 返回累积最小值。
如果 x 是向量,则 cummin (x) 返回一个与 x 大小相同的向量,包含 x 的累积最小值。
如果 x 是矩阵,则 cummin (x) 返回一个大小相同的矩阵,包含沿 x 每列的累积最小值。
如果 x 是多维数组,则 cummin(x) 返回一个大小相同的数组,沿 x 的第一个非单一维度计算累积最小值。
输出 y 的类型与输入 x 的类型相同,除非 x 是逻辑型,在这种情况下 y 为 double 类型。
可选输入 dim 指定要操作的维度,必须是正整数。指定 x 的任何单一维度(包括超过 ndims (x) 的任何维度)将返回 x 本身。
使用输入 vecdim(一个不重复维度的向量)指定多个维度,将沿 vecdim 定义的数组切片进行操作。如果 vecdim 索引了 x 的所有维度,则相当于选项 "all"。任何大于 ndims (x) 的维度都将被忽略。
将维度指定为 "all" 将使 cummin 对 x 的所有元素进行操作,等价于 cummin (x(:))。
可选输入 direction 指定操作维度的遍历方式,可以取以下值:
"forward"(默认)累积最小值从操作维度的开始(索引 1)到结束进行计算。
"reverse"累积最小值从操作维度的结束到开始进行计算。
可选变量 nanflag 指定是否在计算中包含或排除 NaN 值,可与任何先前指定的输入参数组合使用。nanflag 的默认值为 "omitnan",表示忽略计算中的 NaN 值。要包含 NaN 值,请将 nanflag 设置为 "includenan",在这种情况下,如果操作维度上的任何元素是 NaN,则 max 将返回 NaN。
如果使用两个输出参数调用,cummin 还会返回 x 中最小值的第一索引。设置 "linear" 标志将返回 x 中相应最小值的线性索引。
可选的 "ComparisonMethod" 配对参数指定数值输入的比较方法,适用于单个输入和两个输入数组。method 可以取以下任何值:
'auto'(默认)当 x 为实数时按 real (x) 比较元素,当 x 为复数时按 abs (x) 比较。
'real'当 x 为实数或复数时按 real (x) 比较元素。对于实部相等的元素,再按 imag (x) 进行第二次比较。
'abs'当 x 为实数或复数时按 abs (x) 比较元素。对于幅度相等的元素,再按 angle (x) 在 -\pi 到 \pi 的区间内进行第二次比较。
h = hypot (x, y) ¶h = hypot (x, y, z, …) ¶逐元素计算 x 和 y 平方和的平方根。
这等价于 sqrt (x.^2 + y.^2),但计算方法避免了 x 或 y 为大值时可能发生的溢出。
hypot 也可以使用超过 2 个参数调用;在这种情况下,参数从左到右累积:
hypot (hypot (x, y), z) hypot (hypot (hypot (x, y), z), w), etc.
dx = gradient (m) ¶[dx, dy, dz, …] = gradient (m) ¶[…] = gradient (m, s) ¶[…] = gradient (m, sx, sy, sz, …) ¶[…] = gradient (f, x0) ¶[…] = gradient (f, x0, s) ¶[…] = gradient (f, x0, sx, sy, …) ¶计算采样数据或函数的梯度。
d d d
grad F(x,y,z) = -- F(x,y,z) i + -- F(x,y,z) j + -- F(x,y,z) k
dx dy dz
如果 m 是向量,则计算 m 的一维数值梯度。如果 m 是矩阵,则对每个维度计算梯度。返回参数是每个维度在指定采样点处的估计偏导数。
数据点之间的默认间距为 1。可以使用 s 参数指定恒定点间距。如果 s 是标量,则该单一间距值用于所有维度。否则,可以通过 sx、… 参数提供单独的间距值。标量值表示等距间距。sx、… 参数的向量值表示该维度的坐标。其长度必须与 m 的相应维度匹配。
如果第一个参数 f 是函数句柄,则计算函数在 x0 中各点的梯度。与采样数据一样,可以通过 s 或 dx、dy、… 参数设置用于估计梯度的点之间的间距值。默认使用间距 1,但这通常过大,除非函数变化非常缓慢,通常需要指定更小的采样间距。
示例:cos 的数值梯度(解析梯度为 -sin)
gradient (@cos, pi/2, .1) ⇒ -0.9983 -sin (pi/2) ⇒ -1
编程说明: 内部数据点的值使用中心差分近似计算。
y'(i) = 1/2 * (y(i+1) - y(i-1)).
在边界点应用线性外推。
y'(1) = y(2) - y(1).
z = dot (x, y) ¶z = dot (x, y, dim) ¶计算两个向量的点积。
如果 x 和 y 是矩阵,则沿第一个非单一维度计算点积。
如果给出了可选参数 dim,则沿该维度计算点积。
实现说明:这等价于 sum (conj (X) .* Y, dim),但避免了创建临时数组,速度更快。当 X 和 Y 是列向量时,结果等价于 X' * Y。虽然 dot 对整数数组也有定义,但由于整数对象的有限范围,输出可能与预期结果不同。
另请参阅: cross,divergence,tensorprod。
z = cross (x, y) ¶z = cross (x, y, dim) ¶计算两个三维向量 x 和 y 的向量叉积。
如果 x 和 y 是数组,则沿第一个具有三个元素的维度应用叉积。
可选参数 dim 强制沿指定维度计算叉积。如果指定维度的尺寸不是三个元素,将产生错误。
在复数输出的情况下,输出相对于输入的正交性也得到满足,且满足条件
dot (conj (z), x) ≡ dot (conj (z), y) = 0
但 dot (z, x) = 0 和 dot (z, y) = 0 不成立。另请注意,使用内积代替 dot 函数:
z(:).' * x(:) ≡ z(:).' * y(:) = 0
将满足向量输入的正交条件。
示例代码:
cross ([1, 1, 0], [0, 1, 1])
⇒
1 -1 1
cross (magic (3), eye (3), 2)
⇒
0 6 -1
-7 0 3
9 -4 0
另请参阅: dot,curl,divergence,conj。
div = divergence (x, y, z, fx, fy, fz) ¶div = divergence (fx, fy, fz) ¶div = divergence (x, y, fx, fy) ¶div = divergence (fx, fy) ¶计算由数组 fx、fy 和 fz(或 fx、fy)给出的向量场的散度。
d d d
div F(x,y,z) = -- F(x,y,z) + -- F(x,y,z) + -- F(x,y,z)
dx dy dz
向量场的坐标可以通过参数 x、y、z 或 x、y 分别给出。
[cx, cy, cz, v] = curl (x, y, z, fx, fy, fz) ¶[cz, v] = curl (x, y, fx, fy) ¶[…] = curl (fx, fy, fz) ¶[…] = curl (fx, fy) ¶v = curl (…) ¶计算由数组 fx、fy 和 fz(或 fx、fy)给出的向量场的旋度。
/ d d d d d d \
curl F(x,y,z) = | -- Fz - -- Fy, -- Fx - -- Fz, -- Fy - -- Fx |
\ dy dz dz dx dx dy /
向量场的坐标可以通过参数 x、y、z 或 x、y 分别给出。v 计算二维输入时沿 z 轴方向的角速度向量的标量分量。对于三维输入,在每个网格点处沿该点向量场方向计算标量旋转量。
另请参阅: divergence,gradient,del2,cross。
L = del2 (M) ¶L = del2 (M, h) ¶L = del2 (M, dx, dy, …) ¶计算离散拉普拉斯算子。
对于二维矩阵 M(x, y),定义为
1 / d^2 d^2 \
L = --- * | --- M(x,y) + --- M(x,y) |
4 \ dx^2 dy^2 /
对于 N 维数组,括号中的和将扩展以包括额外更高维度上的二阶导数。
评估点之间的间距可以由 h 定义,它是一个标量,定义所有维度上的等距间距。或者,每个维度的间距可以分别由 dx、dy 等定义。标量间距参数定义等距间距,而向量参数可用于指定可变间距。间距向量的长度必须与 M 的相应维度匹配。默认间距值为 1。
少于 3 个数据点的维度将被跳过。边界点通过内部点的线性外推计算。
示例:2*x^3 的二阶导数
f = @(x) 2*x.^3; dd = @(x) 12*x; x = 1:6; L = 4*del2 (f(x)); assert (L, dd (x));
f = factorial (n) ¶返回 n 的阶乘,其中 n 是非负实数整数。
如果 n 是标量,则等价于 prod (1:n)。对于向量或矩阵参数,返回数组中每个元素的阶乘。
对于非整数,请使用广义阶乘函数 gamma。请注意,阶乘函数增长非常快,即使使用双精度值,如果 n > 171 也会发生溢出。对于这种情况,请考虑使用 gammaln。
pf = factor (q) ¶[pf, n] = factor (q) ¶返回 q 的质因数分解。
质因数分解定义为 prod (pf) == q,其中 pf 的每个元素都是质数。如果 q == 1,则返回 1。输出 pf 与输入具有相同的数值类型。
使用两个输出参数时,返回唯一的质因数 pf 及其重数。即 prod (pf .^ n) == q。
实现说明:如果输入 q 是 single 或 double 类型,则它不能超过相应的 flintmax。对于更大的输入,如果它们小于 2^64,则将其转换为 uint64:
factor (uint64 (18446744073709011493)) ⇒ 571111 761213 42431951
对于更大的输入,如果您已安装并加载了 Symbolic 包,请使用 sym:
factor (sym ('9444733049654361449941'))
⇒ (sym)
1 1
1099511627689 ⋅8589934669
g = gcd (a1, a2, …) ¶[g, v1, …] = gcd (a1, a2, …) ¶计算 a1、a2、... 的最大公约数。
所有参数必须具有相同的大小或为标量。对于数组,逐元素计算最大公约数。所有元素必须是普通整数或高斯(复数)整数。请注意,对于高斯整数,gcd 仅在一个相位因子(乘以 1、-1、i 或 -i)下是唯一的,因此在四种可能的 gcd 中返回任意一个。
可选返回参数 v1、… 包含整数向量,使得
g = v1 .* a1 + v2 .* a2 + ...
示例代码:
gcd ([15, 9], [20, 18]) ⇒ 5 9
编程提示:要查找单个数组中所有元素的 GCD,请使用 num2cell 而不是嵌套调用或循环:
x = [30 42 70 105]; # 输入向量或数组
gcd (num2cell (x) {:})
⇒ 1
l = lcm (x, y) ¶l = lcm (x, y, …) ¶计算 x 和 y 或所有参数列表的最小公倍数。
所有输入必须具有相同的大小或为标量。所有元素必须是实数整数或高斯(复数)整数。对于复数输入,结果仅在相位因子(乘以 +1、+i、-1 或 -i)下是唯一的,并且任意返回四个结果之一。
示例代码:
lcm (5:8, 9:12) ⇒ 45 30 77 24
编程提示:要查找单个数组中所有元素的 LCM,请使用 num2cell 而不是嵌套调用或循环:
x = 1:10; # 输入向量或数组
lcm (num2cell (x) {:})
⇒ 2520
r = rem (x, y) ¶返回除法 x / y 的余数。
使用表达式计算余数:
x - y .* fix (x ./ y)
如果参数的维度不一致,或任一参数为复数,则会打印错误消息。
编程说明:在使用浮点数(double、single)计算时,为了与 MATLAB 兼容,距离整数在几个 eps 范围内的值将在计算前四舍五入为该整数。任何大于 flintmax(double 为 2^53)的浮点整数将无法正确计算。对于更大的整数值,请在调用此函数之前将输入转换为 uint64。
按照惯例:
rem (x, 0) = NaN 如果 x 是浮点变量 rem (x, 0) = 0 如果 x 是整数变量 rem (x, y) 返回具有 x 符号位的结果
相反的约定请参见 mod 函数。通常,在计算两个 正 数相除的余数时,rem 是最佳选择。对于负数或周期性的值,mod 是更好的选择。
另请参阅: mod。
m = mod (x, y) ¶计算 x 和 y 的模数。
从概念上讲,这由以下公式给出:
x - y .* floor (x ./ y)
并且写成这样以使得为整数类型返回正确的模数。此函数正确处理负值。即 mod (-1, 3) 是 2,而不是 rem (-1, 3) 返回的 -1。
如果参数的维度不一致,或任一参数为复数,则会产生错误结果。
编程说明:在使用浮点数(double、single)计算时,为了与 MATLAB 兼容,距离整数在几个 eps 范围内的值将在计算前四舍五入为该整数。任何大于 flintmax(double 为 2^53)的浮点整数将无法正确计算。对于更大的整数值,请在调用此函数之前将输入转换为 uint64。
按照惯例:
mod (x, 0) = x mod (x, y) 返回具有 y 符号位的结果
相反的约定请参见 rem 函数。通常,当任何输入是负数或值具有周期性时,mod 是比 rem 更好的选择。
另请参阅: rem。
p = primes (n) ¶返回所有小于或等于 n 的素数。
输出的数据类型(double、single、uint32 等)与 n 的输入类型相同。使用的算法是埃拉托色尼筛法。
注意:要获取特定数量 n 的素数,请调用 list_primes (n)。或者,调用 primes (n*log (k*n))(1:n),其中 k 大约为 5 或 6。这是因为从一个素数到下一个素数的距离平均与素数的对数成正比。积分后,大约有 n 个素数小于 n * log (5*n)。
另请参阅: list_primes,isprime。
y = sign (x) ¶计算 signum(符号)函数。
定义为:
-1, x < 0;
sign (x) = 0, x = 0;
1, x > 0.
对于复数参数,sign 返回 x ./ abs (x)。
请注意 sign (-0.0) 为 0。尽管 IEEE 754 浮点标准允许零带符号,但 0.0 和 -0.0 比较相等。如果您必须测试零是否带符号,请使用 signbit 函数。
另请参阅: signbit。