計算機工学
第1回 計算機利用の基礎1(計算機の仕組み)
1−1 計算機はどのようなハードウェアによって構成されているのか?
1−2 計算機の五大装置
制御装置:記憶装置に記録されているプログラムを解読し,その指示に従ってその他の装置 を制御する. 演算装置:四則演算,条件判断,論理演算を行う.上記2つを合わせて CPU(Central Processing Unit)と呼ぶ.
記憶装置:プログラムやデータを記憶しておく装置.主記憶装置(いわゆるメモリ)と補助 記憶装置がある. 入力装置:計算機へ情報を送り込む装置. 出力装置:計算機から情報を送り出す装置. 外部記憶装置:情報を格納しておく装置.制御信号によって計算結果を保存したり,保存デー タを記憶装置に送ったりする. 制御の流れ データの流れ ●「クロック周波数」
CPU(Central Processing Unit)の動作速度を表す.クロック周波数によって,計算機内部 の各回路間で処理の同期がとられる.クロック周波数が高いほど処理能力も高くなるが, 周囲の部品の動作周波数に上限があるため,むやみに上げることはできない.
メモリには番地が付いており,1つの番地には2進数8桁分,つまり1バイト(=8ビット) の情報を記憶できる.計算機の中ではすべてが2進数で表現されている.
1−3 記憶装置
RAM(Random Access Memory): 読み書き可能,揮発性(電源が切れると記憶内容が消える). DRAM(Dynamic Random Access Memory): 高集積度,低速,安価.コンデンサを利用した
記憶素子(リフレッシュ,つまり一定時間毎の再書き込み必要).メインメモリに利用. SRAM(Static Random Access Memory): 低集積度,高速,高価.トランジスタを利用した記
●「ビット」と「バイト」 ビット(bit):計算機が扱う情報の最小単位.2つの選択肢から1つを特定するのに必要な 情報量が1ビット.2進数の1桁に対応し,0と1の2種類のデータを表すことがで きる. バイト(byte):情報量の単位で,ほとんどの場合,1バイト=8ビット.計算機では,情 報の記憶,処理,伝達をバイト単位で行うことが多い. ●「2進数」「16 進数」と「10 進数」 2 進数 16 進数 10 進数 2 進数 16 進数 10 進数 0000 0000 00 0 0001 0000 10 16 0000 0001 01 1 0001 0001 11 17 0000 0010 02 2 0001 0010 12 18 0000 0011 03 3 0001 0011 13 19 0000 0100 04 4 0001 0100 14 20 0000 0101 05 5 0001 0101 15 21 0000 0110 06 6 0001 0110 16 22 0000 0111 07 7 0001 0111 17 23 0000 1000 08 8 0001 1000 18 24 0000 1001 09 9 0001 1001 19 25 0000 1010 0A 10 0001 1010 1A 26 0000 1011 0B 11 0001 1011 1B 27 0000 1100 0C 12 0001 1100 1C 28 0000 1101 0D 13 0001 1101 1D 29 0000 1110 0E 14 0001 1110 1E 30 0000 1111 0F 15 0001 1111 1F 31 16 進数の表記:0x02, 0x1C など
憶素子(リフレッシュ不要).キャッシュメモリに利用. ROM(Read Only Memory): 読み出し専用.不揮発性. マスク ROM: 製造時に書き込みするため,書き換え不可能.
PROM(Programmable ROM): ユーザーが1度だけ書き換えることができる.
EPROM(Erasable ROM): 紫外線(UV-EPROM)や電気的(EEPROM)に消去,書き換えが可能. フラッシュメモリ: 電気的に一括または部分消去.書き換えが可能.
1−4 入力装置
文字や数字の入力:キーボード 位置情報を入力(ポインティングデバイス):マウス,トラックボール,ジョイスティック, デジタイザ,タブレット,タッチパネル イメージを入力:イメージスキャナ,バーコードリーダ,OCR(Optical Character Reader),OMR(Optical Mark Reader) その他:カードリーダ,音声入力装置
1−5 出力装置
ディスプレイ:CRT(Cathode Ray Tube)ディスプレイ,
液晶ディスプレイ(LCD: Liquid Crystal Display),
TFT(Thin-film Transistor)ディスプレイ,プラズマディスプレイ, 有機 EL ディスプレイ プリンタ:ドットインパクトプリンタ,インクジェットプリンタ,レーザプリンタ, 熱転写式プリンタ,感熱式プリンタ,XY プロッタ
1−6 外部記憶装置
磁気ディスク:フロッピーディスク,ハードディスク,ZIP 光ディスク:CD-ROM,CD-R,CD-RW,DVD-ROM,DVD-R,DVD-RW,DVD-RAM 光磁気ディスク:MO 各種メモリーカード:コンパクトフラッシュ,スマートメディア,SD カードなど ●SI接頭語 1018 102 10-9 1015 101 10-12 1012 10-1 10-15 109 10-2 10-18 106 10-3 103 10-6演習1
問1 次の2進数を 10 進数および 16 進数に変換しなさい. (1)1011 (2)0110 0111 問2 次の 16 進数を2進数および 10 進数に変換しなさい. (1)0xFF (2)0xB35第2回 計算機利用の基礎2(誤差とその扱い)
2ー1 誤差
絶対誤差:真の値 † aとその近似値 † xの差.†
| x - a |
相対誤差:絶対誤差が全体に占める割合.†
| x - a |
x
許容誤差:あらかじめ許される誤差のこと. 誤差の限界:ある近似値 † xが真の値 † aに対して常に † | x - a |£ pであるとき,定数†
p
を誤差の限界と 呼ぶ. <例題2−1> 日本工業規格(JIS)では,トイレットペーパーの規格(JIS P4501)が表のように規定されている. 項目 寸法(真の値) 許容誤差 紙幅, mm 114 ±2 1巻の長さ, m 27.5,32.5,55,65,75,100 +3,-0 芯の内径, mm 38 ±1 巻取りの径, mm 120 以下 - 試しに自宅のトイレットペーパーを測ったところ,紙幅 113.5mm,1巻の長さ 66.4m であっ た.このとき絶対誤差,相対誤差はそれぞれ 紙幅:†
| x - a |=|113.5 -114 |= 0.5 Æ 0.5mm
,†
| x - a |
x
=
|113.5 -114 |
113.5
= 0.0044 Æ 0.44%
長さ:†
| x - a |=| 66.4 - 65 |= 1.4 Æ1.4m
,†
| x - a |
x
=
| 66.4 - 65 |
66.4
= 0.021 Æ 2.1%
有効数字:ある数字において意味のある桁数のことを有効桁数といい,有効桁数までの数字を有 効数字と呼ぶ. <例題2−2> ある丸棒の直径を5回計測したとき 10.3,10.2,10.3,10.2,10.1mm という結果を得た.平均値はいくらか? 有効数字を考慮して答えなさい. 丸め誤差:四捨五入や切り上げ,切り捨てを行うことを「丸める」と言い,丸めに伴う誤差を丸 め誤差と呼ぶ. <例題2−3> 5.678÷1.234=4.601296596……であるが,以後の計算を進めるときは有効数 字4桁の 4.601 を用いれば十分である. 打ち切り誤差:近似値を求めるために計算機で反復計算を行うことがある.何度反復させても真 の値に近づくだけで,真の値そのものになることはない.このようなとき計算を 適当なところで打ち切って近似値とする.これによって生じる誤差を打ち切り誤 差と呼ぶ. <例題2−4> 四則演算のみを用いて
†
x = 2
を計算する.真の † xが求まれば † x2 = 2となるはず である.†
x = 1.4
のとき † x2= 1.96†
x = 1.5
のとき † x2= 2.25†
x = 1.41
のとき † x2 = 1.9881†
x = 1.42
のとき † x2= 2.0164†
x = 1.414
のとき † x2 = 1.999396†
x = 1.415
のとき † x2 = 2.002225 桁数 2 3 4 近似値 1.4 1.41 1.414 打ち切り誤差 0.0142 0.0042 0.0002 桁落ち:計算結果が 0 に近くなるような加減算を行うとき,有効数字の桁数が極端に小さくなる こと. <例題2−5> 12.345-12.344=0.001 有効数字 5 桁の計算結果が有効数字 1 桁になってしまう.計算機の内部でこのような極端な桁 落ちが生じると計算誤差が大きくなる.そこで計算順序やアルゴリズムの工夫が必要となる.2−2 計算機内部における数
オーバーフロー:計算機では数を扱う際に決まった記憶容量を割り当てる.計算機による演算結 果がその記憶容量の上限を超えることをオーバーフローと呼ぶ. アンダーフロー:計算機による演算結果によって,記憶容量の桁数すべてが 0 になることをアン ダーフローと呼ぶ. CPU が扱うことができるのは 16 ビット(2 進数で 16 桁),32 ビット(2 進数で 32 桁),64 ビット(2 進数で 64 桁)といった決まった大きさの数である.そこで 16 ビットでの整数表現を考えてみる. 符号なし整数:2 進数 16 桁を 10 進数に変換すると(あるいは 216を計算すると)0∼65535 の範 囲の数を表現できる. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 符号付き整数:2 進数 16 桁のうち 1 桁で正負の符号を表現するので,数字に使えるのは残りの 15 桁となる.つまり-32768∼32767 の範囲の数を表現できる. 1 正負 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 数が実数の時は,計算機では各桁の値の並びである「仮数部」と小数点の位置を示す「指数部」 で表現する.これを浮動小数点数と呼ぶ.例えば,123.456 は 1.23456×102であり 1.23456E02 のように,0.000123456 は 1.23456×10-4であり 1.23456E-04 のように表す. 32 ビット実数を考えてみると,2 進数 32 桁のうち1桁で正負の符号,7 桁で指数部,残り 24 桁で仮数部を表現する.なお,指数部が負であっても正の数となるようゲタを履かせて表現を行っ ている.表現できる数の範囲や精度はシステムによって異なるが,有効数字は約 7 桁,おおよそ 1×10-38∼1×1038の範囲の数を扱える. 1 正負 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
第3回 データ解析1(要約と視覚化)
3−1 要約と視覚化
データの集まりを いくつかの数値に要約して示す. グラフによって視覚化する. ○データの性質を表す特徴量:平均値,中央値,分散,標準偏差 ○データの値の散らばり方(分布):正規分布,t 分布,F 分布,二項分布 ○仮説が正しいか検定:t 検定,c2検定 指 数 部 仮 数 部○変数間の相関関係や傾向の解析:回帰分析,主成分分析,クラスタ分析
3−2 グラフによる視覚化
標本に含まれるデータの大まかな分布や特徴を把握する最も単純な方法は,グラフによるデータ の視覚化である. どんなグラフがあるのか? <表計算ソフト Excel の例> 縦棒グラフ 縦棒グラフは、一定期間の数値の変化を示したり、項目間 の比較を示したりします。項目は水平方向にプロットさ れ、データの値は垂直方向にプロットされるので、時間に よる変化が強調されます。 横棒グラフ 横棒グラフは各項目間の比較を示します。項目は垂直方向 に配置され、データの値は水平方向に配置されるので、時 間よりも項目間の比較が強調されます。 折れ線グラフ 折れ線グラフは、一定期間のデータの傾向を示します。 円グラフ 円グラフは、データ系列の各項目の比率を示します。円グ ラフのデータ系列は 1 つだけです。重要な要素を強調す る場合に適しています。散布図 散布図は、複数のデータ系列の数値間の関係を示したり、 2つの数値群を1つのデータ系列としてXY座標にプロット したりします。不規則または集中したデータを表し、科学 技術データの表示によく用いられます。 データを配置する場合、x軸にプロットする値を1行目また は1列目に配置し、y軸にプロットする値を隣接する行また は列の対応する位置に配置します。 面グラフ 面グラフは、時間の変化の割合よりも、変化の量が強調さ れます。また、プロットされた値の合計が表示されるので、 全体と部分との関係も示されます。 ドーナツグラフ ドーナツグラフは、円グラフと同じように、全体に対する 各部分の関係を示します。さらに、複数のデータ系列を表 示することもできます。ドーナツグラフの色はデータ系列 を表します。 レーダーチャート レーダーチャートでは、項目ごとに中心から放射状に伸び る数値軸が割り当てられます。同じデータ系列の値は線で 結ばれます。レーダーチャートは、複数のデータ系列を総 合して比較します。 等高線グラフ 等高線グラフは、2組のデータの最適な組み合わせを見つ ける場合に使います。地形図のように、同じ値の範囲を色 やパターンで示します。 バブルチャート バブルチャートは、散布図の 1 つです。データマーカーは、 3 つの値を示します。
株価チャート 高値- 安値- 終値を表すグラフは株価を示す場合によく使 われます。また、温度の変化など科学的なデータを示す場 合にも使われます。このようなグラフを作成するには、デー タを適切な順序に並べます。 円錐グラフ 円錐のデータマーカーは、3-D縦棒グラフおよび横棒グラ フに効果を与えます。 円柱グラフ 円柱のデータマーカーは、3-D縦棒グラフおよび横棒グラ フに効果を与えます。 ピラミッドグラフ ピラミッドのデータマーカーは、3-D縦棒グラフおよび横 棒グラフに効果を与えます。 データを分かりやすく,かつ効果的に提示するためには,適切なグラフを選択する必要がある.
3−3 母集団と標本
母集団(population):情報を得たいと考えている対象の全体 有限母集団:有限であることが明らかである母集団.ある日時における日本の人口など. 無限母集団:対象が無限.実験室で繰り返し行われる実験やコイン投げ実験など. 標本(sample):母集団から取り出したデータの集まり.標本を通じて母集団の姿を知るためには, 標本は母集団を代表 するものでなければならない.そのた めに,無作為抽出法 (random sampling)によって標本を抽出(sampling)する必要がある.3−4 データの種類
質的データ:分類を表すだけで数として扱えないデータ.性別,役職,職業など. 名義尺度:データが単なる記号で順序がない.性別,職業,血液型など. 順序尺度:間隔は保証されないが,データに順序がある.役職,順位や程度を聞くアンケート結果など. 量的データ:数として測定できるデータ.株価,重さなど. 間隔尺度:間隔を明示できるデータ.テストの点など. 比尺度:間隔尺度に加えて,絶対的な基準0があり,比率を考えることが出来るデータ. 重さ,温度など. <例題3−1> 被験者3人を対象に鼓膜温度と直腸温度を同時に繰り返し測定したところ,表 3.1 のようなデータが得られた.鼓膜温度と直腸温度の関係を散布図で示しなさい. <例題3−2> 高齢者8人の血圧を午前と午後に測定したところ,表 3.2 のようなデータが得 られた.午前と午後の血圧変化をグラフにしなさい.
演習3
距離を計測するためのセンサのひとつにレーザー変位計がある.これは,発射したレーザーが対 象物表面で反射して戻ってくるまでの時間をもとに,距離を知るものである.あるレーザー変位 計の出力データ(AD 値)と実距離の関係を調べ,下表を得た.横軸を実距離,縦軸を AD 値とし, 散布図を描きなさい. 実距離, mm AD 値 10 618 15 808 20 1004 25 1197 30 1398 30 1444 25 1246 20 1050 15 855 10 665 表 3.1 鼓膜温度(℃) 直腸温度(℃) 37.1 37.6 35.1 35.8 35.5 36.4 34.9 35.4 35.4 36.0 37.0 37.3 35.0 35.7 35.4 36.3 35.2 35.9 35.8 36.5 表 3.2 患者番号 午前の血圧(mmHg) 午後の血圧(mmHg) 1 182 163 2 169 142 3 173 174 4 143 137 5 158 151 6 156 143 7 176 180 8 165 162第4回 データ解析2(記述統計)
4−1 基本統計量
前回の「グラフによる視覚化」はデータの傾向を把握するには適するが,客観的な比較のもと になる正確な数値は求まらない.そこで,データの集まりをいくつかの数値に要約することを考 える.このときに用いられるのが基本統計量である.基本統計量には, データの代表値を表す統計量 データのばらつきを示す統計量 がある.4−2 データの代表値を表す統計量
○算術平均:最も一般的な平均値†
x =
x
i i nÂ
n
Excel の計算式 =average(セル範囲) ○相乗平均†
x
1x
2x
3x
4⋅ ⋅ ⋅ x
n n Excel の計算式 =geomean(セル範囲) ○調和平均†
n
1
x
1+
1
x
2+
1
x
3+ ⋅ ⋅ ⋅ +
1
x
n Excel の計算式 =harmean(セル範囲) ○中央値:データを順番に並べたときの中央の値 Excel の計算式 =median(セル範囲) ○最頻値:データ中にもっとも頻繁に現れる値 Excel の計算式 =mode(セル範囲) <例題4−1> 例題3−2において高齢者8人の血圧を午前と午後に測定した結果を示した. 午前と午後のデータに対して,算術平均,相乗平均,調和平均,中央値をそれぞれ求めなさい.4−3 データのばらつきを示す統計量
○最小値:データ中の最小の値 Excel の計算式 =min(セル範囲) ○最大値:データ中の最大の値 Excel の計算式 =max(セル範囲) ○四分位点:データを順番に並べたとき,1/4(25%)と 3/4(75%)の位置にくる値 25%点 Excel の計算式 =quartile(セル範囲, 1)75%点 Excel の計算式 =quartile(セル範囲, 3) ちなみに Excel の計算式 =quartile(セル範囲, 0) は最小値 Excel の計算式 =quartile(セル範囲, 2) は中央値 Excel の計算式 =quartile(セル範囲, 4) は最大値を示す. ○標本分散:与えられたデータの分散(variance)
†
(x
i- x
m)
2Â
n
Excel の計算式 =varp(セル範囲) ○不偏分散:与えられたデータが母集団の一部であるとき,母分散を求めることは出来ない.そ こで,母分散の推定値として,この不偏分散を用いる.†
(x
i- x
m)
2Â
n -1
Excel の計算式 =var(セル範囲) ○標本標準偏差:標本分散の平方根 † (xi- xm) 2Â
n Excel の計算式 =stdevp(セル範囲) ○標準偏差(standard deviation, SD):不偏分散の平方根.「データがどのくらいばらついている か」を示す指標で,データの分布状況を知る目安として有用. † (xi- xm) 2Â
n -1 Excel の計算式 =stdev(セル範囲)○標準誤差(standard error, SE):「データの平均値がどのあたりにあるのか」を示す指標.平均値 がこの範囲にあることを示すものであり,個々のデータの分布については情報が全く含まれない.
†
(x
i- x
m)
2Â
(n -1)n
Excel の計算式 =stdev(セル範囲)/sqrt(標本数) <例題4−2> 例題3−2において高齢者8人の血圧を午前と午後に測定した結果を示した. 午前と午後のデータに対して,最小値,最大値,標本分散,不偏分散,標本標準偏差,標準偏差, 標準誤差をそれぞれ求めなさい. <例題4−3> 総務省統計局のホームページ(http://www.stat.go.jp/data/nenkan/02.htm) から「都道府県別人口」の Excel データをダウンロードし,平成 17 年(2005 年)の人口データ データ(列U)について上記の各基本統計量を求めなさい.演習4
健常人の血中コレステロール(単位:mg/dl)を測定したところ,以下のデータが得られた.基本 統計量を男女それぞれで計算し,下表に記入しなさい. 男性 女性 206 186 216 168 195 184 176 216 193 145 259 162 212 236 226 198 205 207 193 182 184 172 193 248 253 168 192 192 183 188第5回 データ解析3(群間の比較)
5−1 独立した2つの標本に差があるかどうか?
<例題5−1> 演習4で,男女 15 名ずつの血中コレステロール値のデータを示した.男女間で 血中コレステロール値に差があるかどうか調べなさい. このような独立した2群の標本(男と女)に差があるかどうかを調べる問題は以下の手順で解く. (1)仮説の設定 帰無仮説:2標本の平均値は等しい(差がない). 対立仮説:2標本の平均値に差がある. (2)検定方法の選択 ○データが正規分布しているかどうか している >> パラメトリック検定 計算結果 基本統計量 男性 女性 算術平均 標準偏差 標準誤差 最小値 最大値 不偏分散 相乗平均 調和平均 中央値していない >> ノンパラメトリック検定 ○標本間に関連があるかどうか 関連がない >> 独立(対応なし) 関連がある >> 対応あり ○標本の数はいくつか 1標本,2標本,多標本 (3)ここではデータが正規分布であるとする.男女のデータに関連はないので,「独立2標本」 の検定方法である t 検定を採用する.(実際には F 検定などの「等分散検定」を行い,母分 散が同じであることを確かめておく必要がある). (4)t 検定の Excel 計算式 =ttest(配列 1,配列 2,尾部,検定の種類) ここで,尾部=1 のとき片側検定,尾部=2 のとき両側検定 検定の種類は, 1:対をなすデータの t 検定 2:等分散の2標本を対象とする t 検定 3:等分散でない2標本を対象とする t 検定 つまり,=ttest(配列 1,配列 2,2,2)で,有意確率(p 値)が計算される. (5)実際に計算すると,p=0.112 となる.この値を「有意確率」「p 値」「危険率」などと呼ぶ. (6)結果の判定 有意水準を 5%とすると, p>=0.05 のとき:帰無仮説を棄却しない(2標本の平均値に差があるとは言えない) p<0.05 のとき:帰無仮説を棄却(「2標本の平均値は等しい」という帰無仮説のもとでは, 実現率が 5%未満である.ゆえにこの仮説を捨て,対立仮説を採用.つまり2標本の平均 値に差がある) なので,男女間のコレステロール値の平均値に有意な差は認められないという結果になる.
5−2 対応ある2つの標本に差があるかどうか?
<例題5−2> 高齢者8人の血圧を午前と午後に測定した例題3−2(表 3.2)において,午前 と午後の血圧に差があるかどうか検定しなさい. 2群の標本(午前と午後)に差があるかどうかを調べたいが,この2群は独立ではない.言い 換えると,同一人物から得られたデータであるので,2つのデータに対応がある.この場合,「対 応2標本」の t 検定を用いる.つまり,=ttest(配列 1,配列 2,2,1)で,有意確立(p 値)が計 算される.5−3 検定方法をどう選ぶか?
標本の数や内容,サンプリング方法等に応じた非常に多くの検定方法がある.データを比較・ 解析するためには,注意深く検定方法を選択する必要がある.簡単な一応の選択目安を以下に示 す. パラメトリック検定 ノンパラメトリック検定 1標本 t 検定(平均値の検定) F 検定(データの棄却検定) c2検定(母分散の検定) c2検定(適合度検定) 独立2標本 (対応なし2標本) 独立2標本 t 検定(平均値の差の検定) F 検定(等分散検定) Mann-Whitny の U 検定 対応あり2標本 対応2標本 t 検定(平均値の差の検定) Wilcoxon 符号付き順位和検定 独立多標本 (対応なし多標本) 対応なし一元配置分散分析 Kruskal-Wallis 検定 対応あり多標本 対応あり一元配置分散分析 Friedman 検定 パラメトリック検定:データが間隔尺度(連続変数)で正規分布しているときの検定 ノンパラメトリック検定:データの分布に依存しない検定 ●正規分布(ガウス分布) 微小な誤差がランダムに組み合わさったデータ,例えば「ある年齢の人の身長」や「何 かの観測値」を度数分布図にしたときに現れる,単峰の釣鐘型分布. 正規分布は,平均値
†
m
と分散 †s
2(標準偏差 †s
)を用いて,次式で表すことが出来る.†
f (x) =
1
2ps
e
-(x-m ) 2 2s2 ●正規性の検定 パラメトリック検定の条件として,データが正規分布であるかどうかが問題となる.正 規性の検定方法には, Shapiro-Wilks 検定 Kolmogorov-Smirnov 検定 などがある.演習5
ある材料について熱処理後の伸び量(mm)を測定したところ,A 社製品 18 個,B 社製品 16 個に対 して下表のデータを得た. 22 19 16 17 19 16 26 24 18 A 社 19 13 16 22 18 19 22 19 26 22 20 28 24 22 28 22 19 25 B 社 21 23 24 23 23 29 23 問1 次の基本統計量を求めなさい. A 社製品 B 社製品 算術平均 分散(不偏分散) 標準偏差 問2 A 社と B 社の製品の伸び量に差はあるか? データは正規分布,等分散であるとして検定 しなさい(p 値と有意差の有無を解答すること). ●t 検定を行うときの条件 t 検定を行うには,データが間隔尺度(連続変数)で正規分布,かつ等分散であることが 必要である.等分散の検定には,F 検定が用いられる. 2標本とも正規分布で等分散 正規分布ではないが,等分散 正規分布ではなく,等分散でもない第6回 データ解析4(分散分析)
6−1 分散分析(analysis of variance: ANOVA)とは
2標本間の平均値の差を調べる方法が t 検定であった.標本が3つ以上になったとき,分散分 析を用いる. 分散分析は,データ全体の変動(バラツキ,分散)のうち,要因による変動が大部分を占めて いるのかどうかを検定する方法である.この検定では,全体のどこかに差が存在していることを 示すだけで,具体的にどの標本とどの標本の間に差があるのか示すことは出来ない.標本間の差 を比較するには,さらに多重比較(Post-hoc test)を行う必要がある.
6−2 分散分析の種類
○一元配置:一要因で分類される多標本 要因 1 条件 A 条件 B 条件 C 条件 D X1 X2 X3 X4 X5 X6 X7 X8 ・ ・ ・ ・ ・ ・ ・ ・ ○二元配置:二要因で分類される多標本 繰り返しのない場合 要因 2 要因 1 A B C D P X11 X12 X13 X14 Q X21 X22 X23 X24 R ・ ・ ・ ・ 繰り返しのある場合 要因 2 要因 1 A B C D P X11, X12, X13, … X21, X22, X23, … X31, X32, X33, … X41, X42, X43, … Q Y11, Y 12, Y13, … Y21, Y22, Y23, … Y31, Y32, Y33, … Y41, Y42, Y43, …<例題 6−1> ある薬物を4種類のラットに投与して効果を調べたところ,以下のデータを得 た.ラットの種類によって,薬物の効果に差があるかどうか調べなさい. ラット種 効果 ラット種 効果 ラット種 効果 A 57.1 B 87.5 C 66.2 B 15.0 D 62.5 D 34.9 C 34.2 A 87.5 A 93.7 D 23.5 C 56.7 B 68.1 A 71.4 A 100 D 54.9 C 47.8 D 40.0 B 48.1 C 73.9 B 43.8 C 46.2 B 71.4 D 53.6 A 73.7 (1)「ラットの種類」という一要因で分類される標本であるので,一元配置分散分析を行う.ま ず,一元配置分散分析を行うために,データの並べ替えを行う. 要因 1 ラット A ラット B ラット C ラット D 57.1 15.0 34.2 23.5 71.4 71.4 47.8 62.5 ・ ・ ・ ・ ・ ・ ・ ・ (2)Excel の「ツール」>「分析ツール」より「分散分析:一元配置」を選択する. (3)別ウィンドウが開くので,「入力範囲」を選択する.「データの方向」を指定し,「先頭列を ラベルとして使用」にチェックを入れる.さらに,結果の出力先を選択する. (4)実行させるとすぐに結果の表が得られる.
(5)分散分析では, 帰無仮説:各グループの平均が等しい(ラット種類にかかわらず,薬効は等しい) 対立仮説:各グループの平均に差がある(ラット種類によって薬効に差がある) 分散分析表で ●「p 値」<「実験者が設定した棄却域の確率(5%)」 ●「F 境界値」<「観測された分散比」 が同時に成り立つとき,帰無仮説は棄却される. p=0.0186<0.05,かつ F 境界値=3.098<4.195(観測された分散比)なので,「ラット種 類によって薬効に差がある」ことが分かる.
6−3 分散分析で標本間に差が認められたら
分散分析で標本間に差が認められたら,どの標本とどの標本の間に差があるのかを多重比較 (Post-hoc test)によって調べる.多重比較には,Fisher’s PLSD 法,Scheffe の方法などがある.<例題6−2> ある細胞に対して3種類の試薬をそれぞれ添加して培養を行い,産生される酵 素の量を調べたところ,下表を得た. 試薬 A 試薬 B 試薬 C 9.80 2.41 0.77 9.19 2.91 1.69 7.63 1.85 1.38 8.78 1.24 1.00 6.93 1.80 1.53 6.81 3.60 0.96 7.39 1.68 0.82 8.68 2.03 1.70 問1 散布図を描きなさい. 問2 試薬の効果に差があるか,分散分析を行いなさい. ●どうして2標本 t 検定の繰り返しで多標本比較を行わないのか?
例えば,A, B, C の3グループについて,A-B, B-C, C-A という具合に2標本 t 検定を行 う.そうすると,それぞれについて危険率 5%で判定していても,全体としては危険率が 14% となり,有意差が出やすい甘い検定をしていることになる.
なぜなら,有意差が出ない確率は(1-0.05)であるが,3つの組み合わせでは(1-0.05)×(1-0.05)×(1-0.05)となる.ゆえに有意差が出る確率は 1-(1-0.05)3=0.142.
演習6
ある材料について熱処理後の伸び量(mm)を測定したところ,A 社製品 18 個,B 社製品 16 個,C 社製品 17 個に対して下表のデータを得た. 22 19 16 17 19 16 26 24 18 A 社 19 13 16 22 18 19 22 19 26 22 20 28 24 22 28 22 19 25 B 社 21 23 24 23 23 29 23 30 28 33 28 25 26 24 29 30 C 社 28 24 27 25 29 24 28 27 問1 分散分析を行い,下表を埋めなさい. 算術平均 分散 A 社製品 B 社製品 C 社製品 観測された分散比= p 値= F 境界値= 問2 製造会社によって伸び量に差はあるか?第7回 データ解析5(相関分析)
7−1 相関分析(correlation analysis)とは
2つの変数 x と y があるときに,x の変化に伴って y も変化するような関係を相関関係という. x が増えるときに y も増えるような関係を正の相関,x が増えると y が減るような関係を負の相関, どちらの傾向も見られない場合を無相関という. 2つの変数の間に相関関係があるかどうかを数値的に判断するには,相関係数という指標を用 いる.相関係数 † rは,†
-1 £ r £ 1
の値をとり,正の数のときは正の相関,負の数のときは負の相関 を意味する.相関関係の強さは,†
r
または † r2で判断し,1 に近いほど相関が強いことを意味する. 相関係数 解釈 0.00∼±0.20 相関関係は(ほとんど)ない ±0.20∼±0.40 相関関係は弱い ±0.40∼±0.70 相関関係がある ±0.70∼±0.90 強い相関関係がある ±0.90∼±1.00 極めて強い相関関係がある21
-7−2 相関係数(標本相関係数)の算出
<例題7−1> ある製品に添加する硬化剤の量(x)と製品の強度(y)を測定したところ次のような データを得た.硬化剤の量と強度との関係を散布図で視覚化しなさい.さらに両者の関係に相関 があるか,相関係数を求めて判断しなさい. 硬化剤の量 29 32 29 28 25 28 31 31 32 23 強度 50 49 46 51 44 46 52 52 51 42 硬化剤の量 29 32 27 30 29 29 30 30 32 29 強度 46 52 47 53 51 51 53 53 54 47 硬化剤の量 29 29 28 28 26 31 26 33 27 32 強度 50 53 49 46 47 53 45 48 47 48 (1)データを Excel シートに入力し, 散布図を描く. (2)散布図を見るときに注意すべき点は, ○はずれ値(飛び離れたデータ)はないか. ○2つの変数間にはどのような関係があり そうか(直線関係,曲線関係,無関係). ○グループが形成されていないか. (3)相関係数を求めるには, Excel の計算式 =correl(変数 x のデータ範囲,変数 y のデータ範囲) を用いる.実際に計算すると,r=0.681 となり,相関関係があることが分かった.7−3 母相関係数の検定
上で求めた相関係数 † rは標本の相関関係でしかなく,実際には母集団の相関係数†
r
が 0 であって 相関関係がないのかもしれない.そこで,母集団の相関係数である母相関係数†
r
が 0 と考えられ るかどうか検定が行われる(無相関の検定). <例題7−2> 上の例題7−1において母相関係数の検定を行い,(標本)相関係数の有意性を 検討しなさい. (1)仮説の設定 帰無仮説: †r
= 0(母相関係数†
r
が 0 である) 対立仮説: †r
≠ 0(母相関係数†
r
が 0 ではない) (2)有意水準†
a = 0.05
とする. (3)検定統計量t =
r n - 2
1- r
2 硬化剤の量と強度の関係 40 42 44 46 48 50 52 54 56 58 60 20 25 30 35 硬化剤の量 強度ここで, † r:標本の相関係数, † n:標本数 (4)このとき有意確率 p は Excel によって p=tdist(abs(t), n-2, 2) で計算できる. 実際に計算すると,t=5.961,p=2.029×10-6<0.05 であるので,帰無仮説を棄却.つま り,母相関係数
†
r
が 0 ではないことが分かる. <例題7−3> 例題3−1で,鼓膜温度と直腸温度を同時に測定したデータを示した.相関係 数の算出と母相関係数の検定を行い,両者の温度に相関があるかどうか判別しなさい. 鼓膜温度(℃) 37.1 35.1 35.5 34.9 35.4 37.0 35.0 35.4 35.2 35.8 直腸温度(℃) 37.6 35.8 36.4 35.4 36.0 37.3 35.7 36.3 35.9 36.5演習7
ある化学反応において,素材量と生成量の関係を 20 回測定したところ,以下のデータを得た.散 布図を描いた後,相関係数の算出と母相関係数の検定を行い,素材量と生成量に相関があるかど うか判別しなさい. 素材量 200 1000 1420 230 1097 1760 660 370 1050 922 生成量 200 600 900 400 1200 1040 400 400 400 800 素材量 500 60 638 1800 300 868 1220 389 400 1760 生成量 600 250 720 1200 360 360 760 240 600 1040 相関係数 r= 検定統計量 t= 有意確率 p 値= したがって,素材量と生成量には,第8回 データ解析6(回帰分析)
8−1 回帰分析(regression analysis)とは
前節では,2つの変数 x と y の関係(相関)を分析した.2変数の間に関係があることが分かっ たならば,具体的にどんな関係があるのか知りたくなる. 回帰分析では,変数 x と y の関係を示す式を求めることができる.言い換えると,ある変数 x (説明変数または独立変数と呼ぶ)からある変数 y(目的変数または従属変数と呼ぶ)を予測する 回帰関数を求め,回帰が有意であるか,この回帰関数がよく当てはまっているかを検定する方法 である.8−2 回帰式の算出
<例題8−1> 例題7−1で,ある製品に添加する硬化剤の量(x)と製品の強度(y)を測定したと ころ次のようなデータを得た.硬化剤の量と強度との関係を示す回帰式を求め,その信頼度を吟 味しなさい. 硬化剤の量 29 32 29 28 25 28 31 31 32 23 強度 50 49 46 51 44 46 52 52 51 42 硬化剤の量 29 32 27 30 29 29 30 30 32 29 強度 46 52 47 53 51 51 53 53 54 47 硬化剤の量 29 29 28 28 26 31 26 33 27 32 強度 50 53 49 46 47 53 45 48 47 48 (1)データを Excel シートに入力し, 散布図を描く. (2)1次式で回帰できそうなので,回帰関数を † y = ax + b とおく. (3)最小二乗法を使ってデータに最もよく当て はまる直線を算出するには,Excel の計算式 =linest(既知の y,既知の x,定数項の選択,補正項の設定) を用いる.ここで, 定数項の選択:「true」のとき y 切片 b が計算される.「false」のとき b=0 となる. 補正項の選択:「true」のとき回帰直線の種々の補正項が計算される.「false」のときは a と b の計算のみ. 「linest」による計算結果は次のような配列で返される. 1 2 1 回帰係数 a 定数項 b 2 回帰係数の標準誤差 定数項の標準誤差 3 寄与率 r2 4 回帰式の F 値 自由度 5 回帰の平方和 残差の平方和 硬化剤の量と強度の関係 40 42 44 46 48 50 52 54 56 58 60 20 25 30 35 硬化剤の量 強度 列番号 行 番 号
(4)得られた配列から,各要素の値を表示させるためには, Excel の計算式 =index(配列,行番号,列番号) を用いる.つまり,
a = index(linest(既知の y,既知の x,true, true), 1, 1) = 0.928 b = index(linest(既知の y,既知の x,true, true), 1, 2) = 22.1
(5)相関係数 r2は,
r2 = index(linest(既知の y,既知の x,true, true), 3, 1) = 0.463
(6)回帰分析で得た方程式が統計的に有意であるかどうか,F 検定によって検定することがで きる.
F の観測値は,「linest」による計算結果から,
F = index(linest(既知の y,既知の x,true, true), 4, 1) = 24.199 一方,有意水準 0.05 としたとき,F の棄却値は, Excel の計算式 =finv(0.05,k,n-(k+1)) ここに, k:回帰分析を行った変数の個数 n:標本数 つまり,finv(0.05, 1, 18)=4.413 F の観測値 > F の棄却値 のとき,回帰式は統計的に意味があると判断する. <例題8−2> 例題7−3で,鼓膜温度と直腸温度を同時に測定したデータについて相関分析 を行った.このデータを用いて回帰分析を行い,回帰関数を求めなさい.さらに,この方程式が 統計的に有意であるかどうか,検定しなさい. 鼓膜温度(℃) 37.1 35.1 35.5 34.9 35.4 37.0 35.0 35.4 35.2 35.8 直腸温度(℃) 37.6 35.8 36.4 35.4 36.0 37.3 35.7 36.3 35.9 36.5
8−3 多項式への回帰式
前節では Excel 関数を用いて1次式への回帰を行った.2次以上の多項式への回帰も同様にし て行うことができる.しかしながら,Excel にはグラフ描画の際に直線や曲線を当てはめる機能が あり,これを使う方が簡便である. <例題8−3> 例題8−1のデータを,2次式,3次式でそれぞれ回帰し,その方程式と相関 係数 r2を求めなさい.演習8
ある化学反応において,素材量と生成量の関係を 20 回測定したところ,以下のデータを得た.素 材量と生成量との関係を示す回帰式を求め,その方程式が統計的に有意であるかどうか吟味しな さい.(回帰式の次数は各自で判断すること). 素材量 200 1000 1420 230 1097 1760 660 370 1050 922 生成量 200 600 900 400 1200 1040 400 400 400 800 素材量 500 60 638 1800 300 868 1220 389 400 1760 生成量 600 250 720 1200 360 360 760 240 600 1040 回帰式: 相関係数(寄与率)r2= F の観測値= F の棄却値= したがって,得られた回帰式は,第9回 中間試験と解説
●最小二乗法とは? データ群(xi, yi)に対して y=ax+b という直線を当てはめるとき,この直線と各データ との距離Δyi=(axi+b)-yiを考える.この距離を二乗したものの和,つまり†
S = ax
{
(
1+ b
)
- y
1}
2+ ax
{
(
2+ b
)
- y
2}
2+ ax
{
(
3+ b
)
- y
3}
2+
L
=
{
(
ax
i+ b
)
- y
i}
iÂ
2 が最小になるように a と b を決めてやれば,y=ax+b という直線はできる限り各データの 近くに位置していることになる.このようにして回帰する方法を最小二乗法という.2次 式以上の多項式で回帰する場合も同様である.第 10 回 数値計算1(C言語の基礎)
10ー1 プログラミング言語
プログラミング言語とは,コンピュータに仕事をさせるための作業手順書である.その作業の 目的に合わせて,事務処理用(COBOL),科学技術用(FORTRAN, BASIC, Pascal),システム記 述用(C),記号処理用(LIPS, PROLOG)など,種々のプログラミング言語が開発されている.
10−2 C言語の特徴
○C言語の命令はハードウェアに近い,比較的低レベルの機能を持っている. ○プログラムの構造が関数を基本とした集合体であり,プログラムは関数の集合として作成で きる. ○ファイル入出力,文字列操作,算術演算などの機能を,ひとつの関数として扱える.10−3 C言語の復習
<例題 10−1> 自分の名前を画面に表示させるプログラム. <例題 10−2> 整数「9」と実数「9.80665」をそれぞれ画面に表示させるプログラム. <例題 10−3> 整数の入力を求め,それを画面に表示させるプログラム. <例題 10−4> 2つの整数の入力を求め,その和を画面に表示させるプログラム. <例題 10−5> 例題9−4で,和を求める計算を外部関数 int extern_sum()に行わせてみる. <例題 10−6> 2つの実数の入力を求め,その実数を解とする2次方程式を画面に表示させる プログラム. <例題 10−7> 2つの実数の入力を求め,その実数を階とする2次方程式を画面に表示させた 後,解の公式を用いて2つの実数解を求めるプログラム. printf 関数 printf(“出力したい文字など”) printf 関数 printf(“出力したい数字の書式”, 出力したい変数の名前) %d :整数型を10 進数で出力 %f :実数型.表示桁数はf の前の数字で指定. scanf 関数 scanf(“入力したい数字の書式”, 出力したい変数を示すポインタ)●例題 10−1 #include<stdio.h> void main() { printf("Kosaku Kurata"); } ●例題 10−4 #include<stdio.h> void main() { int a, b, sum; printf("a = ? "); scanf("%d", &a); printf("b = ? "); scanf("%d", &b); sum=a+b; printf("a+b= %d¥n", sum); } ●例題 10−2 #include<stdio.h> void main() { int a; float b; a=9; b=9.80665; printf("%d¥n", a); printf("%f¥n", b); } ●例題 10−3 #include<stdio.h> void main() { int a;
printf("Input your favorite integer!¥n"); scanf("%d", &a);
printf("Your favorite integer is %d.¥n",a); } ●例題 10−5 #include<stdio.h> int a, b; int extern_sum(); void main() { int sum; printf("a = ? "); scanf("%d", &a); printf("b = ? "); scanf("%d", &b); sum=extern_sum(); printf("a+b= %d¥n", sum); } int extern_sum() { int wa; wa=a+b; return(wa); } ●例題 10−6 #include<stdio.h> void main() { float x1, x2, b, c; printf("x1 = ? "); scanf("%f", &x1); printf("x2 = ? "); scanf("%f", &x2); b=-x1-x2; c=-x1*(-x2); printf("ax^2+bx+c=0¥n"); printf("(a, b, c)=(1.0, %f, %f)¥n", b, c); } ●例題 10−7 #include<stdio.h> #include<math.h> void main() { float x1, x2, b, c; float kai1, kai2; printf("x1 = ? "); scanf("%f", &x1); printf("x2 = ? "); scanf("%f", &x2); b=-x1-x2; c=-x1*(-x2); printf("ax^2+bx+c=0¥n"); printf("(a, b, c)=(1.0, %f, %f)¥n", b, c); kai1=(-b+sqrt(b*b-4.0*1.0*c))/2.0; kai2=(-b-sqrt(b*b-4.0*1.0*c))/2.0; printf("kai1 = %f¥n", kai1); printf("kai2 = %f¥n", kai2); }
演習 10
次のC言語プログラムはどのようなことを行うか,答えなさい.第 11 回 数値計算2(統計量の計算)
11ー1 配列にデータを格納する
普通,ひとつの変数にはひとつのデータを入れることしかできない.例えば, int data; data=8; と書けば,data という名前の整数型の変数に 8 が格納されたことになる. 一方,配列を使えば,ひとつの名前の変数に複数のデータを格納することができる.例えば, int data[10]; では,data という名前の整数型の配列が準備されたことを意味する.データの格納場所は 0∼9 の 10 個,つまり data[0]∼data[9]までということになる. 配列にあらかじめデータを格納しておくには, data[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; のように書く. <例題 11−1> 配列に格納された整数を「配列番号:データ」の形で画面に表示させるプログ ラム. <例題 11−2> 1 から 10 までの数字を配列に格納し,さらにこれを「配列番号:データ」の 形で順番に画面に表示させるプログラム. <例題 11−3> 配列に格納された整数の和を計算して画面に表示させるプログラム. #include<stdio.h> void main() { int i, sum; sum=0; for(i=1;i<=10;i++) { sum=sum+i; } printf("%d¥n", sum); } #include<stdio.h> void main() { int i, sum; sum=0; for(i=1;i<=100;i++) { sum=sum+i; if(sum>1000) break; } printf("%d¥n", i); }29 -<例題 11−4> 例題3−2で,高齢者8人の血圧を午前と午後に測定したところ,次のような データが得られた.午前の血圧データを配列 data_am[8]として準備し,算術平均を計算・画面表 示するプログラムを作りなさい.さらに,相乗平均,調和平均を計算・画面表示するプログラム を追加しなさい. ○算術平均:最も一般的な平均値
†
x =
x
i i nÂ
n
○相乗平均†
x
1x
2x
3x
4⋅ ⋅ ⋅ x
n n ○調和平均†
n
1
x
1+
1
x
2+
1
x
3+ ⋅ ⋅ ⋅ +
1
x
n参考:べき乗関数 pow(x, y) x の y 乗を計算して double 型の値を返す.
患者番号 1 2 3 4 5 6 7 8 午前の血圧 182 169 173 143 158 156 176 165 午後の血圧 163 142 174 137 151 143 180 162 ●例題 11−1 #include<stdio.h> #include<math.h> #include<conio.h> void main() { int i; int data[10]={10,9,8,7,6,5,4,3,2,1}; getch();
for(i=0; i<10; i++) { printf("%d : %d¥n", i, data[i]); } } ●例題 11−2 #include<stdio.h> #include<math.h> #include<conio.h> void main() { int i; int data[10]; getch();
for(i=0; i<10; i++) {
data[i]=i+1; }
for(i=0; i<10; i++) {
printf("%d : %d¥n", i, data[i]); }
演習 11
例題3−2で,高齢者8人の血圧を午前と午後に測定したところ,下表のようなデータが得られ た.午後の血圧データを配列 data_pm[8]として準備し,算術平均,不偏分散,標準偏差を計算・ 画面表示するプログラムを作りなさい. ○算術平均:†
x =
x
i i nÂ
n
○不偏分散:†
(x
i- x
m)
2Â
n -1
○標準偏差: † (xi- xm) 2Â
n -1 患者番号 1 2 3 4 5 6 7 8 午前の血圧 182 169 173 143 158 156 176 165 午後の血圧 163 142 174 137 151 143 180 162第 12 回 数値計算3(二分法)
12ー1 二分法とは
方程式がある区間で根を1つだけ持つことが分かっている場合に,その近似値を求める最も簡 単な方法. ●例題 11−3 #include<stdio.h> #include<math.h> #include<conio.h> void main() { int i, sum; int data[10]={1,2,3,4,5,6,7,8,9,10}; getch(); sum=0;for(i=0; i<10; i++) {
sum=sum+data[i]; }
printf("%d ¥n", sum); }
12ー2 二分法による近似解の算出
方程式 f(x)=0 が,ある区間で x=x1という根を1つだけ持つと 仮定する.このとき,y=f(x)のグラフを考えると,右図のように なる.関数 y=f(x)はx軸と x=x1で交わり,前後では符号が逆転 する.この符号の逆転という性質を利用して,符号の反転する 2点を限りなく狭めていけば,方程式 f(x)=0 の近似解を求める ことができる. 具体的に,二分法では,x 軸上の点 a と b の中点 c において 関数値 f(c)を求め,f(a)と f(b)と符号の比較を行いながら根のあ る区間を狭めていく.右図で,方程式の根 x=x1は区間 x=a と x=b に挟まれているので,関数 y=f(x)の値は x=a, b に
おいて必ず異符号になる.つまり, f(a)f(b)<0 次に2点の中点 c=(a+b)/2 において関数値 f(c)を求め,f(a)と の積を考える. f(a)f(c)<0 のとき,根 x=x1は点 a と点 c の間に存在 f(a)f(c)>0 のとき,根 x=x1は点 b と点 c の間に存在 よって,f(a)f(c)<0 のときは,点 c を新しく b と置いて,操作を 繰り返す.また,f(a)f(c)>0 のときは,点 c を新しく a と置いて, 操作を繰り返す. この操作を繰り返せば,点 a と b の中点 c は,根 x=x1に限りなく近づくことになる.しかしな がら,完全に一致することはない.そこで,ある誤差範囲で計算を打ち切って,そのときの c の 値を近似解とする.その判別は点 a と b の差|a-b|と誤差範囲eとの比較で行う.つまり, |a-b|< e となったとき,計算を終了する.
12ー3 二分法による計算の注意点
○根が1つだけ存在する領域をあらかじめ確認し,2つの出発点 a,b を決定しなければならない. ○2点 a,b の間に根がなければ,解を得ることはできない. ○2点 a,b の間に複数の根があっても,1つの根しか得ることはできない.12ー4 二分法のプログラム
a=0.0,b=1.0,e=0.0001 として,x3+x-1=0 の根を求めるプログラムを計算操作の順を追って 作成する. (1)まず,C言語プログラムの体裁を整え,a,b,e(EPS)の各変数を宣言する.(2)関数 y=f(x)に値を代入する部分は外部関数とする.Main 文の後に,外部関数 double fy(double x)として,x を代入計算して返してくれるような関数を作る.
べき乗は pow(x, 3.0)とすれば,x3が計算される.
(3)Main 文の中で,fy(a)fy(c)を計算し,符号によって fy(a)fy(c)<0 ならば点 c を新しく b と置 き,f(a)f(c)>0 ならば点 c を新しく a と置くプログラムを書く(if-else 文を使う).
(4)(3)を|a-b|> eps の間,実行し続けるようにする(do-while 文を使う.絶対値の計算 は fabs(a-b)を用いる). (5)do-while 文を抜けたら,c の値を解として画面表示させる.
演習 12
二分法を用いて,方程式 † x2 ln x = 1の解を求めなさい. <ヒント> 1.この方程式を解くには,†
y = x
2ln x -1
を考えればよい. 2.「†
ln
」は底が e の対数つまり自然対数であり,C言語では log(double 型の数値) によって,double 型の値が返される. 3.区間 a,b を求めるには,おおよそのグラフの形を知る必要がある.それには MS Excel を用 いればよい.例えば,1列目に x の値として 0.0 から 5.0 までの値を入力し,2列目で†
y = x
2ln x -1
の計算を行う.X と y の関係は,おおよそどのようなグラフになるだろうか? <解答> a= ,b= と置いて計算した結果,x= の解を得た. #include<stdio.h> #include<math.h> #include<conio.h> void main() { double a, b, c; double eps; a=0.0; b=1.0; eps=0.0001; } double fy(double x) { double y; y=pow(x, 3.0)+x-1.0; return(y); }第 13回 数値計算4(ニュートン法)
13ー1 ニュートン法とは
関数上の1点とその接線を用いて根に近づいていくことで,方程式の近似値を求める方法.二 分法に比べて少ない計算回数で近似解を得ることができる.13ー2 ニュートン法による近似解の算出
方程式 f(x)=0 が,ある区間で x=x1 という根を1つだけ 持つと仮定する.このとき,y=f(x)のグラフを考えると, 右図のようになる.x 軸上の出発点 x=a を考え,関数 y=f(x) 上の点 A(a, f(a))で接線を引く.この接線とx軸との交 点 b を求めると,この b は方程式の根 x=x1に近づいてい ることが分かる.この操作を繰り返していけば,方程式 f(x)=0 の近似解を求めることができる. 具体的に,ニュートン法では,まず x 軸上の点 a を決め る.次に点 A(a, f(a))における接線を考える.接線の傾きは,f’(a)となるので,接線の方程式は y-f(a)=f’(a)(x-a) となる.この接線と x 軸との交点 b を求めると, (a-f(a)/f’(a), 0) である. このようにして求めた点 b の座標 x=a-f(a)/f’(a)を新しい点 a として,以上の操作を繰り返せば, 点 a は,根 x=x1に限りなく近づくことになる.しかしながら,完全に一致することはない.そこ で,ある誤差範囲で計算を打ち切って,そのときの b の値を近似解とする.その判別は点 a と b の差|a-b|と誤差範囲eとの比較で行う.つまり, |a-b|< e となったとき,計算を終了する.13ー3 ニュートン法による計算の注意点
○関数 f(x)が単調増加,あるいは単調減少している領域 内で有効な手法である. ○正と負の曲率をもつような関数では,解が発散してし まうことがある. ○関数の形状をあらかじめ調べて,最適な出発点 a を決 定する必要がある.34
-13ー4 ニュートン法のプログラム
a=1.0,e=0.0001 として,x3+x-1=0 の根を求めるプログラムを計算操作の順を追って作成す る. (1)まず,C言語プログラムの体裁を整え,a,e(EPS)の各変数を宣言する. (2)関数 y=f(x)および y’=f’(x)に値を代入する部分は外部関数とする.Main 文の後に,外部関 数 double fy(double x),double dfy(double x)として,x を代入計算して返してくれるような2 つの関数を作る.べき乗は pow(x, 3.0)とすれば,x3が計算される.
(3)Main 文の中で,b=a-f(a)/f’(a)を計算する.|a-b|> eps ならば点 b を新しく a と置く(if 文を使う).
(4)(3)を繰り返し実行し続けるようにする(do-while 文を使う.do-while(1)で無限ループ となる).
(5)|a-b|> eps でなくなったら,do-while 文を break し,b の値を解として画面表示させる.
演習 13
ニュートン法を用いて,方程式 † 3x4 + x2- 25 = 0の解を求めなさい. <ヒント> #include<stdio.h> #include<math.h> #include<conio.h> void main() { double a; double eps; a=1.0; eps=0.0001; } double fy(double x) { double y; y=pow(x, 3.0)+x-1.0; return(y); } double dfy(double x) { double y; y=3.0*pow(x, 2.0)+1.0; return(y); }1.この方程式を解くには,
†
y = 3x
4+ x
2- 25
を考えればよい. 2.y=f(x)と y’=f’(x)を求める関数をあらかじめ外部関数として用意しておく. 3.出発点 a を求めるには,おおよそのグラフの形を知る必要がある.それには MS Excel を用 いればよい.例えば,1列目に x の値として 0.0 から 5.0 までの値を入力し,2列目で†
y = 3x
4+ x
2- 25
の計算を行う.x と y の関係は,おおよそどのようなグラフになるだろうか? <解答> a= と置いて計算した結果,x= の解を得た.第 14 回 数値計算5(最小二乗法)
14ー1 最小二乗法とは
実験値のような誤差を含むデータの集合から最も確 からしい関係を推論する方法.14ー2 最小二乗法による回帰曲線の算出
右図のようなデータ群から最も確からしい関係 y=f(x) を求めることを考えるとき,y=f(x)のような曲線を回帰 曲線と呼ぶ. この回帰曲線の次数は自由に選ぶことができる.現 象が一次の線形関係であることが分かっていれば,デー タ群から最も近い直線の方程式を求めればよい.二次 以上の高次方程式の場合も同様である. 簡単のために,右のような4点を近似する最も確からし い直線を求めてみる. 求める直線を y=ax+b とおくとき,データ群(xi, yi)に対してこの直線と各データとの距離Δyi=(axi+b)-yiを考え
る.この距離を二乗したものの和,つまり
†
S = ax
{
(
1+ b
)
- y
1}
2+ ax
{
(
2+ b
)
- y
2}
2+ ax
{
(
3+ b
)
- y
3}
2+ ax
{
(
4+ b
)
- y
4}
2 が最小になるように a と b を決めてやれば,y=ax+b という直線はできる限り各データの近くに 位置していることになる. 二乗和を最小にする条件は,S を a と b でそれぞれ偏微分したものがゼロであることである.つまり,