Julia 科学计算语言
FreeGuideOnline
最新
2026-07-13
julia>
尝试输入 `1 + 2` 并回车,确认安装成功。
### 选择代码编辑器
推荐使用 [Visual Studio Code](https://code.visualstudio.com/) 并安装 Julia 扩展,它提供语法高亮、自动补全、调试和绘图支持。你也可以使用 Pluto.jl 创建反应式笔记本(类似 Jupyter),适合教学和探索。
## Julia 基础语法速览
### 变量与基本数据类型
Julia 是动态类型语言,变量直接赋值即可:
```julia
x = 10 # 整型
y = 3.14 # 浮点型
name = "Julia" # 字符串
flag = true # 布尔型
常用数值类型包括 Int64、Float64。Julia 内置高精度计算,例如 BigInt 和 BigFloat:
big_int = BigInt(2)^100
算术运算与数学函数
与大多数语言类似:
2 + 3 * 4 # 14
2^3 # 8(幂运算)
sqrt(9) # 3.0
sin(pi/2) # 1.0
Julia 支持分数表示的有理数,使用 //:
1//2 + 1//3 # 5//6
字符串操作
用双引号包围字符串,单引号用于字符:
s = "Hello, " * "world!" # 用 * 连接字符串
s[1:5] # 切片:"Hello"
"Value is $(2+3)" # 字符串插值:Value is 5
控制流
if-elseif-else 结构:
if x > 0
println("正数")
elseif x < 0
println("负数")
else
println("零")
end
for 循环和 while 循环:
for i in 1:5
println(i)
end
n = 0
while n < 3
n += 1
println(n)
end
注意:Julia 的索引从 1 开始,而不是 0。
数组(Array)与矩阵操作
科学计算的核心是数组。Julia 的数组内置高效的多维支持,语法简洁。
创建数组
v = [1, 2, 3, 4] # 向量(一维数组)
M = [1 2; 3 4] # 矩阵(; 分隔行)
zeros(2, 3) # 2×3 零矩阵
ones(3) # 3×3 全1矩阵
rand(2, 2) # 随机矩阵(均匀分布)
randn(3, 1) # 正态分布随机数
collect(1:2:10) # 通过范围生成 [1,3,5,7,9]
访问与修改
v[1] # 第一个元素
v[2:3] # 切片 [2,3]
M[2,1] # 第二行第一列
M[1, :] # 第一整行
v[2] = 99 # 修改元素
基本运算
算术运算符自动进行逐元素运算(需加点 . 操作符用于广播):
v + v # 逐元素相加
v .* 2 # 每个元素乘2,点表示广播
M * M # 矩阵乘法
v' * v # v的转置乘v,得到内积(1×1矩阵)
线性代数
Julia 的线性代数函数丰富,内置在 LinearAlgebra 标准库中:
using LinearAlgebra
A = [1 2; 3 4]
det(A) # 行列式
inv(A) # 逆矩阵
eigen(A) # 特征值与特征向量
I = [1 0; 0 1] # 单位矩阵
A \ [5, 11] # 解线性方程组 Ax = b,结果 x ≈ [1.0, 2.0]
数组推导式(Comprehensions)
类似 Python 列表推导式,生成数组的简洁方法:
[i^2 for i in 1:5] # [1,4,9,16,25]
[(i,j) for i in 1:3, j in 1:2] # 3×2 元组矩阵
函数定义与使用
基本函数定义
function add(a, b)
return a + b
end
add(3, 5) # 8
# 简洁写法
add_short(a, b) = a + b
函数支持多返回值:
function divide(a, b)
q = a ÷ b # 整数除法
r = a % b # 余数
return q, r
end
quotient, remainder = divide(14, 4)
泛型函数与多重分派
Julia 的强大之处在于多重分派(Multiple Dispatch)。你可以为同一函数名定义多个方法,根据参数类型自动调用:
say_hello(name::String) = println("Hello, $name!")
say_hello(age::Int) = println("I am $age years old.")
say_hello("world") # "Hello, world!"
say_hello(25) # "I am 25 years old."
这种机制让代码更清晰,也是科学计算中设计抽象算法的基石。
匿名函数与高阶函数
map(x -> x^2, 1:5) # [1,4,9,16,25]
filter(x -> x > 2, 1:5) # [3,4,5]
reduce(+, 1:5) # 求和,等价于 sum(1:5)
包管理与科学计算生态
包管理器
在 REPL 中按 ] 进入包管理模式。常用命令:
] add DataFrames # 安装包
] add Plots CSV # 一次性安装多个
] update # 更新所有包
] st # 查看已安装包
] rm PackageName # 删除包
推荐科学计算包
- DataFrames:类似 pandas 的数据框操作。
- CSV:读写 CSV 文件。
- Plots:统一的绘图接口,支持多种后端。
- DifferentialEquations:求解微分方程。
- Flux / Lux:深度学习框架。
- Optim:优化算法库。
- Statistics:标准统计函数。
数据处理入门:DataFrames 与 CSV
加载数据并进行分析:
using DataFrames, CSV
# 从 CSV 文件读取(假设有 data.csv)
df = CSV.read("data.csv", DataFrame)
# 查看基本信息
first(df, 5) # 前5行
describe(df) # 描述统计
# 数据筛选与变换
filter(row -> row.age > 30, df)
select(df, :name, :age)
transform(df, :salary => ByRow(x -> x * 1.1) => :new_salary)
# 分组聚合
gdf = groupby(df, :city)
combine(gdf, :salary => mean)
若没有示例文件,可手动创建 DataFrames:
df = DataFrame(name=["Alice", "Bob", "Cathy"],
age=[25, 30, 28],
salary=[5000, 6000, 5500])
数据可视化:Plots 快速上手
安装并导入
] add Plots
using Plots
基本折线图与散点图
x = 1:10
y = x.^2 # 广播平方
plot(x, y, label="y = x^2", linewidth=2)
scatter!(x, y, label="points") # 叠加散点
xlabel!("x")
ylabel!("y")
title!("抛物线")
组合图形
p1 = plot(x, y)
p2 = histogram(randn(1000), bins=30)
plot(p1, p2, layout=(1,2))
Plots 支持多种输出格式,如 PNG、SVG,使用 savefig("plot.png") 保存。
常见科学计算示例
数值积分
使用 QuadGK 包进行一维积分:
using QuadGK
f(x) = sin(x^2)
result, error = quadgk(f, 0, π)
println("积分结果 ≈ ", result)
求解常微分方程
经典洛伦兹系统:
using DifferentialEquations
function lorenz!(du, u, p, t)
σ, ρ, β = p
du[1] = σ * (u[2] - u[1])
du[2] = u[1] * (ρ - u[3]) - u[2]
du[3] = u[1] * u[2] - β * u[3]
end
u0 = [1.0, 0.0, 0.0]
tspan = (0.0, 100.0)
p = (10.0, 28.0, 8/3)
prob = ODEProblem(lorenz!, u0, tspan, p)
sol = solve(prob)
plot(sol, vars=(1,2,3)) # 3D 轨迹图(如果后端支持)