Документация Engee
Notebook

Возведение в степень, извлечение корня и логарифмирование

В этом примере показаны различные способы нахождения степени, корня, экспоненты и логарифма

Возведение в степень

Зададим квадратную матрицу $X$ целых чисел размерностью 3$\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

Для сравнения, результат вычисления $a$ около нуля функцией exp():

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

Логарифм $x=log_a{b}$ по заданному основаниию $a$ рассчитывается при помощи функции log(a,b).

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

Для точного вычисления натурального логарифма log(x+1) для x около нуля используется функция:

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

Для сравнения, стандартная функция log(1+x) выдаст следующий результат:

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

Вывод

В этом демонстрационном примере мы рассмотрели основные приемы использования операций и функций при вычислении степени, корня, экспоненты и логарифма. Дополнительную информацию по приведенным операциям и функциям можно получить в документации Engee Математические операции и элементарные функции.