ari23の研究ノート

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

Julia超入門|複合体

今回はJulia言語の複合体を扱います🐜

開発環境

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

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

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

解説

複合体の書き方について、スクリプトを見ながら簡単に解説します。 以下をpointppolar.jlファイルとしてコピペして、動かしながら確認してください。

<スクリプト例>

struct Point
    x::Float64
    y::Float64
end

function radial(p::Point)
    r = sqrt(p.x^2 + p.y^2)
end

function angle(p::Point)
    r = atan(p.y / p.x)
    #r = atan(p.y, p.x)  # こちらでもよい
end

function main()
    # xy座標点P
    p = Point(1.0, 1.0)

    # 各フィールドを表示
    println(p.x)
    println(p.y)

    # 原点からの距離を計算
    r = radial(p)
    θ = angle(p)

    # 計算結果を出力
    println(r)
    println(θ)
    println(θ/pi*180)
end

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


<出力結果>

C:\ari23\dev\julia
λ julia pointppolar.jl
1.0
1.0
1.4142135623730951
0.7853981633974483
45.0

極座標系

例として直交座標系から極座標系への変換を扱います。まず直交座標系とは、平面上に直交した2本の直線x軸とy軸において、交点または原点からの距離で位置を表現します((x, y)など)。

一方極座標系とは、始線(x軸)上にある極(原点)からの距離と偏角で位置を表現します((r, θ)など)。1

図で表すと以下の通りです。こちらの方がわかりやすいですね。

直交座標系と極座標系
直交座標系と極座標系

この直交座標系から極座標系へ変換する式を以下に示します。上の図と見比べながら、式を確認してください。

 \displaystyle
\begin{align}
  \left\{
    \begin{array}{l}
      r &= \sqrt{x^2 + y^2} \\
      \theta &= \tan ^{-1} \dfrac{y}{x}
    \end{array}
  \right.
\end{align}

複合体

Julia言語での複合体とは、C言語などの構造体と同じで、複数の値(名前付きフィールド)をまとめて管理できる機能または型です。struct文を使って、以下のように定義します。

struct 複合体名
        ~フィールド~
end

一般に::を使って、フィールドに型注釈を付与します。

定義した複合体は、以下のように宣言することでオブジェクトを作ります。

オブジェクト = 複合体名(フィールド初期値)

ここで、上記スクリプト例を見てみましょう。 x座標とy座標の値をもつPoint型を定義し、初期値(1.0, 1.0)をもつオブジェクトpを生成しています。

そして、この直交座標系にあるpを、極座標系に変換する2つの関数radialangleを使って計算しています。計算結果も正しいですね。

クラスを模倣

ところで、Julia言語にはJava言語にあるクラスという概念がありません。しかし、前回学習した「引数に型注釈を施す関数」を利用すると、上記のようにクラスを模倣することが可能です。

例として、以下にJavaで書いたPointクラスの一部を示します。上記スクリプト例と比べてみてください。※デバッグしてないので要注意

class Point{
    double x,
    double y,

    pabulic double radial() {
        r = sqrt(this.x^2 + this.y^2)
        return r
        }
}

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

問題|点pの移動

Point型のオブジェクト点pを移動させる関数を作成してください。

回答はこちら

おわりに

Juliaの複合体を簡単にまとめました。

Juliaにはクラスはありませんが、私はC言語から入ったクチなので、実はこの複合体の方がしっくりきます。

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

次はこちら

参考文献

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

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

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


  1. このように平面上の極座標系を円座標といいます。