1. Bắt đầu với Julia
Với giả định mình đã quen thuộc với các concepts của một ngôn ngữ lập trình như: Biến (Variables), Các kiểu dữ liệu (như Arrays và Vectors), Vòng lặp (Loops), Điều hướng (Conditionals - if/else), mình sẽ thử thực hành một vài ví dụ nhỏ với Julia với mục đích tìm hiểu các cú pháp và cấu trúc dữ liệu cơ bản.
Code không hẳn đã được tối ưu, nhưng sẽ dần được tối ưu theo các ví dụ về sau!
1.1. Các ví dụ mở đầu
1.1.1. Vẽ một quá trình sinh nhiễu trắng (White Noise Process)
Quản lý Packages: Có hai cách để quản lý Packages và Versions (Phương pháp thứ 2 được recommend khi Julia cung cấp sẵn một phương pháp SOTA cho quản lý môi trường có khả năng tái tạo lại cao):
add
pakages một cách trực tiếp (ví dụPkg.add("MyPackage")
hoặc] add MyPackage
):
Phải cài đặt
IJulia
trên toàn cục để sử dụng trong mọi dự án;]
là phím tắt để truy cập vào quản lý pakages.
- Dùng các file
Project.toml
vàManifest.toml
:
Nếu dùng notebook, các file này sẽ được tự đông xác định, nhưng cài đặt sẽ không tự động, cần
] instantiate
;Tệp Project có thể nằm ở folder mẹ của Notebook và Sourcecode.
Sử dụng các hàm: Có những function có sẵn trong Julia base, như randn()
Một số hàm cần gọi các thư viện ngoài Base, ví dụ plot()
của thư viện Plots
:
Note: thay vì ep
chúng ta có thể dùng các ký tự khoa học như epsilon bằng cách \epsilon<TAB>
.
Mảng: ep
trong ví dụ trên chính là một mảng (array).
Trích xuất 5 thành tố đầu tiên của mảng
Show the code
5-element Vector{Float64}:
0.8575040389658757
0.005335428164054084
0.8330974941796573
0.673270529185323
0.7352249380457324
Để tìm kiếm trợ giúp và ví dụ cho một hàm, dùng ?
:
Show the code
Vòng lặp: hãy thử viết lại quy trình tạo random trên bằng for loops
.
The word in
from the for
loop can be replaced by either ∈
or =
.
Code trên thành công tạo ra các giá trị cho mảng ep
, tuy nhiên mối quan hệ giữa i
và ep
được thể hiện không tường minh. Để cải thiện, hãy dùng eachindex
:
Vòng lặp rất có hiệu quả về mặt bộ nhớ tuy nhiên lợi ích chính của nó là (1) thể hiện mã một cách rõ ràng hơn, ít mắc lỗi chính tả hơn, và (2) cho phép trình biên dịch linh hoạt tạo mã nhanh một cách sáng tạo.
Trong Julia, chúng ta cũng có thể loop một array trực tiệp, như ví dụ dưới đây:
Show the code
-0.06355262620335231
với ep[1:m]
trả về các giá trị của vector 1
đến m
.
Julia cũng có các operator/function có sẵn để kiểm tra các kết quả này.
Show the code
true
Gõ \approx<TAB>
.
≈
và isapprox
dùng để kiểm tra đẳng thức (equality), khác với giá trị (==
), sử dụng cho số và các loại khác.
Định nghĩa hàm: để thực hành, tiếp tục sử dụng for
để viết một hàm biểu diễn lại quá trình trên, nhưng thú vị hơn thì thử bình phương thay vì các trị số random đơn thuần xem sao.
Show the code
Hãy nhớ rằng randn()
có thể trả về một vector, thử cải thiện xem.
Show the code
5-element Vector{Float64}:
0.4020013293531669
3.2976715282134874
0.2429343751757354
0.5387018498871103
1.2211267571308764