Week 9: グループワーク2(2回目)

今日やること

はじめに

  • 最初に少し講義をします。

  • その後、チームに分かれて作業を行います。

ドット構文

juliaでは、「ある一つの要素を引数にとった処理」に対し、ドットをつけることでそれを「ベクトルに対する処理」に拡張できます。

例をみてみましょう。sinは引数1つをとってそのsinを返します。

sin(1.5)

これに対し、当然値が返ってきます。

0.99749

では、sinにベクトルをいれるとどうなるでしょうか?

sin([1, 2, 3])

これはエラーになります。sinの引数は単一の数字が来ることが仮定されているからです。

ここで、sin関数にドットをつけてsin.としてみましょう。すると、これは「引数がベクトルの場合、そのそれぞれの要素にsinを適用する。出力は入力と同じサイズのベクトル」という意味になります。やってみましょう。

sin.([1, 2, 3])
3-element Vector{Float64}:
 0.8414709848078965
 0.9092974268256817
 0.1411200080598672

ここでは引数のベクトルのそれぞれにsinを適用したものが返されました。

ドット演算は行列に対しても同様の処理となります。

sin.([1 2 3; 4 5 6])
2×3 Matrix{Float64}:
  0.841471   0.909297   0.14112
 -0.756802  -0.958924  -0.279415

また、別の例として、掛け算を表す*にドットをつけて.*とすることで、*は行列積ではなく要素積(アダマール積)となります。以下を考えましょう。

a = [1, 2, 3]
b = [4, 5, 6]
a * b

上記では、3次元のベクトルa, bを作っています。これに対し行列積を表す*を適用しても、エラーになります(3x1の行列を3x1の行列の間には行列積が定義できないので)

ここで、ドットを付けると、次のように要素積の結果が得られます。

a .* b
3-element Vector{Int64}:
  4
 10
 18

やってみよう:

  • 上記のドット演算の法則は、自分で書いた関数に対しても成り立ちます。それを確認してみましょう。

チーム作業

先週に引き続き、チームに分かれて作業してもらいます。最適化や数値計算の内容について、Juliaで実際に計算してみてください。次回に発表してもらいます。

発表時間は「1チーム5分」を目安にしてください。

今回は必ず「スライドpdf」も作り、共有するようにしてください。

今日終わらなければ、次回までに頑張って作ってきてください。

CC BY-SA 4.0 Yusuke Matsui. Last modified: July 11, 2024. Website built with Franklin.jl and the Julia programming language.