ari23の研究ノート

メーカ勤務エンジニアの技術ブログです

Julia超入門|関数

今回はJuliaの関数を扱います🐜

開発環境

開発環境は以下の通りです。

項目 内容
OS Windows 10 Home 64bit
Julia 1.6.3
Cmder 1.3.14

※Cmderは必須ではありません

解説

ここでは、関数の書き方についてスクリプトを見ながら解説します。 以下をコピペしてcos.jlとし、動かしながら確認してください。

<スクリプト例>

function calccos1(a, b, c)
    numerator = a^2 + b^2 - c^2  # 分子
    denominator = 2 * a * b  # 分母
    ret = numerator / denominator
    return ret
end

function calccos2(a, b, c)
    numerator = a^2 + b^2 - c^2
    denominator = 2 * a * b
    numerator / denominator
end

calccos3(a, b, c) = (a^2 + b^2 - c^2) / (2 * a * b)

function main()
    # 3辺の長さ
    a, b, c = 5, 3, 4

    # cosを計算
    cosC = calccos1(a, b, c)
    println(cosC)

    cosC = calccos2(a, b, c)
    println(cosC)

    cosC = calccos3(a, b, c)
    println(cosC)
end

if abspath(PROGRAM_FILE) == @__FILE__
    main()
end


<出力結果>

C:\ari23\dev\julia
λ julia cos.jl
0.6
0.6
0.6

余弦定理

Juliaは数値計算でよく用いられるプログラミング言語なので、題材として余弦定理を扱います。1

余弦定理の詳細はこちらに譲って、ここでは公式の確認です。

三角形
三角形

上記の三角形において、 \cos\angle\rm{C} は次式で求めることができます。

 \displaystyle
\cos\angle\rm{C} = \frac{a^2 + b^2 - c^2}{2ab}

これをJuliaで求めてみましょう。

関数

Juliaでの関数の書き方は、基本的に他のプログラミング言語と同じような形です。

function 関数名(引数)
        ~計算~
        return 戻り値
end

functionのあとに関数名を書いて、()内に引数が続きます。そして、関数内での計算を書いたら、値をreturnで戻します。最後に、endで囲ってあげればOKです。 前述のスクリプト例のcalccos1()はこの形式で書いたものです。計算結果も正しいですね。

しかし、Julia言語では一般的な言語と異なる点が2つあります。

まず、Julia言語ではreturn文を使わなくても、「最後に計算された結果が戻り値として戻される」という仕様があります。前述のcalccos2()は、calccos1()returnだけを除いた関数ですが、同じ計算結果を出力しています。

また、Julia言語ではいわゆる数式のように、 f(x)=ax+b という形式で関数を書くことができます。それが前述のcalccos3()です。

どちらも簡単な計算式であれば重宝しそうですね。2

詳細は公式ドキュメントを参照してください。

問題|sin∠C

今度は \sin \angle \rm{C} を求めてみましょう。条件は上記と同じです。念のため、ヒントを載せておきますね。

 \displaystyle
{\sin^2}\theta + {\cos^2}\theta = 1

回答はこちら

おわりに

Juliaの関数を簡単にまとめました。

上記以外にもご紹介したい仕様はありますが、それはまた別の機会に解説します。

以上、参考になれば幸いです(^^)

次はこちら

参考文献

参考文献は以下の通りです。

  • Julia Documentation
    Julia公式のドキュメントです。英語ですが、とても丁寧に書かれていて、疑問はだいたい解消されるのではと思います。読み応えも十分。

  • 1から始めるJuliaプログラミング
    公式ドキュメントの分量があまりに多くて、もう少しまとまったものが欲しいと思って購入しました。基本から応用まで幅広くカバーされつつ、量も丁度良いです。


  1. 難しくなってしまっていないか、実は不安。

  2. デバッグを考えると使いにくいかもしれない。