介绍
本来打算用Matlab来写MATH 575A和MATH 575B的笔记的,但最近关于Matlab的新闻让我觉得可能还是用免费开源又强大的Julia比较好。这个系列的博文介绍Julia程序设计和数值计算,我也是从Matlab转战Julia的,就边学边写吧。
Julia下载安装比较简单,在https://julialang.org/downloads/就可以下载
我选的是JuliaPro 1.4.2-1 Windows版本的,安装过程就选了一下路径。安装好后打开JuliaPro 1.4.2-1界面长这样(三个框框是我加的。。。)
这个界面我觉得还是比较友好的,第一栏是菜单栏,左边竖着的是工具栏,整个界面分为三个区域:Atom、REPL和Workplace。蓝框框是编辑器Atom,绿框框是Workplace,黄框框里面的是REPL(Read-Eval-Print-Loop),官方的解释是
• it reads what a user types,
• the compiler evaluates what it reads,
• it prints out the return value after evaluation, and
• it loops back and does it all over again.
其实就是命令行窗口。在REPL中输入命令可以按tab键自动补全,输入?加函数或命令可以搜索帮助文档,输入?后REPL会从Julia mode变成help mode,比如? println:
help?> println
search: println printstyled print sprint isprint
println([io::IO], xs...)
Print (using print) xs followed by a newline. If io is not supplied, prints to stdout.
Examples
≡≡≡≡≡≡≡≡≡≡
julia> println("Hello, world")
Hello, world
julia> io = IOBuffer();
julia> println(io, "Hello, world")
julia> String(take!(io))
"Hello, world\n"
简单数学运算
更具体的可以参考Julia中文文档https://juliacn.readthedocs.io/en/latest/manual/mathematical-operations.html
1)复数表示: A+Bim
julia> 1+1im
1 + 1im
julia> 2+(1+1im)
3 + 1im
julia> 2.0+(1+1im)
3.0 + 1.0im
julia> (2.0+2.0im)+(1.0+1.0im)
3.0 + 3.0im
注意im和虚部B之间不能有空格,不然会报错
julia> 1 + 1 im
ERROR: syntax: extra token "im" after end of expression
2)有理数表示:Rational(A,B)
julia> Rational(2,3)
2//3
julia> Rational(2,3)+2
8//3
julia> Rational(2,3)+2.0
2.6666666666666665
注意第一个R是要大写的,不然会报错
julia> rational(2,3)
ERROR: UndefVarError: rational not defined
Stacktrace:
[1] top-level scope at none:0
3)常用的常数
和
是非常常用的两个常数,在Julia中这两个常数被预定义为pi和ℯ
julia> pi
π = 3.1415926535897...
julia> ℯ
ℯ = 2.7182818284590...
注意这里的 ℯ 不是英语字母e!在Julia中的输入方法是先输入\euler再按tab就会转换成ℯ,因为Julia是支持Unicode字符输入的,通用方法是输入符号的Unicode,按tab即可,根据这个方法可以定义希腊字母变量
julia> α,β=0,1;
julia> α,β
(0, 1)
4)真值:true,false
做数值计算时true被当成1,false被当成0
julia> true
true
julia> false
false
julia> true+1
2
julia> true+0.1
1.1
julia> true+3//5
8//5
赋值的时候要注意不能直接=true,要用=Bool(true),并且首字母要大写,不然会报错
julia> a = Bool(true)
true
julia> a = bool(true)
ERROR: UndefVarError: bool not defined
Stacktrace:
[1] top-level scope at none:0
5)算数运算
再补充一个整除÷
6)比较运算
有几个比较特殊的值:
• Positive zero is equal but not greater than negative zero.
• Inf is equal to itself and greater than everything else except NaN.
• -Inf is equal to itself and less then everything else except NaN.
• NaN is not equal to, not less than, and not greater than anything,
including itself.
以及相应的用来判断的函数:
7)逻辑运算
第一个a改成!a,异或运算符号是⊻,上表给的符号已经没有再使用了,或者用函数xor(a,b)
julia> a = Bool(true)
true
julia> b = Bool(false)
false
julia> !a
false
julia> a&b
false
julia> a|b
true
julia> a$b
ERROR: UndefVarError: $ not defined
Stacktrace:
[1] top-level scope at none:0
julia> a⊻b
true
julia> xor(a,b)
true
julia> a>>>b
1
julia> a>>b
1
8)复合赋值运算
这个和C语言的很像,没什么特别的。
9)运算优先级
优先级从上到下递减: