Julia 数学函数
Julia 内置了丰富的数学函数,非常适合科学计算和数据分析。
基本数学函数
绝对值和符号
julia
# 绝对值
println(abs(-5)) # 5
println(abs(-3.14)) # 3.14
println(abs(3 + 4im)) # 5.0(复数的模)
# 符号函数
println(sign(-5)) # -1
println(sign(0)) # 0
println(sign(5)) # 1
# 复制符号
println(copysign(5, -1)) # -5
println(copysign(-5, 1)) # 5取整函数
julia
x = 3.7
y = -3.7
# 向下取整(floor)
println(floor(x)) # 3.0
println(floor(y)) # -4.0
println(floor(Int, x)) # 3(返回整数)
# 向上取整(ceil)
println(ceil(x)) # 4.0
println(ceil(y)) # -3.0
# 四舍五入(round)
println(round(x)) # 4.0
println(round(y)) # -4.0
println(round(3.5)) # 4.0
println(round(4.5)) # 4.0(银行家舍入)
# 指定小数位数
println(round(3.14159, digits=2)) # 3.14
# 向零取整(trunc)
println(trunc(x)) # 3.0
println(trunc(y)) # -3.0最大最小值
julia
# 两个数的最大最小
println(max(3, 5)) # 5
println(min(3, 5)) # 3
# 多个数
println(max(1, 5, 3, 9, 2)) # 9
println(min(1, 5, 3, 9, 2)) # 1
# 限制范围
println(clamp(5, 1, 10)) # 5
println(clamp(-5, 1, 10)) # 1
println(clamp(15, 1, 10)) # 10幂和根
julia
# 幂运算
println(2^10) # 1024
println(2.0^0.5) # 1.414...
# 平方根
println(sqrt(16)) # 4.0
println(√16) # 4.0(Unicode)
# 立方根
println(cbrt(27)) # 3.0
println(∛27) # 3.0(Unicode)
# n次方根
println(16^(1/4)) # 2.0
# 平方
println(4^2) # 16
# hypot:计算 √(x² + y²),避免溢出
println(hypot(3, 4)) # 5.0指数和对数
指数函数
julia
# e的幂
println(exp(1)) # 2.718...(e)
println(exp(2)) # 7.389...(e²)
# 2的幂
println(exp2(3)) # 8.0(2³)
# 10的幂
println(exp10(2)) # 100.0(10²)
# exp(x) - 1,对于小x更精确
println(expm1(1e-10)) # 1.0e-10(比 exp(1e-10) - 1 更精确)对数函数
julia
# 自然对数(以e为底)
println(log(ℯ)) # 1.0
println(log(10)) # 2.302...
# 以2为底
println(log2(8)) # 3.0
# 以10为底
println(log10(100)) # 2.0
# 任意底数
println(log(2, 8)) # 3.0(log₂8)
# log(1 + x),对于小x更精确
println(log1p(1e-10)) # 1.0e-10三角函数
基本三角函数
julia
# 参数为弧度
θ = π / 4 # 45度
println(sin(θ)) # 0.707...
println(cos(θ)) # 0.707...
println(tan(θ)) # 1.0
# 余切、正割、余割
println(cot(θ)) # 1.0
println(sec(θ)) # 1.414...
println(csc(θ)) # 1.414...度数版本
julia
# 以度数为参数(函数名加 d)
println(sind(45)) # 0.707...
println(cosd(45)) # 0.707...
println(tand(45)) # 1.0反三角函数
julia
# 返回弧度
println(asin(0.5)) # 0.523...(π/6)
println(acos(0.5)) # 1.047...(π/3)
println(atan(1)) # 0.785...(π/4)
# 返回度数
println(asind(0.5)) # 30.0
println(acosd(0.5)) # 60.0
println(atand(1)) # 45.0
# atan2:考虑象限的反正切
println(atan(1, 1)) # 0.785...(第一象限)
println(atan(-1, -1)) # -2.356...(第三象限)双曲函数
julia
x = 1.0
# 双曲函数
println(sinh(x)) # 1.175...
println(cosh(x)) # 1.543...
println(tanh(x)) # 0.761...
# 反双曲函数
println(asinh(1)) # 0.881...
println(acosh(2)) # 1.316...
println(atanh(0.5)) # 0.549...特殊三角函数
julia
# sincos:同时计算 sin 和 cos(更高效)
s, c = sincos(π/4)
println("sin: $s, cos: $c")
# sinpi, cospi:计算 sin(πx), cos(πx),更精确
println(sinpi(0.5)) # 1.0(sin(π/2))
println(cospi(0.5)) # 0.0(cos(π/2))
# 角度转换
println(deg2rad(180)) # 3.14159...(π)
println(rad2deg(π)) # 180.0特殊函数
阶乘和组合
julia
# 阶乘
println(factorial(5)) # 120
# 大阶乘(使用 BigInt)
println(factorial(big(50)))
# 组合数
println(binomial(5, 2)) # 10(C(5,2))
# Gamma 函数(阶乘的推广)
println(gamma(6)) # 120.0(5!)
println(gamma(0.5)) # 1.772...(√π)
# 对数 Gamma
println(lgamma(100)) # 对数阶乘,避免溢出贝塔函数
julia
# Beta 函数
println(beta(2, 3)) # 0.0833...
# 对数 Beta
println(logbeta(2, 3))误差函数
julia
# 误差函数
println(erf(1)) # 0.842...
println(erfc(1)) # 1 - erf(1)
# 反误差函数
println(erfinv(0.5)) # 0.476...贝塞尔函数
julia
using SpecialFunctions # 可能需要安装
# 第一类贝塞尔函数
# besselj(ν, x)
# 第二类贝塞尔函数
# bessely(ν, x)数值精度函数
julia
# 机器精度
println(eps()) # 约 2.22e-16
println(eps(Float32)) # Float32 的精度
# 下一个浮点数
println(nextfloat(1.0)) # 1.0000000000000002
println(prevfloat(1.0)) # 0.9999999999999999
# 浮点数位表示
println(significand(3.5)) # 尾数
println(exponent(3.5)) # 指数
# 分解为小数和整数部分
整数部分, 小数部分 = modf(3.75)常用数学常数
julia
# π (pi)
println(π) # 3.14159...
println(pi) # 同上
# 自然常数 e
println(ℯ) # 2.71828...
# 无穷大
println(Inf) # 正无穷
println(-Inf) # 负无穷
# 非数字
println(NaN) # Not a Number
# 黄金比例(需要计算)
φ = (1 + √5) / 2
println(φ) # 1.618...复数数学函数
julia
z = 3 + 4im
# 基本函数
println(abs(z)) # 5.0(模)
println(angle(z)) # 0.927...(辐角)
println(conj(z)) # 3 - 4im(共轭)
# 指数和对数
println(exp(z))
println(log(z))
# 三角函数
println(sin(z))
println(cos(z))
# 平方根
println(sqrt(-1 + 0im)) # 0.0 + 1.0im向量化数学运算
julia
x = [0, π/6, π/4, π/3, π/2]
# 使用点语法向量化
println(sin.(x))
# 使用 @. 宏
result = @. sin(x)^2 + cos(x)^2
println(result) # 全是 1.0
# map 函数
println(map(sqrt, [1, 4, 9, 16]))统计函数
julia
using Statistics
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 平均值
println(mean(data)) # 5.5
# 中位数
println(median(data)) # 5.5
# 标准差
println(std(data)) # 3.027...
# 方差
println(var(data)) # 9.166...
# 分位数
println(quantile(data, 0.25)) # 3.25
println(quantile(data, 0.75)) # 7.75线性代数函数
julia
using LinearAlgebra
A = [1 2; 3 4]
# 行列式
println(det(A)) # -2.0
# 迹(对角线元素之和)
println(tr(A)) # 5
# 逆矩阵
println(inv(A))
# 特征值
println(eigvals(A))
# 范数
println(norm([3, 4])) # 5.0
# 点积
println(dot([1, 2], [3, 4])) # 11下一步
学习完数学函数后,请继续学习: