Julia 笔记

                     

贡献者: addis

   Julia 从 Matlab 和 C/C++ 借鉴了不少语法,如果你两种语言都已经会了,那么 Julia 是十分简单的。本章的目的就是为已经学习过类似语言的读者提供一个 Julia 语言的快速入门笔记。

   Ubuntu/Debian 安装方法。

sudo apt install julia
# 或者
sudo snap install Julia --classic
如果版本较老,最好还是从官网下载安装包,直接解压即可使用 bin/julia 执行文件。也可以创建软链 sudo ln -s /home/用户名/julia-xxx/bin/julia /usr/bin/julia

   Windows 默认安装目录:C:\Users\<Username>\AppData\Local\Programs\Julia-<version>

   要检查该路径,可以用 print(Sys.which("julia")) 或者 print(Sys.BINDIR)(如果不用 print,Windows \ 会打印为 \\)。

   另外本地的 Jupyter Notebook 也支持 Julia。在 julia 命令行里面运行 import PkgPkg.add("IJulia")。现在打开 Jupyter notebook 就可以新建 julia 文档了。

   至于 IDE,Juno 和 JuliaPro 都已经停止更新,当前(2023-3)最热门的 IDE 环境是 Julia 的 VScode 拓展,支持逐行调试。

1. VS Code 逐行调试

2. 命令行

3. 计算器

4. 变量基础

全局变量

x = 100
function qux()
    global x  # 需要修改 x(只读无需声明)
    x = 200
end

5. 变量和数据结构

6. 脚本

7. 线性代数

特殊矩阵类

BLAS 和 Lapack

8. 控制流

b = 3;
# 循环内的 `a` 的值不影响循环外的 `a` 的值
# 循环内初次定义的其他变量在循环外也无定义
for a = 1:5 # 也可以用 `in` 代替 `=`
    if a < b
        println(a, " < ", b)
    elseif a > b
        println(a, " > ", b)
    else
        println(a, " = ", b)
    end
end
其中 1:5 的类型是 UnitRange{Int64}。若令 a = 1:5,可以使用 a[i] 获取 “元素”。类似地,1:2:5 的类型是 StepRange{Int64, Int64}

map 控制流

   首先介绍 map() 函数

map(sin, [1,2,3]) # Returns [sin(1), sin(2), sin(3)]
map(+, [1, 2, 3], [10, 20, 30]) # Returns [11, 22, 33]

   map(容器) do 元素: ... return 值; end 可以对每个元素做某种处理,并把结果生成 Vector

result = map(1:4) do n
    product = 1
    for i in 1:n
        product += i
    end
    return product # 该 return 和函数中的一样可以省略
end

# 运行结果
# 4-element Vector{Int64}:
#   2
#   4
#   7
#  11

do 语句

f(x) do a, b
    body
end
# 相当于:
f(x, (a, b) -> begin
    body
end)
# 即定义一个 lambda 函数并传入 f() 的最后一个参数

异常处理

try 
    一些命令
catch y
    if isa(y, 错误类型1)
        一些命令
    elseif isa(y, 错误类型2)
        一些命令
    end
end

9. 函数

   另见Julia 的函数(笔记)

   函数定义

function sphere_vol(r)
    return 4/3*pi*r^3
end

   定义含名参数如

function greet(name; greeting="Hello")
    println("greeting, $(name)!")
end

函数嵌套

function outer()
    z = 15  # z is local to outer()
    function inner()
        println(z)  # inner() 可以访问 outer() 的变量
    end
    inner()  # Output: 15
end

函数定义简写

add(a, b) = a + b
等效于
function add(a, b)
    return a + b
end

关键字变量

   和 Python 类似

function code_lowered(x:Float64, y::String;
    kw1::Bool=true, kw2::Symbol=:default)
    # ...
end

常用函数

10. 画图

   第三方画图包 Plots,无需安装

using Plots
x = 1:10; y = rand(10); # These are the plotting data
plot(x,y)

11. 储存变量

   要把任意变量存到文件,用 using Serialization,除此之外常用的还有 using JLD2

using Serialization
a = randn(100,100)
f = serialize("file1.dat", a)
a1 = deserialize("file1.dat")
println(a == a1)

12. 文件读写

13. 模块

14. 调用 C/C++/Fortran 函数

15. 并行计算

16. 宏

17. Julia 协程

                     

© 保留一切权利