情報基礎Ⅱ/基礎工学Ⅲ (第10回) 月曜4限 担当:北川 晃 平均値と標準偏差 n個のデータx1, x2, …, xnが与えられている. データを逐次読み込んで,その平均値と 標準偏差を求めよ. 平均値: 標準偏差: 平均値と標準偏差:具体例 (i) N≧2のとき :平均値 :標準偏差 プログラミング演習 • 外部データ’normal_data.txt’よりデータ点数および 各データを読み込んで,それらの平均値を計算す るプログラムを作れ. • 上記のプログラムをSubプロシージャに書き直し,平 均値を計算するプログラムを作れ. 出力例:平均値の計算 プログラム例:平均値の計算 Dim a(100), ave As Single, s As Single = 0, n As Integer Dim ReadText As New IO.StreamReader( _ "D:\…\normal_data.txt", System.Text.Encoding.Default) n = ReadText.ReadLine() For i As Integer = 1 To n a(i) = ReadText.ReadLine() Next データ点数の 読み込み データを配列 へ読み込む For i As Integer = 1 To n データの和の計算 s = s + a(i) Next ave = s / n 平均値の計算 Console.WriteLine("平均はE={0,8}", ave) ReadText.Close() 例題:平均値を求める関数副プログラム データ点数nとa(i) (i=1,…,n)を引数として,それらの 平均値を返す関数副プログラムを作れ. 関数プロシージャの引数には,配列を取ることも可能. 配列 Sub Main() Dim a(10), ave As Single, n As Integer … ave = average(n,a) … End Sub 配列 Function average(n,a) … Return ave0 配列 End Function 平均値を求める関数副プログラム:プログラム例 Sub Main() Dim a(10000), ave As Single, n As Integer Dim ReadText As New IO.StreamReader( _ "D:\…\normal_data.txt", System.Text.Encoding.Default) n = ReadText.ReadLine() For i As Integer = 1 To n a(i) = ReadText.ReadLine() Next ReadText.Close() ave = average(n, a) Console.WriteLine("平均はE={0,8}", ave) End Sub 平均値を求める関数副プログラム:プログラム例 Function average(n, a) Dim s As Single = 0, ave As Single For i As Integer = 1 To n s = s + a(i) Next ave = s / n Return ave End Function 関数副プロシージャで, 以下のものは宣言不要 • 共通に宣言した変数 • 関数の仮引数 プログラミング演習(再) • 外部データ’normal_data.txt’よりデータ点数および 各データを読み込んで,それらの平均値を計算す るプログラムを作れ. • 上記のプログラムをSubプロシージャに書き直し,平 均値と標準偏差を計算するプログラムを作れ. • さらに,標準偏差を計算する部分もSubプロシー ジャとして記述し,プログラムを書き直せ. Subプロシージャとは • 主プログラムの一部を外部の副プログラムに移す • 繰り返し同じ記述をする場合などに有効 • Functionプロシージャとは異なり, 主プログラムに値は返さない • 主プログラムと変数のやりとりをすることもできる Mainプログラムも, プログラムで Sub Main() Subプロシージャの一つ 共有する変数は, … Mainよりも外で プロシージャ名(変数) … 宣言する End Sub Sub プロシージャ名(変数) 値は返さないので, 文ブロック “Return *”はいらない End Sub Subプロシージャの例 Sub Main() For i As Integer = 1 To 20 If i - (i \ 3) * 3 = 0 Then fizz(i) ‘fizz’という名の Else Subプロシージャ Console.WriteLine(i) を呼び出す End If Next End Sub iの値と,’Fizz’と 書き出すプログラム Sub fizz(i) Console.WriteLine("{0} Fizz", i) End Sub Subプロシージャの例:出力例 標準偏差の計算:考え方 • 平均値の計算のプログラムより,データの和, 平均値の計算,平均値の書き出しの部分を Subプロシージャとして,分離する. • 配列’a()’,変数’ave’はSubプロシージャでも用いるので, 共通の変数として宣言する. • その他,Main()で用いる変数,Subプロシージャで 用いる変数などを整理する. • 標準偏差の計算部分を加える. 出力例:標準偏差の計算 プログラム例:標準偏差の計算 Dim a(100), ave As Single Sub Main() Dim var, sd As Single, s2 As Single = 0, n As Integer Dim ReadText As New IO.StreamReader( _ "D:\…\normal_data.txt", System.Text.Encoding.Default) データ点数の 読み込み n = ReadText.ReadLine() For i As Integer = 1 To n a(i) = ReadText.ReadLine() Next データを配列 へ読み込む average(n) 平均値の計算 For i As Integer = s2 = s2 + a(i) Next var = s2 - n * ave sd = Math.Sqrt(var 1 To n ^ 2 二乗の和の計算 ^ 2 / n) 標準偏差の計算 プログラム例:標準偏差の計算(続き) Console.WriteLine("標準偏差は{0,8}", sd) 標準偏差の 書き出し ReadText.Close() End Sub Sub average(n) Dim s As Single = 0 For i As Integer = 1 To n s = s + a(i) Next ave = s / n データの和の計算 平均値の計算 Console.WriteLine("平均はE={0,8}", ave) End Sub 平均値の書き出し プログラミング演習(再) • 外部データ’normal_data.txt’よりデータ点数および 各データを読み込んで,それらの平均値を計算す るプログラムを作れ. • 上記のプログラムをSubプロシージャに書き直し,平 均値と標準偏差を計算するプログラムを作れ. • さらに,標準偏差を計算する部分もSubプロシー ジャとして記述し,プログラムを書き直せ. プログラム例:平均値と標準偏差の計算 Dim a(100), ave, sd As Single Sub Main() Dim n As Integer Dim ReadText As New IO.StreamReader( _ "D:\…\normal_data.txt", System.Text.Encoding.Default) データ点数の 読み込み n = ReadText.ReadLine() データを配列 へ読み込む For i As Integer = 1 To n a(i) = ReadText.ReadLine() Next 平均値の計算 average(n) standard_deviation(n) ReadText.Close() End Sub 標準偏差の計算 プログラム例:平均値と標準偏差の計算 Sub average(n) Dim s As Single = 0 For i As Integer = 1 To n s = s + a(i) Next ave = s / n Console.WriteLine("平均はE={0,8}", ave) End Sub Sub standard_deviation(n) Dim s2 As Single = 0, var As Single 二乗の和の計算 For i As Integer = 1 To n s2 = s2 + a(i) ^ 2 Next 標準偏差の計算 var = s2 - n * ave ^ 2 sd = Math.Sqrt(var / n) 標準偏差の Console.WriteLine("標準偏差は{0,8}", sd) 書き出し End Sub 最小二乗法による直線の推定 n個のデータの真ん中を通るように 直線を引きたい y y ax b 傾きa, 切片bはいくらにすればよいか? 回帰直線 xi , yi i番目のデータと直線とのズレをεiとする. yi axi b i x E yi axi b 2 i i 2 i の値を最小にするようなa, bを決める
© Copyright 2024 ExpyDoc