[精讚] [會員登入]
282

[Jula] 開始.雜談.為什麼?

關於 Julia 的雜談

分享此文連結 //n.sfs.tw/15478

分享連結 [Jula] 開始.雜談.為什麼?@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2021-11-07 22:23:49 最後編修
2021-11-05 00:18:31 By 張○○
 

自動目錄

Julia 作為一個非常年輕的程式語言,至今大概3 4年而已(2018年起0.7, 1.0版釋出後,編譯器才趨於穩定)[1]

此篇是雜談,不是教學。

為什麼要去學習一個陌生的、全新的語言?

從開始學電腦程式,不知學習過多少語言,也不知放棄學習多少種語言。

隨著年紀增長,會越來越不想學習新的語言,畢竟所有語言都大同小異:

有的強調學習快、有的強調結構好、資源多、執行快或是平台擴展性,各有優缺點。

人能夠學習的範圍和時間很有限,語言只是一個工具,重點在於你要拿工具來做什麼?

所以重點千萬不要搞偏了。

回到主題,為什麼要去學習一個全新的語言,當然理由可以羅列幾十條,我覺得最要考慮的是學他能做什麼?

為什麼要學 JULIA?

關於Julia誔生的神話故事並不在我考慮的範圍,我得先看他的強項是什麼。

此文僅稍微整理一下,並把他的優缺點做個整理。

 

超強的線性代數能力

我覺得 julia很適合拿來算數學,尤其是線性代數

複數

利用 im 保留字輕鬆完成複數計算

julia> (1+3im)*(2+5im)
-13 + 11im
julia> (5-3im)^3
-10 - 198im

求項位角

利用angle並轉換成角度

julia> angle(1+2im)*180/pi
63.43494882292201

矩陣

下式等於是 [12][12]\left[ \begin{matrix} 1 \\2 \end{matrix} \right] \left[ \begin{matrix} 1 & 2 \end{matrix} \right]

julia> [1;2;]*[1 2]
2×2 Matrix{Int64}:
 1  2
 2  4

反矩陣及轉置矩陣

其中 [1 2; 3 4] 代表矩陣 [1234]\left[ \begin{matrix} 1 & 2 \\ 3 & 4 \end{matrix} \right]

julia> inv([1 2; 3 4;])
2×2 Matrix{Float64}:
 -2.0   1.0
  1.5  -0.5

 共軛轉置

julia> ([1 2; 3 4;])'
2×2 adjoint(::Matrix{Int64}) with eltype Int64:
 1  3
 2  4

轉置矩陣及求值

julia> using LinearAlgebra <== 呼叫線代library
julia> A = [
           1 3 8
           2 -5 10
           -3 1 7
        ]
3×3 Matrix{Int64}:  <== 定義結果
  1   3   8
  2  -5  10
 -3   1   7

julia> transpose(A)  <== 轉置矩陣
3×3 transpose(::Matrix{Int64}) with eltype Int64:
 1   2  -3
 3  -5   1
 8  10   7

julia> det(A) <== 行列式求值
-281.0

 

安裝套件

安裝套件可以使用 Pkg函數

julia> using Pkg
julia> Pkg.add("Plots")

利用 Pkg的函數進行套件安裝,管理上方便

 

繪圖

julia> using Plots
julia> plot(rand(100,4), layout = 4, label=["a" "b" "c" "d"],
           title=["A府" "B道" "C州" "D縣"], fontfamily="MingLiU" )

其它

分数

分数計算器

julia> 2//7+1//3
13//21

函數

julia> f(x) = 2x^3+x^2-5x-10
julia> g(x) = 2x-4
julia> h(x)= f(g(x))
julia> h(3)
0

集數合

求解集合數的和 f(x)=n=0xnn!

julia> f(x,nmax)= sum([x^n/factorial(BigInt(n)) for n=0:nmax])
julia> f(2,30)

7.389056098930650227230427182040632654314999242091465026550353896014737571231858

這是收斂函數,但其中 factorial()函數是算階乘,理論上在 20! 時就會溢位爆掉,但是透過 BigInt 還是可以算出值。

定積分

定積分有給定範圍的能夠計算,但如球體的體積分。

計算的精度就由切片的大小來決定,可以計算出定積分

 <<程式撰寫中、待完成>>

多平台支援

Linux/ Windows/ Mac 等多平台多系統支援,同時也支援 ARM, IA64等架構

結論

優點

  超強數學算力,很適合拿來做數學計算。

  眾多使用者貢獻算力及各種方便的函數。

  繪圖功能強大。

  程式自由度高,對於類別和寫法寬容。

  學習快速直覺。

缺點

  因為輸入法干擾,交談環境有時游標會不見。

  特殊符號在 linux上無法顯示。

  線上文件仍有限,程式碼錯誤及說明提示不夠完備

 

總體而言,JULIA值得學習,尤其你需要做許多的數學物理方面的計算。

 

參考資料

[1] https://en.wikipedia.org/wiki/Julia_(programming_language)

[2] https://runebook.dev/ja/docs/julia/stdlib/linearalgebra/index#LinearAlgebra.det

[3] 小抄紙 https://juliadocs.github.io/Julia-Cheat-Sheet/

[4] https://docs.juliaplots.org/latest/generated/pyplot/

[5] http://park.itc.u-tokyo.ac.jp/kato-yusuke-lab/nagai/julianote.pdf

END

你可能感興趣的文章

[Google] 使用Google的站內搜尋(Site Search) 使用google的站內搜尋功能,讓google能搜尋我的站的資料

[GITLAB] 讓git可以用ssh push,解決 Permission denied (publickey).的問題 在使用git push資料的時候發生 Permission denied (publickey).的問題,有沒有解法?

使用大頭貼網站 Gravatar 使用全球公開的大頭貼網站,帶來更多的方便

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

檢測頁面載入速度 利用google提供的檢測工具來測試網頁的載入速度

使用Google尋找你的手機 這近發現google竟然可以用來找android的手機,而且不需要經過什麼設定或安裝軟體。

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[札記] 2016.7~12月札記 札記,只是札記

為什麼要重造輪子? 什麼輪子?造什麼輪子?我為什麼要重造輪子?

[PHP] 檢查檔案是否是圖檔 使用getimagesize函數檢查檔案是否是圖檔

[AS3] 物件加上超連結的方法 物件加上超連結,可讓使用者點擊的方法

[MAC] 好用的傳檔程式Commander One(可用FTP、SFTP等協定) MAC上好用的傳檔程式,免費而且支援FTP、SFTP、Dropbox、Onedrive、GoogleDrive、WebDAV等協定