Julia学习笔记
简介
Julia是个灵活的动态语言,适合科学和数值计算。总的来说其优势在于:
- 免费开源(MIT 协议 )
- 自定义类型与内置类型同样高效、紧凑
- 不需要把代码向量化;非向量化的代码跑得也很快
- 为并行和分布式计算而设计
- 轻量级“绿色”线程(协程 )
- 低调又牛逼的类型系统
- 优雅、可扩展的类型转换
- 高效支持 Unicode, 包括且不只 UTF-8
- 直接调用 C 函数(不需封装或 API)
- 像 Shell 一样强大的管理其他进程的能力
- 像 Lisp 一样的宏和其他元编程工具
代码运行
- 交互式情况下: 输入julia进入交互式界面,然后就可以进行交互式回话,退出方式:ctrl+d或者quit(),如果想要运行源文件file.jl中的代码,请输入include(“file.jl”)
- 非交互式情况:
直接这样运行:
julia script.jl arg1 arg2 ...
其他可选项 ``` julia [options] [program] [args…] -v, –version Display version information -h, –help Print this message -q, –quiet Quiet startup without banner -H, –home
Set location of julia executable
-e, –eval
-p
-i Force isinteractive() to be true –no-history-file Don’t load or save history -f, –no-startup Don’t load ~/.juliarc.jl -F Load ~/.juliarc.jl, then handle remaining inputs –color={yes|no} Enable or disable color text
–code-coverage Count executions of source lines –check-bounds={yes|no} Emit bounds checks always or never (ignoring declarations) –int-literals={32|64} Select integer literal size independent of platform
## 变量
+ 变量名必须以字母(a-z 或 A-Z),下划线,或一个 Unicode 编码指针中指向比 00A0 更大的指针子集开始;特别是 Unicode 字符 Lu/Ll/Lt/Lm/Lo/Nl(字母),Sc/So (货币和其他符号),和其他一些可以看做字符的一些输入(例如 Sm 数学符号的子集)是允许的。首位之后的字符也包括 !和数字(0-9 和其他字符 Nd/No ),以及其他 Unicode 编码指针:变音符号和其他修改标记(字母 Mn/Mc/Me/Sk),一些标点连接器(字母 PC),素数,和其他的一些字符,内置的关键字不能当变量名。
+ 建议的命名规范:
+ 变量名使用小写字母
+ 单词间使用下划线 ('_') 分隔,但不鼓励
+ 类型名首字母大写, 单词间使用驼峰式分隔.
+ 函数名和宏名使用小写字母, 不使用下划线分隔单词.
+ 修改参数的函数结尾使用 ! . 这样的函数被称为 mutating functions 或 in-place functions
## 变量类型
+ 整数: 整数类型的默认类型取决于目标系统是32位还是64位。Julia定义了 Int 和 Uint 类型,它们分别是系统原生的有符号和无符号。对于不能用 32 位而只能用 64 位来表示的大整数文本,不管系统类型是什么,始终被认为是 64 位整数。基础数值类型的最小值和最大值,可由 typemin 和 typemax 函数查询:
Int8: [-128,127] Int16: [-32768,32767] Int32: [-2147483648,2147483647] Int64: [-9223372036854775808,9223372036854775807] Int128: [-170141183460469231731687303715884105728,170141183460469231731687303715884105727] Uint8: [0,255] Uint16: [0,65535] Uint32: [0,4294967295] Uint64: [0,18446744073709551615] Uint128: [0,340282366920938463463374607431768211455]
+ 16进制:0x开头
+ 8进制:0o开头
+ 2进制: 0b开头
+ Char:支持Unicode字符
+ 浮点类型:
+ Float16 半精度 16
+ Float32 单精度 32
+ Float64 双精度 64
半精度浮点数(Float16) ,但只用来存储。计算时,它们被转换为 Float32
+ 溢出:为了减小溢出所带来的影响,整数加减法、乘法、指数运算都会把原先范围较小的整数类型提升到 Int 或 Uint 类型。(除法、求余、位运算则不提升类型)。
+ 特殊值
+ Inf16 Inf32 Inf 正无穷 比所有的有限的浮点数都大
+ -Inf16 -Inf32 -Inf 负无穷 比所有的有限的浮点数都小
+ NaN16 NaN32 NaN 不存在 不能和任意浮点数比较大小(包括它自己)
+ 精度
大多数的实数并不能用浮点数精确表示,因此有必要知道两个相邻浮点数间的间距,Julia 提供了 eps 函数,可以用来检查 1.0 和下一个可表示的浮点数之间的间距:
julia> eps(Float32) 1.1920929f-7
julia> eps(Float64) 2.220446049250313e-16
julia> eps() # same as eps(Float64) 2.220446049250313e-16 ``` eps 函数也可以取浮点数作为参数,给出这个值和下一个可表示的浮点数的绝对差,即, eps(x) 的结果与 x 同类型,且满足 x + eps(x) 是下一个比 x 稍大的、可表示的浮点数.相邻的两个浮点数之间的距离并不是固定的,数值越小,间距越小;数值越大, 间距越大。换句话说,浮点数在 0 附近最稠密,随着数值越来越大,数值越来越稀疏,数值间的距离呈指数增长。根据定义, eps(1.0) 与 eps(Float64) 相同,因为 1.0 是 64 位浮点数。函数 nextfloat 和 prevfloat 可以用来获取下一个或上一个浮点数。