Engee 文档
Notebook

度数扩展、根提取和对数化

本例展示了求度、求根、求指数和求对数的不同方法

度数展开

让我们设置一个维数为 3 的整数方阵$X$$\times$ 3。

In [ ]:
X = [3 1 4
     5 1 3
     2 8 7];

将矩阵提升到$Y=X^n$ 的程度,等于矩阵乘以自身的$X$ ,再乘以自身的$n-1$ 倍。

In [ ]:
X ^ 2
Out[0]:
3×3 Matrix{Int64}:
 22  36  43
 26  30  44
 60  66  81

将矩阵逐元素扩展到一度等于矩阵本身的逐元素乘法。例如:$Y =X^2= X \odot X$ 。

In [ ]:
X .^ 2
Out[0]:
3×3 Matrix{Int64}:
  9   1  16
 25   1   9
  4  64  49

以下表达式可用于带赋值的阶乘展开:

In [ ]:
X ^= 2
Out[0]:
3×3 Matrix{Int64}:
 22  36  43
 26  30  44
 60  66  81
In [ ]:
X = [3 1 4
     5 1 3
     2 8 7];
X .^= 2
Out[0]:
3×3 Matrix{Int64}:
  9   1  16
 25   1   9
  4  64  49

也支持升高到负度数:

In [ ]:
X = [3 1 4
     5 1 3
     2 8 7];
X ^ (-3)
Out[0]:
3×3 Matrix{Float64}:
  0.057581   -0.051794     -0.00260417
  0.0529514  -0.000868056  -0.0257523
 -0.0792824   0.0353009     0.0225694

这种操作相当于将逆矩阵$X^{-1}$ 本身乘以$n-1$ 倍。

In [ ]:
isequal(X^(-3), inv(X)^3)
Out[0]:
true

让我们来考虑一下以有理数或浮点数为指数的升度:

In [ ]:
Q = 2//3;
q = 2/3;
X ^ Q
Out[0]:
3×3 Matrix{ComplexF64}:
   2.33466+2.22045e-16im  -0.261273-4.44089e-16im   1.58405+1.11022e-16im
   2.70242-3.33067e-16im   0.774717+0.0im          0.882171+1.11022e-16im
 -0.210172+0.0im            3.68872+0.0im           3.50221-2.22045e-16im
In [ ]:
isequal(X^Q, X^q)
Out[0]:
true

求根

计算矩阵平方根有几种方法$Y = \sqrt{X}$ :

  • 使用函数sqrt()
  • 通过增加度数$\frac{1}{2}$ ;
  • 使用平方根运算符
In [ ]:
sqrt(X)
Out[0]:
3×3 Matrix{Float64}:
  2.02239   -0.373716  0.907713
  1.79475    0.866793  0.401277
 -0.461978   2.29118   2.5495
In [ ]:
isequal(X,sqrt(X))
Out[0]:
true

对于每一种平方根提取方法,都有其逐个元素的类似方法:

In [ ]:
sqrt.(X)
Out[0]:
3×3 Matrix{Float64}:
 1.73205  1.0      2.0
 2.23607  1.0      1.73205
 1.41421  2.82843  2.64575
In [ ]:
isequal(.√X,sqrt.(X)) && isequal(X.^(0.5),sqrt.(X))
Out[0]:
true

要计算整数平方根,可以使用函数isqrt()

In [ ]:
isqrt(26)
Out[0]:
5

您可以通过几种方法计算立方根$y = \sqrt[3]{x}$ :

  • 使用函数cbrt()
  • 使用立方根运算符
In [ ]:
x = 1e3;
cbrt(x)
Out[0]:
10.0
In [ ]:
isequal(x,cbrt(x))
Out[0]:
true

矩阵的立方根和大阶根的计算$n$ ,只能通过度数展开$\frac{1}{n}$ 。

对于运算 和函数cbrt() ,也可以对矩阵进行逐元素计算。

In [ ]:
cbrt.(X)
Out[0]:
3×3 Matrix{Float64}:
 1.44225  1.0  1.5874
 1.70998  1.0  1.44225
 1.25992  2.0  1.91293
In [ ]:
isequal(.∛x,cbrt.(x))
Out[0]:
true

请注意,在计算负实数的偶次根时会出错。在这种情况下,必须将子根表达式转换为复数表示,才能进行正确计算。

In [ ]:
sqrt(complex(-1))
Out[0]:
0.0 + 1.0im

指数和指数函数

计算一个数字的指数的方法如下:

In [ ]:
exp(1)
Out[0]:
2.718281828459045

要准确计算$exp(a)-1$ ,且$a$ 接近零,可以使用函数expm1()

In [ ]:
expm1(eps()/10)
Out[0]:
2.2204460492503132e-17

作为比较,使用函数exp() 计算$a$ 接近零点的结果:

In [ ]:
exp(eps()/10)-1.0
Out[0]:
0.0

还有以 2 为底和以 10 为底计算度数的函数。

In [ ]:
exp2(10)
Out[0]:
1024.0
In [ ]:
exp10(7)
Out[0]:
1.0e7

为了从表达式$x\cdot2^{n}$ 高效计算度数,我们使用函数ldexp(x,n) ,其中 x 是浮点数,n 是整数。

In [ ]:
ldexp(2.0,10)
Out[0]:
2048.0

对数化

函数log().用于计算自然对数。

In [ ]:
log(exp(1))
Out[0]:
1.0

您还可以计算基数为 2 和 10 的对数:

In [ ]:
log2(2048)
Out[0]:
11.0
In [ ]:
log10(1e-6)
Out[0]:
-6.0

使用函数log(a,b) 可以计算$x=log_a{b}$ 在给定基数$a$ 上的对数。

In [ ]:
log(8,512)
Out[0]:
3.0

要精确计算 x 接近零时的自然对数log(x+1) ,可使用函数:

In [ ]:
log1p(eps()/10)
Out[0]:
2.2204460492503132e-17

作为比较,标准函数log(1+x) 将得出以下结果:

In [ ]:
log(1+eps()/2)
Out[0]:
0.0

输出

在本演示中,我们介绍了使用运算和函数计算度、根、指数和对数的基本技巧。有关这些运算和函数的更多信息,请参阅 Engee [数学运算和基本函数] 文档 (https://engee.com/helpcenter/stable/julia/manual/mathematical-operations.html)。