Julia Language
арифметика
Поиск…
Синтаксис
- + х
- -Икс
- a + b
- a - b
- a * b
- a / b
- a ^ b
- a% b
- 4а
- SQRT (а)
Квадратичная формула
Джулия использует аналогичные двоичные операторы для основных арифметических операций, как и математика или другие языки программирования. Большинство операторов могут быть записаны в инфиксной нотации (т. Е. Помещены между вычисленными значениями). У Джулии есть порядок операций, соответствующий общей конвенции в математике.
Например, приведенный ниже код реализует квадратичную формулу , которая демонстрирует операции +
, -
, *
и /
для сложения, вычитания, умножения и деления соответственно. Также показано неявное умножение , где число может быть помещено непосредственно перед символом, чтобы означать умножение; то есть 4a
означает то же, что и 4*a
.
function solvequadratic(a, b, c)
d = sqrt(b^2 - 4a*c)
(-b - d) / 2a, (-b + d) / 2a
end
Использование:
julia> solvequadratic(1, -2, -3)
(-1.0,3.0)
Сито Эратосфена
Оператор остатка в Юлии является оператором %
. Этот оператор ведет себя аналогично %
в таких языках, как C и C ++. a % b
- остаток, оставшийся после подписания, после деления a
на b
.
Этот оператор очень полезен для реализации определенных алгоритмов, таких как следующая реализация Сита Эратосфена .
iscoprime(P, i) = !any(x -> i % x == 0, P)
function sieve(n)
P = Int[]
for i in 2:n
if iscoprime(P, i)
push!(P, i)
end
end
P
end
Использование:
julia> sieve(20)
8-element Array{Int64,1}:
2
3
5
7
11
13
17
19
Матричная арифметика
Джулия использует стандартные математические значения арифметических операций при применении к матрицам. Иногда вместо этого требуются элементарные операции. Они помечены полной остановкой ( .
), Предшествующей оператору, выполняемой по-разному. (Обратите внимание, что элементарные операции часто не так эффективны, как циклы).
Суммы
Оператор +
на матрицах является матричной суммой. Он похож на элементную сумму, но не передает форму. То есть, если A
и B
имеют одинаковую форму, то A + B
совпадает с A .+ B
; в противном случае A + B
является ошибкой, тогда как A .+ B
не обязательно может быть.
julia> A = [1 2
3 4]
2×2 Array{Int64,2}:
1 2
3 4
julia> B = [5 6
7 8]
2×2 Array{Int64,2}:
5 6
7 8
julia> A + B
2×2 Array{Int64,2}:
6 8
10 12
julia> A .+ B
2×2 Array{Int64,2}:
6 8
10 12
julia> C = [9, 10]
2-element Array{Int64,1}:
9
10
julia> A + C
ERROR: DimensionMismatch("dimensions must match")
in promote_shape(::Tuple{Base.OneTo{Int64},Base.OneTo{Int64}}, ::Tuple{Base.OneTo{Int64}}) at ./operators.jl:396
in promote_shape(::Array{Int64,2}, ::Array{Int64,1}) at ./operators.jl:382
in _elementwise(::Base.#+, ::Array{Int64,2}, ::Array{Int64,1}, ::Type{Int64}) at ./arraymath.jl:61
in +(::Array{Int64,2}, ::Array{Int64,1}) at ./arraymath.jl:53
julia> A .+ C
2×2 Array{Int64,2}:
10 11
13 14
Аналогично, -
вычисляет разность матриц. Оба +
и -
также могут использоваться как унарные операторы.
Товары
Оператором *
на матрицах является матричное произведение (а не элементное произведение). Для элементарного произведения используйте оператор. .*
. Сравните (используя те же матрицы, что и выше):
julia> A * B
2×2 Array{Int64,2}:
19 22
43 50
julia> A .* B
2×2 Array{Int64,2}:
5 12
21 32
полномочия
Оператор ^
вычисляет экспонентуцию матрицы . Выражение матрицы может быть полезно для быстрого вычисления значений определенных повторений. Например, числа Фибоначчи могут быть сгенерированы матричным выражением
fib(n) = (BigInt[1 1; 1 0]^n)[2]
Как обычно, оператор .^
Можно использовать, когда поэтапное возведение в степень является желаемой операцией.