17.5工具函数

 
:y= ceil (x)

返回不小于的最小整数x.

这相当于向正无穷大取整。

如果x很复数,返回ceil (real (x)) + ceil (imag (x)) * I.

ceil ([-2.7, 2.7])
    ⇒ -2    3

详见: floor,round,fix.

广告
 
:y= fix (x)

截断的小数部分x并返回整数部分。

这相当于向零取整。如果x很复数,返回fix (real (x)) + fix (imag (x)) * I.

fix ([-2.7, 2.7])
   ⇒ -2    2

详见: ceil,floor,round.

广告
 
:y= floor (x)

返回不大于的最大整数x.

这相当于向负无穷大取整。如果xiscomplex,返回floor (real (x)) + floor (imag (x)) * I.

floor ([-2.7, 2.7])
     ⇒ -3    2

详见: ceil,round,fix.

广告
 
:y= round (x)

返回最接近的整数x.

如果x很复数,返回round (real (x)) + round (imag (x)) * I.如果有两个最接近的整数,则返回离零更远的一个。

round ([-2.7, 2.7])
     ⇒ -3    3

详见: ceil,floor,fix,roundb.

广告
 
:y= roundb (x)

返回最接近的整数x。如果有两个接近的整数,则返回偶数(银行四舍五入)。

如果x很复数,返回roundb (real (x)) + roundb (imag (x)) * I.

详见: round.

广告
 
:m= max (x)
:m= max (x, [],dim)
:[m,im] = max (x)
:m= max (x,y)

在数组中查找最大值x.

对于向量参数,返回最大值。对于矩阵参数,返回具有每列最大值的行向量。对于二维数组,max沿着第一非单重维度操作。

如果可选的第三个参数dim存在,则沿此维度操作。在这种情况下,第二个参数被忽略,并且应该被困扰到空矩阵。

对于两个输入(xy),根据的规则返回成对的最大值Broadcasting.

因此

max (max (x))

返回二维矩阵的最大元素x

max (2:5, pi)
    ⇒  3.1416  3.1416  4.0000  5.0000

比较范围中的每个元素2:5具有pi,并返回最大值的arow向量。

对于复数的参数,元素的大小用于比较。如果幅度相同,则结果在(-pi,pi])范围内按相角排序。因此,

max ([-1 i 1 -i])
    ⇒ -1

因为所有分量的大小都是1,但-1的相角最大,值为pi。

如果用一个输入和两个返回变量调用,max还返回最大值的第一个索引。因此

[x, ix] = max ([1, 3, 5, 2, 5])
    ⇒  x = 5
        ix = 3

详见: min,cummax,cummin.

广告
 
:m= min (x)
:m= min (x, [],dim)
:[m,im] = min (x)
:m= min (x,y)

在数组中查找最小值x.

对于向量参数,返回最小值。对于矩阵参数,返回具有每列最小值的行向量。对于二维数组,min沿着第一非单重维度操作。

如果可选的第三个参数dim存在,则沿此维度操作。在这种情况下,第二个参数被忽略,并且应该被困扰到空矩阵。

对于两个输入(xy),根据的规则返回成对的最小值Broadcasting.

因此

min (min (x))

返回二维矩阵的最小元素x

min (2:5, pi)
    ⇒  2.0000  3.0000  3.1416  3.1416

比较范围中的每个元素2:5具有pi,并返回最小值的arow向量。

对于复数的参数,元素的大小用于比较。如果幅度相同,则结果在(-pi,pi])范围内按相角排序。因此,

min ([-1 i 1 -i])
    ⇒ -i

因为所有分量的大小都是1,但-i的相角最小,值为-pi/2。

如果用一个输入和两个返回变量调用,min还返回最小值的第一个索引。因此

[x, ix] = min ([1, 3, 0, 2, 0])
    ⇒  x = 0
        ix = 3

详见: max,cummin,cummax.

广告
 
:M= cummax (x)
:M= cummax (x,dim)
:[M,IM] = cummax (…)

返回沿维度的累积最大值dim.

如果dim未指定,则默认为按列操作。例如:

cummax ([1 3 2 6 4 5])
   ⇒  1  3  3  6  6  6

如果使用两个输出参数调用,则还会返回最大值的索引。

[w, iw] = cummax ([1 3 2 6 4 5])
⇒
M =  1  3  3  6  6  6
IM = 1  2  2  4  4  4

详见: cummin,max,min.

广告
 
:M= cummin (x)
:M= cummin (x,dim)
:[M,IM] = cummin (x)

返回沿维度的累积最小值dim.

如果dim未指定,则默认为按列操作。例如:

cummin ([5 4 6 2 3 1])
   ⇒  5  4  4  2  2  1

如果使用两个输出参数调用,则还会返回最小值的索引。

[M, IM] = cummin ([5 4 6 2 3 1])
⇒
M =  5  4  4  2  2  1
IM = 1  2  2  4  4  6

详见: cummax,min,max.

广告
 
:h= hypot (x,y)
:h= hypot (x,y,z, …)

按元素计算的平方和的平方根xy.

这相当于sqrt (x.^2 + y.^2),但是以避免大值溢出的方式进行计算xy.

hypot也可以用两个以上的参数调用;在这种情况下,参数是从左到右累积的:

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,x,y,z, …)
:[…] = gradient (f,x0)
:[…] = gradient (f,x0,s)
:[…] = gradient (f,x0,x,y, …)

计算采样数据或函数的梯度。

如果m是一个向量,计算的一维梯度m如果m是为每个维度计算梯度的矩阵。

[dx, dy] = gradient (m)计算的一维梯度xy方向如果m是amatrix。其他返回参数可用于多维图。

两点之间的恒定间距可以通过s参数如果s是一个标量,它被假定为所有维度的间距。否则,可以从提供单独的间距值x,…参数。标量值指定等间距。的向量值x,…参数指定该维度的坐标。长度必须与其相应的尺寸相匹配m.

在边界点应用线性外推法。使用数值梯度的第一近似值计算内部点

y'(i) = 1/(x(i+1)-x(i-1)) * (y(i-1)-y(i+1)).

如果第一个参数f是一个函数句柄,函数在中的点处的梯度x0使用中心差来近似。例如gradient (@cos, 0)近似正弦函数在点上的梯度x0=0与采样数据一样,可以通过sdx,dy,…参数。默认情况下,使用间距1。

详见: diff,del2.

广告
 
:z= dot (x,y)
:z= dot (x,y,dim)

计算两个向量的点积。

如果xy是矩阵,计算沿着第一个非奇异维度的点积。

如果可选参数dim给出了,计算了该尺寸上的点积。

支持说明:这相当于sum (conj (X) .* Y, dim),但是避免了形成多个数组并且速度更快。当XY是列向量,结果等效于X' * Y虽然dot是为整数数组定义的,因为整数对象的范围有限,输出可能与预期结果不同。

详见: cross,divergence,tensorprod.

广告
 
:z= cross (x,y)
:z= cross (x,y,dim)

计算两个三维向量的向量叉积xy.

如果xy是矩阵,叉积沿着第一维度应用于三个元素。

可选参数dim强制计算指定尺寸的叉积。如果维度 不是三维则报错。

示例代码:

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.

广告
 
:div= divergence (x,y,z,fx,fy,fz)
:div= divergence (fx,fy,fz)
:div= divergence (x,y,fx,fy)
:div= divergence (fx,fy)

计算数组给出的向量场的散度fx,fyfzfx,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,zx,y分别地

详见: curl,gradient,del2,dot.

广告
 
:[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,fyfzfx,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,zx,y分别地v计算二维输入的角速度向量在z轴方上级标量分量。对于三维输入,在向量场方上级每个网格点上计算标量化。

详见: divergence,gradient,del2,cross.

广告
 
:L= del2 (M)
:L= del2 (M,h)
:L= del2 (M,dx,dy, …)

计算离散拉普拉斯算子。

对于二维矩阵M这被定义为

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

详见: gradient,diff.

广告
 
:f= factorial (n)

返回的阶乘n这里的n是一个真正的非否定的接受者。

如果n是标量,这等效于prod (1:n)。对于向量或矩阵参数,返回数组中每个元素的阶乘。

对于非整数,详见广义阶乘函数gamma请注意,阶乘函数增长得很快,即使使用双精度值,如果n> 171. Forsuch案例考虑gammaln.

详见: prod,gamma,gammaln.

广告
 
:pf= factor (q)
:[pf,n] = factor (q)

返回的素数因子分解q.

素数因子分解定义为prod (pf) == q其中的每个元素pf是一个素数。如果q == 1,返回1。输出pf与输入属于相同的数字类。

使用两个输出参数,返回唯一的素数pf及其多样性。也就是说,prod (pf .^ n) == q.

支持说明:如果输入qsingledouble,则不得超过相应的flintmax。对于较大的输入,请将其投射到uint64如果它们小于2^64:

factor (uint64 (18446744073709011493))
   ⇒     571111    761213  42431951

对于更大的输入,使用sym如果已安装并加载符号包:

factor (sym ('9444733049654361449941'))
   ⇒ (sym)
              1           1
 1099511627689 ⋅8589934669

详见: gcd,lcm,isprime,primes.

广告
 
:g= gcd (a1,a2, …)
:[g,v1, …] = gcd (a1,a2, …)

计算的最大公约数a1,a2, ….

所有参数的大小或标量必须相同。对于数组,将分别为每个元素计算最大公约数。所有元素都必须是普通整数或高斯(复数)整数。注意,对于高斯整数,gcd仅在相位因子(乘以1、-1、i或-i)之前是唯一的,因此返回四个可能的整数中的任意最大公约数。

可选的返回参数v1,…,包含整数向量,

g = v1 .* a1 + v2 .* a2 + ...

示例代码:

gcd ([15, 9], [20, 18])
   ⇒  5  9

编程提示:要查找单个数组中所有元素的GCD,请使用num2cell而不是嵌套调用或循环:

x = [30 42 70 105];    # vector or array of inputs
gcd (num2cell (x) {:})
   ⇒     1

详见: lcm,factor,isprime.

广告
 
:l= lcm (x,y)
:l= lcm (x,y, …)

计算的最小公倍数xy,或所有参数列表的。

所有输入必须具有相同的大小或标量。所有元素都必须是贝雷阿尔整数或高斯(复数)整数。对于复数输入,结果仅在相位因子(乘以+1、+i、-1或-i)之前是唯一的,并且四个结果中的一个是任意返回的。

示例代码:

lcm (5:8, 9:12)
   ⇒  45  30  77  24

编程提示:要查找单个数组的所有元素的LCM,请使用num2cell而不是嵌套调用或循环:

x = 1:10;    # vector or array of inputs
lcm (num2cell (x) {:})
   ⇒     2520

详见: factor,gcd,isprime.

广告
 
:r= rem (x,y)

返回除法的余数x / y.

余数使用以下表达式计算

x - y .* fix (x ./ y)

如果参数的维度不一致,或者其中一个参数很复数,则会打印错误消息。

编程注意事项:当使用浮点数(双、单)进行计算时,为了与兼容,整数的几个eps内的值将在计算前四舍五入到该整数MATLAB.任何大于的浮点整数flintmax(2^53表示双)计算不正确。对于较大的整数值,将输入转换为uint64在调用此函数之前。

按照惯例,

rem (x, 0) = NaN  if x is a floating point variable
rem (x, 0) = 0    if x is an integer variable
rem (x, y)  returns a value with the signbit from x

有关相反的约定,详见mod作用一般来说rem在计算除以二后的余数时最好正乐观的数字。对于负数或当值是周期性的时,mod是一个更好的选择。

详见: mod.

广告
 
:m= mod (x,y)

计算的模xy.

从概念上讲,这是从

x - y .* floor (x ./ y)

并且被写入使得对于整数类型返回正确的模数。此函数可正确处理负值。也就是说,mod (-1, 3) 是2,而不是-1,因为rem (-1, 3) 返回。

如果参数的维度不一致,或者其中一个参数很复数,则会导致错误。

编程注意事项:当使用浮点数(双、单)进行计算时,为了与兼容,整数的几个eps内的值将在计算前四舍五入到该整数MATLAB.任何大于的浮点整数flintmax(2^53表示双)计算不正确。对于较大的整数值,将输入转换为uint64在调用此函数之前。

按照惯例,

mod (x, 0) = x
mod (x, y)      returns a value with the signbit from y

有关相反的约定,详见rem作用一般来说mod是比rem当任何输入是负数时,或者当值是周期性的时。

详见: rem.

广告
 
:p= primes (n)

将所有素数返回到n.

输出数据类(double、single、uint32等)与的输入类相同n所使用的算法是Eratosthenes筛。

注:对于特定数字n的素数,调用list_primes (n)。或者,调用primes (n*log (k*n))(1:n)这里的kisabout 5或6。这是因为从一个素数到下一个素数的距离平均与素数的对数成正比。关于集成,大约有n素数小于n * log (5*n).

详见: list_primes,isprime.

广告
 
:p= list_primes ()
:p= list_primes (n)

列出第一个n素数。

如果n未指定,则列出前25个素数。

详见: 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.

广告
 
:y= signbit (x)

如果的值为,则返回逻辑truex设置了其符号位,否则为false。

此行为与其他逻辑函数一致。详见逻辑值该行为不同于C语言函数,如果设置了符号位,则C语言函数返回非零。

这与x < 0.0,因为IEEE 754浮点允许对零进行赋值。比较-0.0 < 0.0是假的,但是signbit (-0.0)将返回一个非零值。

详见: sign.

广告

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2