Julia号称有着比肩C的速度,同时又像Python一样便捷的编程语言,非常适合科研狗使用。之前写了很多博客介绍Julia在数值分析中的应用,这次写一个适合初学者学习的Julia教程系列。
Julia可以在中文社区下载:下载 Julia,正常安装即可,无坑。
但比较骚的是,Julia可以用Python安装
pip install jill
jill install [VERSION] [--upstream UPSTREAM] [--confirm]
在Julia中,需要经常下载安装一些库,如果担心网速,可以换源,其方法是:新建环境变量JULIA_PKG_SERVER
,内容任选其一
如果习惯用VS Code写代码,可以配置VS Code的Julia环境:VS Code打造Julia IDE
Julia支持四则混合运算,加减乘除以及乘方分别是+, -, *, /, ^
这五个运算符。在交互运算时,会有一个自动创建的ans
变量表示运算结果,下面在命令行中做一个演示
1 + 2*3 - 4^5 # -1017
ans # 返回值为-1017
上面代码中,#
用于注释,如果是多行注释,首尾标记分别是#=
和=#
。
字符用单引号表示,字符串用双引号,多行字符串需要用三个双引号头尾括起来。
Julia和经典语言不同的是,提供了符号这种数据类型,并以:
作为变量名的第一个字符,一般用来保存变量名。这里只是简单提一嘴,以后在Julia中见到冒号开头的变量别慌就行。
在Julia中,可以非常复合直觉地创建函数,例如下面的表达式是完全合理的,而且功能也和你想的功能一模一样。
f(x) = x^2 + 1
f(5) # 返回26
如果函数内容比较复杂,则需使用function关键字,创建一个程序块,并以end作为结束符。其最后一行表达式的结果,便是函数的返回值,比如函数f
可以写为下列形式。
function f(x)
x^2 + 1
end
函数返回值也可以用return
来标识,并且return可以返回多个值
function getMinMax(x, y)
return min(x, y), max(x, y)
end
getMinMax(10, 5) # 返回值为 (5, 10)
在编程宇宙,if是通用的条件分支结构关键字,当if后面的条件为真时,即执行代码块中的内容。在Julia中,其完整格式是if...elseif...else...end
,当然elseif
和else
是可选的,下面创建一个函数来演示
function testIf(x)
if x < 60
println("不及格")
elseif x < 75
println("及格")
elseif x < 90
println("良好")
else
println("优秀")
end
end
testIf(5) # 不及格
Julia中的比较运算包括==,!=, <, <=, >, >=
,分别表示等于、不等于、小于、小于等于、大于、大于等于。这几个运算符可以独立于if语句使用,计算结果为布尔型,true表示真,false表示假。
3 < 5 # 返回true
julia还提供了C风格的三元运算符a ? x : y
,即a为真时执行x,否则执行y,有了这个,可以写一个非常简洁的递归阶乘函数
function fac(n)
n > 1 ? n*fac(n-1) : 1
end
fac(5) # 120
julia支持for循环和while循环,循环之家可以嵌套,但每层嵌套都需要有end作为结束标志。for循环示例如下
for i=1:3
println(i, "^3 = ", i^3)
end
#= 输出如下
1^3 = 1
2^3 = 8
3^3 = 27
=#
在Julia中,每一个end都会封死一层变量作用域,就像在函数中的变量无法被外部调用一样,循环亦然,比如刚刚尽管用i
循环三次并输出了计算结果,但并不能事后调用
println(i) # 报错 i not defined
为了让变量可以穿透循环,就需要用到关键字global
,表示当前使用的是一个全局变量,下面演示一下while循环
j = 0
s = 0
while j < 3
j += 1
global j2 = j^2
s += j2
end
println(s, j2)
Julia作为以科学计算为目标的语言,对向量和矩阵的计算有着非常良好的支持。通过方括号可以创建行向量、列向量以及矩阵,这些数学对象在编程语言中可以统称为数组
x = [1 2 3 4 5] # 此为行向量 1×5 Matrix{Int64}
y = [1,2,3,4,5] # 此为列向量 5-element Vector{Int64}
z = [1 2 3, 4 5 6] # 此为2行3列的矩阵 2×3 Matrix{Int64}
若想对数组进行计算,那么需要在原有的运算符前加一个点
x + 1 # 报错
x .+ 1 # 返回 2 3 4 5 6
Julia支持自动广播,即行向量和列向量相加时,会自动扩展成矩阵
> x .+ y
其返回值为
[ 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 7 8 9 10 ] \begin{bmatrix} 2&3&4&5& 6\\ 3&4&5&6& 7\\ 4&5&6&7& 8\\ 5&6&7&8& 9\\ 6&7&8&9&10\\ \end{bmatrix} 23456345674567856789678910