Ode to Julia

Sangat sulit untuk menyampaikan semua antusiasme yang menyertai peluncuran program pertama dan koreksi kesalahan pertama menggunakan bahasa ini. Ini sederhana dan indah seperti Python , sedikit seperti Fortran , kerja yang nyaman dengan array dan grafik, serta kemampuan untuk melakukan optimasi dan paralelisasi yang sengit bahkan untuk boneka seperti saya teman sekelasku. Anda dapat bekerja pada level abstraksi yang berbeda: dari pemrograman level tinggi dengan pengetikan dinamis, Anda bisa turun ke assembler, yaitu, di sini Anda memiliki aksesibilitas Python dan kecepatan eksekusi Fortran counter. Saya tidak bisa menghilangkan perasaan bahwa Mathcad , Scilab dan bahkan, Tuhan memaafkan saya, C ++ mulai memudar ke dalam hati saya.
Saya belajar bahasa itu tanpa sengaja menemukan terbitan Khabrovian , dan, seperti yang seharusnya dilakukan oleh seorang siswa yang mudah terpengaruh , saya mulai mencari bimbingan, terutama dalam bahasa Rusia. Karena bahasa tersebut telah berevolusi terus-menerus selama enam tahun, sumber-sumber informasi yang sudah langka menjadi usang, dan kegembiraan mulai berkurang. Tetapi dengan dimulainya kursus laboratorium baru pada pemodelan fenomena fisik dengan pilihan bebas bahasa pemrograman, masih ada motivasi untuk memulai berkenalan dengan Julia. Selain itu, pada bulan Agustus, bahasa "tambah 1,0" .
Materi yang disajikan di bawah ini direncanakan sebagai pengantar bahasa di mana semua makalah laboratorium ditulis dan manual pelatihan dikumpulkan.
Julia adalah bahasa pemrograman mengetik dinamis tingkat tinggi, kinerja tinggi untuk perhitungan matematika. Sintaksnya mirip dengan keluarga matlab, bahasanya ditulis dalam C , C ++ dan Skema , dimungkinkan untuk memanggil perpustakaan Sysh
Instalasi
Di bawah spoilerDi situs web resmi Anda dapat menemukan berita, tutorial video, dan mengunduh distribusinya. Setelah instalasi, Anda dapat mulai bekerja, tetapi semuanya akan terjadi dalam mode juru bahasa.
Di situs https://juliacomputing.com , tersedia produk yang didasarkan pada bahasa ini:
- JuliaDB - untuk bekerja dengan analitik basis data dan analisis deret waktu berdasarkan pada ekosistem Julia yang kaya, serta dengan konkurensi dan skalabilitas bawaan.
- JuliaBOX - Luncurkan Julia tanpa menginstal dari browser Anda di laptop Jupyter. Populer di universitas dan di antara pengguna pemula. Untuk pekerjaan penuh, Anda perlu mendaftar untuk berlangganan berbayar. Dalam mode bebas, beberapa opsi akan terbatas, dan Anda harus menunggu dalam antrean untuk mengakses core pemrosesan
- JuliaRun - Jalankan aplikasi Julia di cloud publik atau pribadi. Penempatan produksi yang dapat diukur untuk analisis waktu nyata dan simulasi paralel skala besar.
- JuliaFin - Untuk pekerjaan di bidang keuangan. Ini mencakup semua alat yang diperlukan untuk backtesting dan perdagangan: Excel, Bloomberg, pemodelan kontrak dan JuliaDB.
- JuliaPro - Versi gratis untuk para ilmuwan dan peneliti data. Instal di Windows, Mac, atau Linux. Lisensi komersial yang diperluas tersedia.
Pilih opsi terakhir. Pada saat penulisan, versi 0.6.4.1 tersedia. Setelah pendaftaran, unduhan gratis akan tersedia. Pengguna Windows 7 / Windows Server 2012 juga harus menginstal:
Setelah mengunduh fixer, lebih baik memberikan batasan akses ke Internet, dan hanya memperbarui, jika tidak semua orang akan mengetahui apa salinan Windows Anda yang tidak valid. Pembaruan ini diperlukan untuk mencegah masalah dengan sistem kontrol versi git , jika tidak maka tidak akan mungkin untuk mengunduh paket tambahan, dan tanpanya tidak akan sulit.
Nah, semuanya akhirnya beres, sekarang siap untuk kita:
- JuliaPRO Command Prompt - semua keterampilan Yulina langsung dari penerjemah.
- Juno adalah IDE yang indah dengan jendela untuk grafik dan ruang kerja di mana Anda dapat melihat konten semua objek
- Jupyter - meluncurkan inti komputasi di konsol, dan Anda dapat menjalankan kode langsung di browser. (Selain Julia, Python juga ada)
Mari kita lihat apa yang dapat dilakukan kalkulator ini ... Dukungan Unicode - Anda dapat menggunakan alfabet Cyrillic, hieroglif dan memanggil pi huruf Yunani. Dan Anda tidak bisa secara eksplisit menentukan perkalian antara angka dan variabel (dalam urutan itu dan tanpa spasi):
x = 5+8 2x - 3x + 2x^2 Out: 325
Semua tanda yang diperlukan juga tersedia: + =, * =, >> =, dll. (Tanda ">>" (bit bergeser ke kanan). Tanda perbandingan:>,> =, <, <=, == ,! =. Ketidaksetaraan dapat digabungkan menjadi rantai:
y = 5 y += 2 4 <= y < 8 Out: true
Nomor kompleks tersedia:
(2-1im)*(4+3im) Out: 11 + 2im
Dan fungsi untuk bekerja dengan mereka:
- real (z) adalah bagian nyata,
- imag (z) adalah bagian imajiner,
- conj (z) adalah konjugat kompleks,
- abs (z) - modul,
- abs2 (z) adalah kuadrat dari modul,
- angle (z) adalah argumen dari bilangan kompleks.
Anda dapat menggunakan angka rasional menggunakan "//" dan fungsi yang sesuai:
- num (x) - pembilang,
- den (x) - penyebut,
- float (x) - dikonversi menjadi desimal
x = 4//6+5//7 Out: 29//21 float(x) Out: 1.380952380952381
Julia memiliki kemampuan untuk mengontrol representasi internal data:
- typeof (obj) - jenis objek
- typemax (obj) adalah jumlah maksimum dari jenis ini
- typemin (obj) - minimal
- eps () - mesin nol
- BigInt adalah keseluruhan yang besar
- BigFloat - titik apung besar
q = 3 typemax(q) Out: 9223372036854775807 typeof(q) Out: Int64 BigFloat(2.3^45/6) Out: 3.159376405019356000000000000000000000000000000000000000000000000000000000000e+15
Fungsi
Fitur Kit
- abs (x) adalah modulus angka,
- abs2 (x) adalah kuadrat dari modul,
- sqrt (x) adalah akar kuadrat,
- cbrt (x) adalah akar kubik,
- exp (x) adalah eksponen dari angka,
- log (x) adalah logaritma natural,
- log10 (x) - logaritma desimal,
- log (b, x) adalah logaritma x pada basis b.
Serta trigonometri, hiperbolik, Airy, Bessel dan banyak lainnya.
Fungsi Kustom:
function () # end
Fungsi mengembalikan hasil dari ekspresi terakhir (pengguna Mathcad cegukan).
function cube(x) x^3 end cube(4) Out: 64
Baik, atau kami tunjukkan secara eksplisit:
function myabs(x) if x>=0 return x else return -x end end myabs(-12) Out: 12
Nilai yang dikembalikan dapat dikumpulkan dalam sebuah tuple:
function cubeandsquare(x) x^3,x^2 end a,b = cubeandsquare(3) print("a = $a, b = $b") Out: a = 27, b = 9
Fungsi dapat mengambil tupel, nilai default, kata kunci. Jika tidak ada tanda kurung setelah nama fungsi, itu dianggap sebagai variabel dan dapat ditugaskan ke variabel lain atau ditransfer ke fungsi sebagai parameter. Julia juga mendukung gaya fungsional program penulisan (halo Lisp)
function mysin(t;A=1,?=1,?=0) # - A*sin(?*t + ?) end x1 = mysin(pi) # = 0 x2 = mysin(pi*0.5,A = 2) # x3 = mysin(pi*0.5,? = 0.5) # print("x1 = $x1, x2 = $x2, x3 = $x3") Out: x1 = 1.2246467991473532e-16, x2 = 2.0, x3 = 0.7071067811865475
Array
Sebagai pengguna Scilab , saya bahkan tidak melihat substitusi: Anda dapat menentukan array menggunakan fungsi:
- Array {T} (undef, dims ...) - Array tipe T dan dims dimensi
- nol (T, dims ...) - Array of zero
- yang (T, redup ...) - atau unit
Pengindeksan dimulai dengan satu , bukan $
- end
, dan semua operasi yang diperlukan untuk matriks didefinisikan (untuk melakukan, katakanlah, penambahan atau penggandaan elemen, Anda perlu meletakkan sebuah titik di depan operator).

(Sekarang jelas bagaimana cara menyisipkan gambar, tapi oke ...)
Fungsi dasar:
- det (A) - menghitung determinan
- A ' - transpos matriks
- inv (A) - invert matrix
- panjang (A) - jumlah elemen
- ndims (A) - jumlah dimensi
- size (A) - tuple dimensi
- size (A, n) - dimensi dalam arah yang diberikan
- copy (A) - buat salinan array
- linspace (mulai, akhir, langkah) atau
linspace (start: step: end) - buat array satu dimensi
A = [1 2 3; 6 5 4; 7 8 9] Out: 3?3 Array{Int64,2}: 1 2 3 6 5 4 7 8 9 A[2,1] Out: 6 A[end] Out: 9 size(A) Out: (3, 3)
Anda dapat memilih bagian-bagian array dengan menentukan rentang indeks di sepanjang dimensi dengan tanda ":".
m1 = rand(3,2) m2 = reshape(1:2:11, 3,2) Out: 3?2 Base.ReshapedArray{Int64,2,StepRange{Int64,Int64},Tuple{}}: 1 7 3 9 5 11 m3 = [m1 m2] # ( ) Out: 3?4 Array{Float64,2}: 0.325649 0.701038 1.0 7.0 0.513579 0.620215 3.0 9.0 0.815242 0.805307 5.0 11.0 m5 = [m1; m2] # ( ) Out: 6?2 Array{Float64,2}: 0.325649 0.701038 0.513579 0.620215 0.815242 0.805307 1.0 7.0 3.0 9.0 5.0 11.0 m3[:, 2:4] Out: 3?3 Array{Float64,2}: 0.701038 1.0 7.0 0.620215 3.0 9.0 0.805307 5.0 11.0
Di sini kami menggunakan rand (), yang mengembalikan array angka acak dari dimensi yang diberikan, dan membentuk kembali (), yang mengubah dimensi array ke yang ditentukan.
for a in A
atau
for i in eachindex(A) # i end
atau
for i = 1 : size(A,n) # n - (.. ) # i end
Grafik
Untuk menggunakan gambar, Anda harus mengunduh paket dari repositori untuk dipilih:
- Pkg.add ("Plots")
- Pkg.add ("PyPlot")
- Pkg.add ("Gadfly")
- Pkg.add ("Winston")
Dari jumlah tersebut, yang paling populer adalah Pythonic PyPlot . Modul terhubung menggunakan perintah, misalnya:
using PyPlot
Namun, mari kita coba Gaston menggunakan Gnuplot (ayunan terpisah).
Dimuat oleh tim Gaston.jl
Pkg.add("Gaston")
Dan langsung ke intinya:
using Gaston t = 0:0.01:1 plot(t, sin.(2?*5*t))

plot(t,sin.(2?*5*t),title="A sine wave",xlabel="Time (s)",ylabel="Amplitude",grid="on",linewidth=3,color="blue", yrange="[-1.1:1.1]",marker="ecircle",plotstyle="linespoints",linestyle="-.-")

plot!(t,cos.(2?*5*t),color="red",linewidth=2) #

x = y = -15:0.33:15 surf(x,y,(x,y)->sin.(sqrt.(x.*x+y.*y))./sqrt.(x.*x+y.*y),title="Sombrero",plotstyle="pm3d")

x = y = -15:0.33:15 surf(x,y,(x,y)->sin.(sqrt(x.*x+y.*y))./sqrt.(x.*x+y.*y), title="Edge view of a sombrero",plotstyle="pm3d",gpcom="set view 80,20")

R = [ x+y for x=0:5:120, y=0:5:120] G = [ x+y for x=0:5:120, y=120:-5:0] B = [ x+y for x=120:-5:0, y=0:5:120] Z = zeros(25,25,3) Z[:,:,1] = R Z[:,:,2] = G Z[:,:,3] = B imagesc(Z,title="RGB Image",clim=[10 200])

histogram(rand(1000),bins=15,norm=1,title="Histogram",yrange="[0:1.6]")

y = 1:40 err = Gaston.ErrorCoords(rand(40)) plot(y,err=err,title="Example of error bars",plotstyle="errorbars")

Anda dapat membuat beberapa jendela grafis (tidak berfungsi di Jupyter ) menggunakan perintah h = gambar () (cukup masukkan di antara plot). Untuk menyimpan grafik sebagai file gambar, gunakan perintah
set_filename ("name.png") # jika tidak ditentukan, akan ditampilkan
printfigure ("png") # simpan ke file, PNG, PDF, SVG, dan GIF tersedia
Informasi Paket Gaston Lainnya
Kesimpulan
Ada banyak lagi paket grafik untuk setiap selera dan mencakup hampir semua kebutuhan. Juga, paket-paket tambahan berkembang dengan kuat dan utama. Di sini Anda memiliki komputasi kuantum, dan bioinformatika, dan pembelajaran mesin, dan banyak lagi masalah mendesak seperti diffur dan turunannya .
Secara umum, Julia cantik, cerdas, dan sangat menjanjikan, dan sangat tidak diizinkan meninggalkannya tanpa perhatian.