Julia Language
Arytmetyka
Szukaj…
Składnia
- + x
- -x
- a + b
- a - b
- a * b
- a / b
- a ^ b
- a% b
- 4a
- sqrt (a)
Równanie kwadratowe
Julia używa podobnych operatorów binarnych do podstawowych operacji arytmetycznych, jak matematyka lub inne języki programowania. Większość operatorów można zapisać w notacji infiksowej (to znaczy pomiędzy obliczanymi wartościami). Julia ma kolejność operacji zgodną ze wspólną konwencją w matematyce.
Na przykład poniższy kod implementuje formułę kwadratową , która pokazuje operatory +
, -
, *
i /
dla dodawania, odejmowania, mnożenia i dzielenia. Pokazano również ukryte mnożenie , gdzie liczba może być umieszczona bezpośrednio przed symbolem, co oznacza mnożenie; to znaczy 4a
oznacza to samo co 4*a
.
function solvequadratic(a, b, c)
d = sqrt(b^2 - 4a*c)
(-b - d) / 2a, (-b + d) / 2a
end
Stosowanie:
julia> solvequadratic(1, -2, -3)
(-1.0,3.0)
Sito Eratostenesa
Reszta operatora w Julii jest operatorem %
. Ten operator zachowuje się podobnie do %
w językach takich jak C i C ++. a % b
to pozostała podpisana pozostałość po podzieleniu a
przez b
.
Ten operator jest bardzo przydatny do implementacji niektórych algorytmów, takich jak następująca implementacja Sita Eratostenesa .
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
Stosowanie:
julia> sieve(20)
8-element Array{Int64,1}:
2
3
5
7
11
13
17
19
Arytmetyka Matrycowa
Julia używa standardowych matematycznych znaczeń operacji arytmetycznych po zastosowaniu do macierzy. Czasami zamiast tego pożądane są operacje elementarne. Są one oznaczone kropką ( .
) Poprzedzającą operację, którą należy wykonać elementarnie. (Należy pamiętać, że operacje elementarne często nie są tak wydajne jak pętle).
Sumy
Operator +
na macierzach jest sumą macierzy. Jest podobny do sumy elementarnej, ale nie nadaje kształtu. To znaczy, jeśli A
i B
mają ten sam kształt, to A + B
jest taki sam jak A .+ B
; w przeciwnym razie A + B
jest błędem, podczas gdy A .+ B
niekoniecznie musi być.
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
Podobnie -
oblicza różnicę macierzy. Zarówno +
jak i -
mogą być również używane jako operatory jednoargumentowe.
Produkty
*
Operator macierzy jest produktem macierzowym (nie produktem elementarnym). W przypadku produktu elementarnego użyj operatora. .*
. Porównaj (używając tych samych matryc jak powyżej):
julia> A * B
2×2 Array{Int64,2}:
19 22
43 50
julia> A .* B
2×2 Array{Int64,2}:
5 12
21 32
Uprawnienie
Operator ^
oblicza potęgowanie macierzy . Potęgowanie macierzy może być przydatne do szybkiego obliczania wartości niektórych nawrotów. Na przykład liczby Fibonacciego mogą być generowane przez wyrażenie macierzowe
fib(n) = (BigInt[1 1; 1 0]^n)[2]
Jak zwykle, operator .^
Może być użyty tam, gdzie pożądana jest potęgowanie elementarne.