4 数式をグラフ化する

4.1 繰り返しの記法(おさらい)

繰り返し

(これまでに3種類の繰り返し方を習ったが、ここでは3のforを使った繰り返し についておさらいしておく)

for() の構文 括弧内は(基本的な使い方の場合)

// 名標(ループ変数) <- 範囲を生成する式

for( n <- 1 to 30 ) {
	 // ここに繰り返すべき文や式
}			//				のように使う

1つずつ増やす以外に 増分を指定する書き方もある forの初期値の型

for( n <- 1 to 30 by 3)		// などのように by で指定

4.2 数式を関数として計算

def 練習:

関数の入力は kojo画面で行い、 結果の確認は Scala REPL上で行う、
という使い方をするときには、
関数定義は kojoで Ctrl-C(コピー)して REPL画面で Alt-SPACE, E, P (貼付)するといい。

2乗 pow なお、x2 は、 * 図のように math.powメソッドを使って、 math.pow(10,2) とも書けるが、

4.3 表として印字する

pow 表

4.4 グラフを描く(タートルで)

グラフを描く

4.5 様々な数値関数

(様々な数学的関数を考える際に参考にして下さい)

Math パッケージに 多くの関数が用意されている。 (Math は Mathematics(数学)の略称としてプログラミング界でよく使われる名称) Math

主な関数:

importの書き方
importの書き方
名前   意味   名前の由来になった単語
pow   べき乗   power
sqrt   平方根   squre root
abs   絶対値   absolute
sin cos tan   三角関数   sine cosine tangent
mathの使い方


ワイルドカード

  1. math.sqrt(math.abs(x))
      のように、ピリオド(.) でつないで、左側に math、右側にメソッド名を書く。   (前回、Turtleに関してメソッドを呼んだときと同じ理屈 (右図math))
  2. プログラムの最初に
import math._

組み合わせの例 import

としておくと(Mathパッケージにあるすべての関数をインポート)
 (文字 _ は Scalaでは ワイルドカード文字として、
  「全て」「何でも」という意味で使われる)
以下 sqrt(abs(x)) のように書ける。

これを組み合わせて使ってみよう(組み合わせ方の例の一部を右図板書に示した)。 sine 例えば sqrt(abs(x))sqrt.abs と同じ意味。

ここまでの プログラム例
と、 その改良版(変数を使ったもの)

変数を使う意味: 変数

4.6 リサジュー(発展課題)

リサジュー

パラメータ t (名前は何でもいいが)を for で変化させながら、
x座標 y座標 の両方を 何かの関数の値として動かす。例えば、

for(t <- 0.0 to 20 by 0.1) moveTo(cos(t), sin(t))

テレビ(昔のブラウン管方式)はこの原理で作られた(右図)。

 ただし、上記のプログラムはそのままでは動作しない。
 前項のMathパッケージについての解説を考慮して変更して下さい。
 cos(t), sin(t) の代わりに、例えば cos(t*0.3), sin(t*0.5) のような値
 (定数はcosとsinで違う値にするほうが面白いだろう)を使ってみて下さい。
 そのまま動作するサンプルはここに1つ置いてある。 

4.7 X軸 Y軸も 描いておこう

x軸y軸

def f(x:Double):Double= x*x
(1.0 to 3.0 by 0.1).map(f).max

関数で囲む ここまでの プログラム例

4.8 グラフを描く関数を作る

関数名をそのまま渡すことができる(型があっていれば)

例:

def drawGraph(start:Double, end:Double, step:Double, fnc:Double=>Double) {
    // ここにこれまでに書いた描画部分が全部収まる
}
def f(x:Double):Double={ ... }

drawGraph(-1, 1, 0.1, f)
関数に関数を渡す
関数に関数を渡す

または: この例のように、関数f だけを引数にして、 関数 drawGraph(名前は自由につけていい)を作ってみよう。