計測工学基礎
2022.04.27

Back



  1. 本日の作業内容

  2. 対面指導グループ分け

    授業時間である水曜日の3・4時限での720教室における対面指導ですが,まずは以下のように割り当てたいと思います.

    4月27日他学科の学生さん,過年度生,S216001〜S216018の学生さん
    5月11日上記以外の学生さん

    教室に来る人数が少ないようでしたら,制限を解除して毎週誰でも可能ということにしたいと思います.まずは様子見です.

  3. 自習資料

    リンク先の資料を参考にしてください.

  4. 前回の課題について

    さて,レポート提出システムを使用しての第1回目の宿題提出ですが,問題が出た人が早速いました.提出するファイルの形式はpngということ指定していたのですが,それとは別の形式で提出した人がいました.システム上で強制的に拡張子をpngに書き換えますので,ファイルが読めない状態となってしまっていました.次回以降,提出のときには,ファイルの形式に注意してください.

    形式間違い: b2112

    さて,以下は問題のあるものの例です.参考にしてください.

    まず,上のものは先週のWebテキストでも注意していた縦軸のスケールについて,せっかく注意したのに無視しているケースです.技術資料の縦軸は必ず原点を明示してください.また,横軸の表示も1から10となっており,今回発生させた乱数0から9に対応していません.こちらも動画も含めて説明していたので,きちんと作ってくれなかったことは大変残念です.

    次ですが,上のグラフの縦軸を見ると,乱数は全体で5000回しか発生させていないようです.指示と違っていますね.

    上の例はちょっと一風変わったもので,縦軸のスケールが110刻みとなっていて値を読み辛いですね.目盛間隔が自動になっていて最大値に引っ張られて110刻みとなってしまったのでしょうか.よく見てから提出しましょう.

    グラフ全体を大きくしたら,軸の値など各種の文字も大きくしてください.字が小さくて見えません.

    最後のは,何がどうなってこうなったのか,私にはわかりません.すみません.

  5. 演習

    1. グラフの横軸や縦軸に量の名称を入れる

      前回の内容で乱数の出現頻度の棒グラフを作りましたが,縦軸や横軸には何も説明が無い状態まででした.それでは人に説明するためのデータにはなりませんので,まずそれらを入れることから始めましょう.

      前回グラフを作成した表をもう一度使用します.

      1. グラフ要素の追加

        前回の授業で作ったグラフをダブルクリックします.そうすると,上のメニューバーがグラフモードに変わり,左上に「グラフ要素の追加」メニューが出てきます.それを選択すると「軸ラベル」という項目が出てきますので,それを選びます.

        さらに縦軸と横軸を選択するようになりますので,それぞれ作業をしましょう.

      2. 仕上がり

        「軸ラベル」という四角い入力エリアが出てきますので,その軸ラベルという文字を消して適当な項目名を入れると,下図のように出来上がります.

      3. ショートカット

        軸ラベルの追加の操作は,グラフの右上に表示される+の四角をクリックすることで現れるメニューからも可能です.お好きな方をお使いください.

    2. 平均値を求める関数average()

      ここからはいくつか関数を使用する練習です.実験データの整理などで必須の平均値から使ってみましょう.

      値や個数は何でもいいので,適当にいくつかのセル(縦か横に1列に並んでいるものが良い)に数値を入れます.次に,それらのセルの最後のセルの次の位置に平均値を求める関数average()を入力して,先ほどの数の平均値を求めましょう.average()は単純な算術平均を求めるものです.

    3. 分散を求める関数var()

      先ほどの数値のバラつき具合を見ます.バラつきの度合いは分散という量で示すことができます.関数ウイザードを見ると,分散にはいくつかの関数が用意されています.

      関数名内容
      VAR不偏分散
      VAR.P分散
      VAR.S不偏分散
      VARA不偏分散
      VARAP分散
      VARAPA分散

      データの中身が数値でなかった場合など細かいところもありますが,基本的には「不偏分散」か「分散」かの違いです.var()とvar.p()がどう違うのか,実際に値を求めてみて,授業資料にある定義(式(5)や式(7)を使うと実際に求められます)と絡めて考えてみましょう.

    4. 標準偏差を求める関数stdev()

      分散は次元が実際のデータの2乗となってしまうので,直接値を見ても感覚的にわかりづらいものがあります.そこで,分散の平方根を取って標準偏差とすることで値を考えやすくなります.ここでも,関数ウィザードで見るといくつかのタイプがありますが,分散と同じように考えることができます.stdev()とstdev.p()で何が違うのか,実際に値を求めてみて考えてみましょう.

    5. 前回の度数分布のばらつき

      先週行った作業で,乱数により0から9までの整数を100回,1000回,そして10000回発生させました.でた回数は当然トータルの回数が少ないほどばらついていました.そのバラつきについて,標準偏差を求めて比較して考えてみましょう.

    6. 二項分布によるバラつきの確認

      データのばらつきは経験則として,真の値に近いほど標本の数が多いということが知られています.真の値から大きく外れるようなばらつきは個数としては少ないということです.また,真の値よりも大きな標本と小さな標本の個数もだいたい等しくなることが知られています.

      そこで,二項分布によって,その傾向を確認しましょう.2項分布とは2つの状態のどちらかがランダムに出てくる場合に従う分布で (a + b)n の係数で表されます.

      例えば,コイン10枚を投げた場合,表と裏が何枚かずつ出ます.5枚表になる場合が一番頻度が高くて,枚数が偏るほど頻度が少なくなりますが,無限回数投げると綺麗な左右対称系に分布してくるようになります.それを体験してみましょう.

      1. プログラムの準備

        今回はコイン10枚を100回投げる場合,1000回投げる場合,10000回,さらに10万回投げる場合の4通りをシミュレートしてみましょう.さすがにCalcの機能で行うのは大変なので,C言語のプログラムを使いましょう.

      2. プログラム

        以下のソースを使うと,10回コインを投げて表が出た回数について0枚から10枚まで何回あったかを出してくれます.これを使って元データを作りましょう.

        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>
        
        int main(void)
        {
            int coin[11][5];
            int times[4] = {100, 1000, 10000, 100000};
            int i, j, k, count;
            
            for(i=0; i<=10; i++)
            {
                coin[i][0] = i;
                
                for(j=1; j<=4; j++)
                {
                    coin[i][j] = 0;
                }
            }
            	
            for(i=0; i<=3; i++)
            {
                for(j=1; j<=times[i]; j++)
                {
                    count = 0;
                    
                    for(k=1; k<=10; k++)
                    {
                        count += rand() % 2;
                    }
                    
                    coin[count][i+1]++;
                }
            }
            
            printf("Number of Head, 100, 1000, 10000, 100000,\n");
            
            for(i=0; i<=10; i++)
            {
                for(j=0; j<=4; j++)
                {
                    printf("%d,", coin[i][j]);
                }
                
                printf("\n");
            }
            
            return 0;
        }
        

        S21の学生さんはまだ習っていない配列が出ているので,とりあえずは使うだけで構いません.

        ところで, if 文が無いことにも注意してくださいね.
        他学科の学生さんでプログラミング経験の無い場合では,C言語の環境を整えることから始める必要があります.様々なサイトで紹介されていますので,参考にしてみてください.ちなみに松江市在住のまつもとゆきひろさんが開発しているRubyという言語をインストールして実行することも可能です.インストールはRubyの方が簡単ですが,プログラムはちょっと変えないといけませんので,ご注意ください.

        コマンドプロンプトなどで実行すれば結果が得られますが,そもそもどうやってプログラムを動かすかというところはネットなどを参考にして挑戦してください.すみません.

      3. データ作成

        プログラムをコンパイルして実行すると,結果が画面に表示されるだけです.これをデータとして保存するために,コマンドラインでリダイレクトという機能を使います.作業は簡単です.

        > .\a.exe > data.csv

        とすると,data.csvという名前のCSV(comma separated value)ファイルができていますので,Calcでそれを開くと値を読みだすことができます.

      4. グラフ作成

        バラつき具合をグラフで確認しましょう.グラフの形式は任意ですが,本日実習した縦軸や横軸の説明をきちんと入れてください.

    7. 課題

      前項のd.のグラフを作成して前回と同様にPNG形式の画像で提出してください.提出にはレポート提出システムを利用してください.

      昨年度にもこの課題を課したのですが,かなり多くの人が4つの結果を1つのグラフにまとめていました.そうすると,だんだん正規分布に近づいていくことが視覚的に理解できませんので,注意してください.

  6. 次回の予習範囲

    次回も引き続き.「分散」や「標準偏差」などの統計量について学習します.今回の資料を参考に予習してください.


Back