5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JuliaとScilabの違い

Last updated at Posted at 2016-04-21

しばらくScilabユーザーだったが, 最近Juliaに乗り換えた.
結構似ている部分が多いけど, 簿妙に違う部分もあるので, そのメモ.

配列

配列の型

Scilabでは, 配列の型は1つしかない.
Juliaでは, 縦ベクトルに対応する配列だけ, 他の配列と区別される (行列の掛け算などの挙動は同じ).

Scilab
-->x=[1,2,3,4,5]
 x  =
 
    1.    2.    3.    4.    5.  
 
-->y=[1;2;3;4;5]
 y  =
 
    1.  
    2.  
    3.  
    4.  
    5.  
Julia
julia> x=[1,2,3,4,5]      
5-element Array{Int64,1}: 
 1
 2
 3
 4
 5
                          
julia> y=[1;2;3;4;5]      
5-element Array{Int64,1}: 
 1
 2
 3
 4
 5

Juliaの場合はカンマを使っても縦ベクトルになるという点に注意.

なお, 次に注意.

Julia
julia> z1=[1,2,3]
3-element Array{Int64,1}:
 1
 2
 3

julia> z2=z1'
1x3 Array{Int64,2}:
 1  2  3

julia> z3=z2'
3x1 Array{Int64,2}:
 1
 2
 3

julia> size(z1)
(3,)

julia> size(z2)
(1,3)

julia> size(z3)
(3,1)

行列の生成

要素を横に並べるときの区切りは, Scilabではカンマ, Juliaではスペース.
縦に並べるときはどちらもセミコロン.

Scilab
-->A=[1,2,3;4,5,6]
 A  =
 
    1.    2.    3.  
    4.    5.    6. 
Julia
julia> A=[1 2 3;4 5 6]
2x3 Array{Int64,2}:
 1  2  3
 4  5  6

要素の参照

配列の要素を参照するときは, Scilabでは(), Juliaでは[].

Scilab
-->A(1,2)
 ans  =
 
    2.
Julia
julia> A[1,2]
2

配列の末尾

配列の末尾の参照するときに用いる記号は, Scilabでは$, Juliaではend.

Scilab
-->x=1:5
 x  =
 
    1.    2.    3.    4.    5.  
 
-->x($)
 ans  =
 
    5. 
Julia
julia> x=1:5 
1:5          
             
julia> x[end]
5            

linspace関数

linspace関数の返り値は, Scilabでは横ベクトル, Juliaでは縦ベクトル.

Scilab
-->x=linspace(0,1,5)
 x  =
 
    0.    0.25    0.5    0.75    1.  
 
-->size(x)
 ans  =
 
    1.    5.  
Julia
julia> x=linspace(0,1,5)
linspace(0.0,1.0,5)

julia> size(x)
(5,)

Juliaにはlinspace型というのがある?

rand, ones, zeros関数

引数を1つだけ入れた時の挙動が異なる.

Scilab
-->ones(3)
 ans  =
 
    1.
Julia
julia> ones(3)
3-element Array{Float64,1}:
 1.0
 1.0
 1.0

Scilabでは引数3は配列[3]だとみなされる.
一方, Juliaでは引数3は「長さ3のベクトル」という意味になる.

文字列

文字列の結合

結合に使う演算子は, Scilabでは+, Juliaでは*.

Scilab
-->s="pine"
 s  =
 
 pine   
 
-->t="apple"
 t  =
 
 apple   
 
-->s+t
 ans  =
 
 pineapple   
Julia
julia> s="pine"
"pine"

julia> t="apple"
"apple"

julia> s*t
"pineapple"

関数

複数の返り値がある関数

複数の返り値に名前をつけるとき, Scilabでは[], Juliaでは()を用いる.

Scilab
-->A=[1,2,3;4,5,6]
 A  =
 
    1.    2.    3.  
    4.    5.    6.  
 
-->[m,n]=size(A)
 n  =
 
    3.  
 m  =
 
    2. 
Julia
julia> A=[1 2 3;4 5 6]
2x3 Array{Int64,2}:   
 1  2  3              
 4  5  6              
                      
julia> (m,n)=size(A)  
(2,3)                 

なお, Juliaにおいて, ()で囲まれた組をタプル型と呼ぶ.

ユーザー定義関数

返り値については,

  • Scilabでは関数定義の最初に返り値を宣言する.
  • Juliaでは最後にreturnを用いて返り値を宣言する.

functionを閉じるときは, Scilabではendfunction, Juliaではendを用いる.

Scilab
function [v,M]=test(N)
    v=1:N
    M=ones(N,N)
endfunction
Julia
function test(N)
    v=1:N
    M=ones(N,N)
    return (v,M)
end

なお, Scilabにもreturnという関数 (および等価なresume関数) があるが, 非推奨とされている.

その他

円周率など

Scilabでは%をつけて%piなどとするが, Juliaではそのままpiとする.

Scilab
-->[%pi,%e,%i]
 ans  =
 
    3.1415927    2.7182818    i    
 
-->[%T,%F]
 ans  =
 
  T F  
 
-->[%inf,%nan]
 ans  =
 
    Inf    Nan
Julia
julia> [pi,e]              
2-element Array{Float64,1}:
 3.14159                   
 2.71828                   
                           
julia> im                  
im                         
                           
julia> [true,false]        
2-element Array{Bool,1}:   
  true                     
 false                     
                           
julia> [Inf,NaN]           
2-element Array{Float64,1}:
 Inf                       
 NaN                       

複素数の取り扱い

$\sqrt{-1}$ や $\arcsin(2)$ などを計算するとき, Scilabでは勝手に複素数型に拡張されるが, Juliaではsqrt(complex(-1))などと明記しないといけない.

Scilab
-->sqrt(-1)
 ans  =
 
    i    
 
-->asin(2)
 ans  =
 
    1.5707963 - 1.3169579i
Julia
julia> sqrt(-1)
ERROR: DomainError:
sqrt will only return a complex result if called with a complex argument. Try sqrt(complex(x)).
 in sqrt at math.jl:146

julia> asin(2)
ERROR: DomainError:
 in asin at math.jl:139

julia> sqrt(complex(-1))
0.0 + 1.0im

julia> asin(complex(2))
1.5707963267948966 + 1.3169578969248166im

対角行列の生成

Scilabではdiag, Juliaではdiagm.

Scilab
-->v=1:4
 v  =
 
    1.    2.    3.    4.  
 
-->M=diag(v)
 M  =
 
    1.    0.    0.    0.  
    0.    2.    0.    0.  
    0.    0.    3.    0.  
    0.    0.    0.    4.  
Julia
julia> v=1:4       
1:4                
                   
julia> M=diagm(v)  
4x4 Array{Int64,2}:
 1  0  0  0        
 0  2  0  0        
 0  0  3  0        
 0  0  0  4        

変数の表示

Scilabではdisp, Juliaではprintln.

Scilab
-->x=1
 x  =
 
    1.  
 
-->disp(x)
 
    1.
Julia
julia> x=1       
1                
                 
julia> println(x)
1                

ファイルの読み込み

プログラムを書いたファイルを読み込むときは, Scilabではexec, Juliaではinclude.

Scilab
-->exec("test.sce");
Julia
julia> include("test.jl")

小数の指数表示

$1.0 \cdot 10^{-5}$ のような表示をするとき, ScilabではDを, Juliaではeを使う.

Scilab
-->1.0D-5
 ans  =
 
    0.00001
Julia
julia> 1.0e-5
1.0e-5

今後も気づいたら追記予定.

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?