AnyMath 文档

数学运算和初等函数

Julia在其所有数值基元类型中提供了基本算术和按位运算符的完整集合,并提供了标准数学函数的全面集合的可移植、高效的实现。

算术运算符

以下内容https://en.wikipedia.org/wiki/Arithmetic#Arithmetic_operations所有基本数值类型都支持[算术运算符]:

表达方式 姓名 资料描述

+x

一元加

身份操作

-x

一元减

将值映射到它们的加性反转

x+y

二进制加

执行加法

x-y

二进制减

执行减法

x*y

时代

执行乘法

x/y

分,分

执行分部

x<y

整数除法

x/y,截断为整数

x\y

逆除法

相当于 y/x

x^y

权力

加薪 xyth功率

x%y

余数

相当于 快速眼动(x,y)

直接放在标识符或括号前的数字文字,例如 2x2(x+y),被视为乘法,除了优先级高于其他二进制运算。 见 数字文字系数的详细信息。

Julia的提升系统使参数类型的混合物的算术运算"只是工作"自然和自动。 见 转换及推广有关推广制度的详情。

÷符号可以通过书写方便地键入 \div<tab> 到REPL或Julia IDE。 查看 关于Unicode输入的手册部分以获取更多信息。

以下是一些使用算术运算符的简单示例:

julia> 1 + 2 + 3
6

julia> 1 - 2
-1

julia> 3&ast;2/12
0.5

(按照惯例,如果他们在附近的其他运营商之前申请,我们倾向于更紧密地对待太空运营商。 例如,我们通常会写 -x+2 首先反映这一点 x 被否定,然后 2 被添加到该结果中。)

在乘法中使用时, 错误 充当_strong zero_:

julia> NaN &ast; false
0.0

julia> false &ast; Inf
0.0

这对于防止 已知为零的数量中的值。 见https://arxiv.org/abs/math/9205211[Knuth(1992)]为动机。

布尔运算符

以下内容https://en.wikipedia.org/wiki/Boolean_algebra#Operations[布尔运算符]支持 布尔类型:

表达方式 姓名

!x

否定,否定

x&&y

短路和

x |\/y

短路或

否定变化 真的错误 反之亦然。 链接页面上解释了短路操作。

请注意 布尔 是一个整数类型,所有通常的提升规则和数字运算符也定义在它上面。

按位运算符

以下内容https://en.wikipedia.org/wiki/Bitwise_operation#Bitwise_operators所有原始整数类型都支持[按位运算符]:

表达方式 姓名

~x

按位不

x&y

按位和

x | y

按位或

x<y

按位异或(独占或)

x<y

按位nand(不是和)

x<y

按位nor(not or)

x>>>y

逻辑移位

x>>y

算术移位

x<<y

逻辑/算术左移

以下是一些按位运算符的示例:

julia> ~123
-124

julia> 123 & 234
106

julia> 123 | 234
251

julia> 123 ⊻ 234
145

julia> xor(123, 234)
145

julia> nand(123, 123)
-124

julia> 123 ⊼ 123
-124

julia> nor(123, 124)
-128

julia> 123 ⊽ 124
-128

julia> ~UInt32(123)
0xffffff84

julia> ~UInt8(123)
0x84

更新运算符

每个二进制算术和按位运算符也有一个更新版本,将运算结果分配回其左操作数。 二进制运算符的更新版本是通过放置一个 = 紧接着操作员。 例如,写作 x+=3 相当于写作 x=x+3:

julia> x = 1
1

julia> x += 3
4

julia> x
4

所有二进制算术和按位运算符的更新版本是:

+=  -=  &ast;=  /=  \=  ÷=  %=  ^=  &=  |=  ⊻=  >>>=  >>=  <<=

注意更新运算符在左侧重新绑定变量。 因此,变量的类型可能会发生变化。

朱莉娅>x=0x01;typeof(x)
UInt8

julia>x&ast;=2#同x=x&ast;2
2

朱莉娅>类型(x)
Int64

矢量化"点"运算符

对于_every_二进制操作像 ^,有相应的"点"操作 .^ 即_automatically_定义为执行 ^ 数组上的逐个元素。 例如, [1, 2, 3] ^ 3 没有定义,因为没有标准的数学意义来"立方体化"一个(非正方形)数组,但是 [1, 2, 3] .^ 3 被定义为计算元素化(或"矢量化")结果 [1^3, 2^3, 3^3]. 同样,对于一元运算符,如 !,有相应的 .√ 这适用于运算符elementwise。

julia> [1, 2, 3] .^ 3
3-element Vector{Int64}:
  1
  8
 27

更具体地说, a.^b 被解析为 "点"呼叫 (^).(a,b),其执行一 广播操作:它可以组合数组和标量,相同大小的数组(执行操作elementwise),甚至不同形状的数组(例如组合行和列向量以产生矩阵)。 而且,像所有矢量化的"点调用"一样,这些"点运算符"是_fusing_。 例如,如果计算 2 .&ast;A.^2。+罪。(A) (或等同地 @. 2a^2+罪(A),使用 @.宏)为数组 A,它执行_single_循环 A、计算 2a^2+sin(a) 对于每个元素 aA. 特别是,嵌套的点调用,如 f.(g.(x)) 是融合的,和"相邻"二元运算符,如 x.+ 3 .&ast;x.^2 等效于嵌套的点调用 (+).(x,(&ast;)。(3, (^).(x,2))).

此外,"点状"更新运营商喜欢 a.+=b (或 @. a+=b)被解析为 a.=a.+b,在哪里 .= 是一个融合_in-place_赋值操作(见 dot语法文档)。

注意点语法也适用于用户定义的运算符。 例如,如果定义 ⊗(A,B)=kron(A,B) 给出一个方便的中缀语法 A>B 对于Kronecker产品(克伦),则 [A,B]。⊗[C,D] 将计算 [A∈C,B∈D] 没有额外的编码。

将点运算符与数字文字组合可能是不明确的。 例如,目前尚不清楚是否 1.+x 手段 1. +x1 .+x. 因此,这种语法是不允许的,在这种情况下,必须在运算符周围使用空格。

数字比较

标准比较操作是为所有基本数值类型定义的:

操作员 姓名

==

平等

!=,

不平等

<

小于

<=,

小于或等于

>

大于

>=,

大于或等于

以下是一些简单的例子:

julia> 1 == 1
true

julia> 1 == 2
false

julia> 1 != 2
true

julia> 1 == 1.0
true

julia> 1 < 2
true

julia> 1.0 > 3
false

julia> 1 >= 1.0
true

julia> -1 <= 1
true

朱莉娅>-1<=-1
真的

朱莉娅>-1<=-2
错误

朱莉娅>3<-0.5
错误

整数以标准方式进行比较-通过位的比较。 浮点数根据比较https://en.wikipedia.org/wiki/IEEE_754-2008[IEEE754标准]:

*有限数字以通常的方式排序。 *正零等于但不大于负零。 * 资讯 等于自己,大于其他一切,除了 . * -Inf 等于自己,比其他一切都少,除了 . * 不等于,不小于,也不大于任何东西,包括它本身。

最后一点可能令人惊讶,因此值得注意:

julia> NaN == NaN
false

julia> NaN != NaN
true

julia> NaN < NaN
false

julia> NaN > NaN
false

并且在工作时会引起头痛 数组:

julia> [1 NaN] == [1 NaN]
false

Julia提供了额外的函数来测试特殊值的数字,这在哈希键比较等情况下很有用:

功能 测试如果

等距(x,y)

xy 是相同的

异辉石(x)

x 是一个有限的数字

isinf(x)

x 是无限的

伊斯南(x)

x 不是数字

等效;等效考虑 s彼此相等:

julia> isequal(NaN, NaN)
true

julia> isequal([1 NaN], [1 NaN])
true

julia> isequal(NaN, NaN32)
true

等效;等效 也可用于区分带符号的零:

julia> -0.0 == 0.0
true

julia> isequal(-0.0, 0.0)
false

有符号整数、无符号整数和浮点数之间的混合类型比较可能很棘手。 为了确保茱莉亚正确地做到这一点,我们采取了很多措施.

对于其他类型, 等效;等效 默认调用 ==,所以如果你想为自己的类型定义相等,那么你只需要添加一个 ==方法。 如果你定义了自己的相等函数,你可能应该定义一个对应的 哈希方法,以确保 等距(x,y) 暗示 哈希(x)==哈希(y).

链接比较

与大多数语言不同,https://en.wikipedia.org/wiki/Python_syntax_and_semantics#Comparison_operators[Python的显着例外],比较可以任意链接:

julia> 1 < 2 <= 2 < 3 == 3 > 2 >= 1 == 1 < 3 != 5
true

在数字代码中,链接比较通常非常方便。 链接比较使用 && 标量比较运算符,以及 &elementwise比较的运算符,它允许它们处理数组。 例如, 0 .<A.< 1 给出一个布尔数组,其条目为true,其中对应的元素为 A 都在0到1之间。

注意链式比较的评估行为:

julia> v(x) = (println(x); x)
v (generic function with 1 method)

julia> v(1) < v(2) <= v(3)
2
1
3
true

julia> v(1) > v(2) <= v(3)
2
1
false

中间表达式只计算一次,而不是两次,如果表达式被写成 v(1)<v(2)&&v(2)<=v(3). 但是,链式比较中的评估顺序未定义。 强烈建议不要在链式比较中使用具有副作用(如打印)的表达式。 如果需要副作用,短路 && 应显式使用运算符(请参阅 短路评价)。

基本函数

Julia提供了一个全面的数学函数和运算符集合。 这些数学运算被定义为广泛的一类数值,只要允许合理的定义,包括整数,浮点数,理数和复数,只要这些定义有意义。

此外,这些函数(如任何Julia函数)可以以"矢量化"的方式应用于具有 点语法 f.(A),例如 罪。(一) 将计算数组中每个元素的正弦 A.

运算符优先级和关联性

Julia应用以下操作的顺序和关联性,从最高优先级到最低优先级:

类别: 营办商 联合性,联合性

语法

. 其次是 ::

左图

指数化

^

一元

+ - ! ~ ¬ √ ∛ ∜ ⋆ ± ∓ <: >:

右脚注:1[一元运算符 +- 要求在其参数周围使用显式圆括号,以便从运算符中消除歧义 通过:c[++] 等。 一元运算符的其他组合用右键结合来解析,例如。, √√-a 作为 √(√(-a)).]

比特转移

<< >> >>>

左图

分数;分数

//

左图

乘法运算

* / % & \ ÷

左脚注:2[运算符 +, 通过:c[]` 和 `+*+` 都是非联想的。 `a+b+c` 被解析为 `+(a,b,c)` 不是 `+(+(a,b),c)`. 但是,以下的回退方法 `(a,b,c,d。..)+&ast;(a,b,c,d。..) 两者都默认为左关联求值。]

此外

+ - | ⊻

左脚注:2[]

语法

: ..

左图

语法

|>

左图

语法

<|

比较

> < >= <= == === != !== <:

非关联性

控制流程

&& 其次是 || 其次是 ?

=>

分配作业

= += -= &ast;= /= //= \= ^= ÷= %= |= &= ⊻= <<= >>= >>>=

有关_every_Julia运算符优先级的完整列表,请参阅此文件的顶部:https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm[脧锚脧赂`src/julia-解析器。供应链管理`]. 请注意,有些运算符没有在 基地 模块,但可以由标准库,包或用户代码给出定义。

您还可以通过内置函数找到任何给定运算符的数字优先级 基地。操作符_记录符,其中较高的数字优先:

julia> Base.operator_precedence(:+), Base.operator_precedence(:&ast;), Base.operator_precedence(:.)
(11, 12, 17)

julia> Base.operator_precedence(:sin), Base.operator_precedence(:+=), Base.operator_precedence(:(=))  # (Note the necessary parens on `:(=)`)
(0, 1, 1)

也可以通过调用内置函数找到表示运算符关联性的符号 基地。操作性_社会性:

julia> Base.operator_associativity(:-), Base.operator_associativity(:+), Base.operator_associativity(:^)
(:left, :none, :right)

julia> Base.operator_associativity(:⊗), Base.operator_associativity(:sin), Base.operator_associativity(:→)
(:left, :none, :right)

请注意,符号如 :罪 返回优先级 0. 此值表示无效运算符,而不是最低优先级的运算符。 类似地,这样的运算符被分配了关联性 :无.

数字文字系数,例如 2x,被视为优先于任何其他二进制操作的乘法,但 ^ 它们仅作为指数具有更高的优先级。

julia> x = 3; 2x^2
18

julia> x = 3; 2^2x
64

并列解析就像一元运算符,它在指数周围具有相同的自然不对称性: -x^y2x^y 解析为 -(x^y)2(x^y) 鉴于 x^-yx^2y 解析为 x^(-y)x^(2y).

数值转换

Julia支持三种形式的数值转换,它们在处理不精确转换方面有所不同。

*符号 T(x)转换(T,x) 皈依者 x 到类型的值 T. **如果 T 是浮点类型,结果是最近的可表示值,可以是正无穷大或负无穷大。 **如果 T 是整数类型, N.恐怖,恐怖 如果 x 不能由 T. * x%T 转换整数 x 到整数类型的值 T 全等到 x 模数,模数 2^n,在哪里 n 是位数在 T. 换句话说,二进制表示被截断以适合。 * 舍入函数取一个类型 T 作为可选参数。 例如, 圆(Int,x) 是一个简写 Int(圆(x)).

下面的例子显示了不同的形式。

julia> Int8(127)
127

julia> Int8(128)
ERROR: InexactError: trunc(Int8, 128)
Stacktrace:
[...]

julia> Int8(127.0)
127

julia> Int8(3.14)
ERROR: InexactError: Int8(3.14)
Stacktrace:
[...]

julia> Int8(128.0)
ERROR: InexactError: Int8(128.0)
Stacktrace:
[...]

julia> 127 % Int8
127

julia> 128 % Int8
-128

julia> round(Int8,127.4)
127

朱莉娅>圆(Int8,127.6)
错误:InexactError:Int8(128.0)
[医]堆垛机:
[...]

转换和促销如何定义自己的转换和促销。

舍入函数

功能 资料描述 返回类型

圆(x)

圆形 x 到最接近的整数

类型(x)

圆(T,x)

圆形 x 到最接近的整数

T

楼层(x)

圆形 x 朝向 -Inf

类型(x)

楼层(T,x)

圆形 x 朝向 -Inf

T

锡尔(x)

圆形 x 朝向 +Inf

类型(x)

ceil(T,x)

圆形 x 朝向 +Inf

T

中继(x)

圆形 x 迈向零

类型(x)

trunc(T,x)

圆形 x 迈向零

T

部门职能

功能 资料描述

div(x,y), x<y

截断除法;商四舍五入为零

fld(x,y)

floored division;商四舍五入 -Inf

cld(x,y)

天花板划分;商四舍五入 +Inf

快速眼动(x,y), x%y

余数;满足 x==div(x,y)*y+rem(x,y);标志匹配 x

国防部(x,y)

模量;满足 x==fld(x,y)*y+mod(x,y);标志匹配 y

mod1(x,y)

国防部 带偏移量1;返回 r∶(0,y]y>0r∈[y,0)y<0,在哪里 mod(r,y)==mod(x,y)

mod2pi(x)

相对于2pi的模量; 0<=mod2pi(x)<2pi

divrem(x,y)

申报表 (div(x,y),rem(x,y))

fldmod(x,y)

申报表 (fld(x,y),mod(x,y))

gcd(x,y。..)

的最大公约数 x, y,…​

lcm(x,y...)

的最小正公倍数 x, y,…​

符号和绝对值函数

功能 资料描述

abs(x)

一个正值,其大小为 x

abs2(x)

的平方幅度 x

符号(x)

表示的标志 x,返回-1、0或+1

符号(x)

指示符号位是on(true)还是off(false)

副标题(x,y)

大小为 x 和的标志 y

flipsign(x,y)

大小为 x 和的标志 x*y

权力,日志和根

功能 资料描述

sqrt(x), √x

的平方根 x

银监会(x), ∛x

多维数据集根 x

第四根(x), ∜x

第四根 x

hypot(x,y)

与其他边长的直角三角形的斜边 xy

exp(x)

自然指数函数在 x

expm1(x)

准确无误 exp(x)-1x 接近零

ldexp(x,n)

x&ast;2^n 有效计算的整数值 n

日志(x)

的自然对数 x

日志(b,x)

基地 b 对数的 x

log2(x)

以2为底的对数 x

log10(x)

以10为底的对数 x

log1p(x)

准确无误 日志(1+x)x 接近零

指数(x)

的二进制指数 x

意义(x)

浮点数的二进制有效值(a.k.a.尾数) x

有关为什么像这样的功能的概述 [医hypot], expm1,和 log1p是必要和有用的,请参阅John D.Cook关于这个主题的优秀博客文章:https://www.johndcook.com/blog/2010/06/07/math-library-functions-that-seem-unnecessary/[expm1,log1p,erfc],和https://www.johndcook.com/blog/2010/06/02/whats-so-hard-about-finding-a-hypotenuse/[hypot]。

三角函数和双曲函数

还定义了所有标准的三角函数和双曲函数:

sin    cos    tan    cot    sec    csc
sinh   cosh   tanh   coth   sech   csch
asin   acos   atan   acot   asec   acsc
asinh  acosh  atanh  acoth  asech  acsch
sinc   cosc

这些都是单参数函数,具有 阿坦也接受与传统相对应的两个参数https://en.wikipedia.org/wiki/Atan2[脧锚脧赂`阿坦2`]功能。

此外, 辛皮(x)cospi(x)提供了更准确的计算 罪(pi*x)cos(pi*x)分别。

为了用度而不是弧度来计算三角函数,用 d. 例如, 信德(x)计算的正弦 x 哪里 x 以度为单位指定。 度变体的三角函数的完整列表是:

sind   cosd   tand   cotd   secd   cscd
asind  acosd  atand  acotd  asecd  acscd

特殊功能

该软件包提供了许多其他特殊的数学函数https://github.com/JuliaMath/SpecialFunctions.jl[SpecialFunctions.jl]。