Julia常用函数
数组操作
push!
-
直接在数组后面添加一个元素
push!(pts,xk)#pts是数组,xk是要添加的元素
reduce
-
对数组进行批处理
reduce(+,[2,3,4]) ## 结果是9
-
可以用来做判断的时候能用
if reduce(&,[条件1,条件2,条件3])
map
-
可以用来将函数的结果组合成一个数组
map(x -> x^2,[3,4,5]) ## 结果:[9,16,25]
-
可以用来组合多个函数的结果
map(x -> map(y -> x+y,[2,3]),[3,5]) ##结果:[5,6][7,8]
similar
similar(array, [element_type=eltype(array)], [dims=size(array)])
根据给定的array创建一个相似的未初始化数组,第二个参数和第三个参数是可选的,默认是给定的数组的类型和大小。
例如:
a= [1 2;3 4]
b = similar(a)
b = similar(a,Float64)
第一次的结果:
2×2 Array{Int64,2}:
281479271677952 0
0 0第二次的结果
2×2 Array{Float64,2}:
4.94066e-324 3.45846e-323
4.94066e-324 1.97626e-323
转化数据类型
-
T(a)或者convert(T,a):可以将a转化成T类型
x = convert(Float64,15) x = convert(Vector{Float64},[2 3;4 5]) Int8(3.14)
Vector{Float64}是生成一个Array{Float64,1}
绘图
Gadfly
说实话我不是很喜欢这个包,但是我对Julia不太熟悉,目前只接触了这个绘图包
- 画函数
using Gadfly
plot((x,y) -> 3*x +2*y,-1,1-1,1)
plot([sin,cos],-1,1)
-
画箭头
这里有一个非常坑的地方,那就是一旦plot()函数的参数中出现过小数,那么就必须全部参数都是小数,否则会报错。为了方便起见,建议plot的所有参数全部使用浮点型
plot(x=[1,2], y=[3,4], xend=[2,1], yend=[4,2], Geom.point,Geom.vector(filled = true), Scale.x_continuous(minvalue =0 ,maxvalue = 5), Scale.y_continuous(maxvalue=5,minvalue=0))
这里面x参数指的是起点的x坐标,数组里面第一个数是第一个点的x坐标,第二个数是第二个点的横坐标,y同理。
xend是终点的x坐标,yend同理
Scale.x_continuous和Scale.y_continuous分别表示x轴的范围和y轴的范围
所以上面画出来是如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VIRX5O0S-1612010765031)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200403222008863.png)]
- 将多个图组合在一起
当我们需要将多个图组合在一起的时候,例如将目标函数的等高图和最优化的迭代步图组合在一起,这个时候我们就需要用到layer函数。
layer函数和plot函数的语法一致,只不过是layer会将绘图的数据先保存下来,等到要合并的时候,在通过plot函数一同画出来
rosen = layer((x,y) -> 3*x +2*y,-1,2-1,2)
steps = layer(x=[1,2],
y=[3,4],
xend=[2,1],
yend=[4,2],
Geom.point,Geom.vector(filled = true))
plot(rosen,steps,
Scale.x_continuous(minvalue = -1,maxvalue = 2),
Scale.y_continuous(maxvalue=-1,minvalue=2))
注释
TODO
# TODO 这里要写一个搜索步长的函数
....
这个注释有特殊的颜色提醒,可以在需要日后完成某样工作的地方写上这个备注,这个也是一个编程技巧。