求まるので,未測定点の予測ができること.また(M3)現象が比較的単純であれば,現象を支配 する原理の式が分かることである. Fig.1 には五つの測定データがプロットさ れており,これらは 1 次の関係,𝑦 = 𝐴𝑥 + 𝐵 のように見える.最小 2 乗法を使うと,式の パラメータ A と B が求められる.オレンジ 色の線は最小 2 乗法で求めた実験式である. データとよく一致していることが分かる. 次に Fig.2 には五つの測定データがプロッ トされており,これらは指数の関係, 𝑦 = 𝐴𝑒𝐵𝑥 のように見える.最小 2 乗法を使 うと,式のパラメータ A と B が求められる. オレンジ色の線がその実験式である.これ もデータとよく一致していることが分かる. n 個のデータの組,(xi, yi)(ただし i = 1, 2, 3, ..., n)から近似式のパラメータを最小 2 乗法で求められる.式の型はデータの分布 の状況によって選択する必要がある.本資 料では線形型,指数型および多項式型につ いて扱う. 2 線形型: y=Ax+B 型 n 個のデータの組,(xi, yi)(ただし i = 1, 2, 3, ..., n)からパラメータ A と B を求める.まず式の定義を行う. 𝑦 = 𝑓(𝑥) ≡ 𝐴𝑥 + 𝐵 この式の右辺を左辺へ移行すると, 𝑦 − (𝐴𝑥 + 𝐵) = 0 この式は数学的に正しい. 次にこの式にデータを代入した式について考えてみる.A と B を求めるためには少なくとも 2 回分のデータが必要となる.つまり i = 1, 2 の時のデータ(x1, x2), (y1, y2)があれば,連立さ せて A と B が求まる.
0
0.0005
0.001
0.0015
0
1
2
3
4
5
Ix(A) V x( V ) Fig. 1 Vx vs. Ix.1
2
0.01
0.02
0.03
0.04
0.05
0
V(V) If(A) Fig.2 If vs. V.{𝑦1− (𝐴𝑥1+ 𝐵) = 0 𝑦2− (𝐴𝑥2+ 𝐵) = 0 → A, B 次にその A,B と i = 3 のデータ,(x3, y3)で式を表すと,ほとんどの場合で次式のようになる. 𝑦3− (𝐴𝑥3+ 𝐵) ≠ 0 右辺が 0 でないことに注意.これは y iと x iのデータには測定誤差が含まれることによる.上の 式で 0 にならない分を残差 Siとして定義する. 𝑆𝑖≡ 𝑦𝑖− (𝐴𝑥𝑖+ 𝐵) = 𝑦𝑖− 𝑓(𝑥𝑖) ≠ 0 Siの 2 乗和 S は, 𝑆 = ∑[𝑦𝑖− 𝑓(𝑥𝑖)]2= 𝑛 𝑖=1 ∑[𝑦𝑖− 𝐴𝑥𝑖− 𝐵]2 𝑛 𝑖=1 Σ は全てのデータを対象とする意味である.上の式は A と B についての 2 次式であり,それらの次数 は最高で 2 である.A と B を変化させたとき,S が極小,つまり誤差が最小となるためには次式を満足す ればよい. ∂𝑆 ∂𝐴= 0, ∂𝑆 ∂𝐵= 0 これらを計算すると,次が得られる. { 𝐴 ∑ 𝑥𝑖+ 𝑛𝐵 = ∑ 𝑦𝑖 𝑛 𝑖=1 𝑛 𝑖=1 𝐴 ∑ 𝑥𝑖2+ 𝐵 ∑ 𝑥𝑖 𝑛 𝑖=1 = ∑ 𝑥𝑖𝑦𝑖 𝑛 𝑖=1 𝑛 𝑖=1 または [ ∑ 𝑥𝑖 𝑛 𝑖=1 𝑛 ∑ 𝑥𝑖2 𝑛 𝑖=1 ∑ 𝑥𝑖 𝑛 𝑖=1 ] [𝐴 𝐵] = [ ∑ 𝑦𝑖 𝑛 𝑖=1 ∑ 𝑥𝑖𝑦𝑖 𝑛 𝑖=1 ] 上の式は正規方程式(normal equation)と呼ばれる.上を連立させて A と B を求めると, 𝐴 = 𝑆1− 𝑥̅ 𝑦̅ 𝑆2− (𝑥̅)2 , 𝐵 =𝑦̅ 𝑆2− 𝑥̅𝑆1 𝑆2− (𝑥̅)2 ただし, 𝑆1= 1 𝑛∑ 𝑥𝑖 𝑛 𝑖=1 𝑦𝑖, 𝑆2= 1 𝑛∑ 𝑥𝑖 2, 𝑥̅ =1 𝑛∑ 𝑥𝑖 𝑛 𝑖=1 , 𝑛 𝑖=1 𝑦̅ =1 𝑛∑ 𝑦𝑖 𝑛 𝑖=1 である.このようにして,xi と yiのデータからパラメータ A と B が求められる.
例 1:半導体試料に電流 Ixを流したとき,端子間の電圧 Vxを測定した(Table 1).データをグ ラフにプロットしたとき,プロット点間を通るような 1 次式,𝑦 = 𝐴𝑥 + 𝐵を最小 2 乗法で 求めよ. Table 1. Ix (mA) 0.50 0.75 1.00 1.25 1.50 Vx (v) 1.4174 2.1204 2.8042 3.5164 4.2159 xi = Ii, yi = Vi とすると, 𝑆1= 1 𝑛∑ 𝑥𝑖 𝑛 𝑖=1 𝑦𝑖= 1 5(0.5 × 1.4174 + 0.75 × 2.1204 + 1.0 × 2.8042 + 1.25 × 3.5164 + 1.5 × 4.2159) = 3.165 𝑆2= 1 𝑛∑ 𝑥𝑖 2 𝑛 𝑖=1 = 1.125, 𝑥̅ =1 𝑛∑ 𝑥𝑖 𝑛 𝑖=1 = 1.000, 𝑦̅ =1 𝑛∑ 𝑦𝑖 𝑛 𝑖=1 = 2.815 A = 𝑆1− 𝑥̅ 𝑦̅ 𝑆2− (𝑥̅)2 = 2.797, B =𝑦̅ 𝑆2− 𝑥̅𝑆1 𝑆2− (𝑥̅)2 = 0.01766 測定した IX の単位は mA であるので,2.797 を 1000 倍して A とする.式は y=2797x+0.01766 である.式を Fig. 1 に,またこのプログラムを次に示す.
/* Least Mean Square */ /* type: f(x)=Ax+B */ #include<stdio.h> #include<math.h> #define NUMBER_OF_DATA 5 int main() { struct element { float x; float y; } data[(int)NUMBER_OF_DATA] = { {0.50e-3, 1.4174}, {0.75e-3, 2.1204}, {1.00e-3, 2.8042}, {1.25e-3, 3.5164}, {1.50e-3, 4.2159}, }; int i, n;
float sum1, sum2, mx, my, x[(int)NUMBER_OF_DATA], y[(int)NUMBER_OF_DATA], a, b; char d;
n = (int)NUMBER_OF_DATA; sum1 = sum2 = mx = my = 0; for(i=0; i<n; i++) {
sum1 += data[i].x * data[i].y; sum2 += data[i].x * data[i].x; mx += data[i].x;
my += data[i].y; } sum1 /= n; sum2 /= n; mx /= n; my /= n;
a= (sum1 - mx * my) / (sum2 - mx * mx); b= (my * sum2 - mx * sum1) / (sum2 - mx * mx); printf("y=%fx+%f¥n", a, b); d=getchar(); } 実行結果 問題 1(5 点) Table Q1 のデータによる式,𝑦 = 𝐴𝑥 + 𝐵を最小 2 乗法で求めよ.またエクセルで散布図のグラ フを作成せよ.グラフには Table Q1 のデータのプロット点と求めた式による直線を合わせて表 示すること(例 Fig. 1).直線は
X
i = 0, 0.1, …, 10 のときのY
iを求めた式で計算し,それらの
関係を小さな点で散布図として表現すればよい. Table Q1. Xi 0.0 2.0 4.0 6.0 8.0 10.0 Yi 1.0 3.0 5.0 7.0 9.0 11.0 3 指数型: y = A e B x型 n 個のデータの組,(xi, yi)(ただし i = 1, 2, 3, ..., n)からパラメータ A と B を求める.まず 式の定義を行う. 𝑦 = 𝑓(𝑥) ≡ 𝐴𝑒𝐵𝑥 この式の自然対数をとると, 𝑙𝑛 𝑦 = 𝑙𝑛 𝑓(𝑥) = 𝑙𝑛 𝐴 + 𝐵𝑥 (e を底とした時は ln,10 を底とした時は log とする)上の式を F(x) = ln f (x), C = ln A で置き かえると, 𝐹(𝑥) = 𝐶 + 𝐵𝑥 これは 1 次関数式であるので,前述の y=Ax+B 型と同様に扱える. 残差 Siは次のとおり.𝑆𝑖≡ 𝑦𝑖− 𝑓(𝑥𝑖) ≠ 0 Siの 2 乗和 S は, 𝑆 = ∑[𝑙𝑛 𝑦𝑖− (𝐶 + 𝐵𝑥𝑖)]2 𝑛 𝑖=1 上の式は B と C についての 2 次式であり,それらの次数は最高で 2 である.B と C を変化させた とき,S が極小,つまり誤差が最小になるためには次式を満足すればよい. ∂𝑆 ∂𝐵= 0, ∂𝑆 ∂𝐶= 0 これを計算すると,正規方程式は次のようになる. [𝑛 𝑥̅𝑖 𝑥̅𝑖 𝑥̅̅̅] [𝑖2 𝐶 𝐵] = [ 𝑙𝑛 𝑦 ̅̅̅̅̅ 𝑥 𝑙𝑛 𝑦 ̅̅̅̅̅̅̅] 次に上を連立させて,B と C を求めると, 𝐵 =𝑆1− 𝑥̅ 𝑙𝑛 𝑦̅̅̅̅̅ 𝑆2− (𝑥̅)2 , 𝐶 =𝑙𝑛 𝑦̅ 𝑆2− 𝑥̅𝑆1 𝑆2− (𝑥̅)2 である.ただし, 𝑆1= 1 𝑛∑ 𝑥𝑖 𝑛 𝑖=1 𝑙𝑛 𝑦𝑖, 𝑆2= 1 𝑛∑ 𝑥𝑖 2 𝑛 𝑖=1 , 𝑥̅ =1 𝑛∑ 𝑥𝑖 𝑛 𝑖=1 , 𝑙𝑛 𝑦̅̅̅̅̅ =1 𝑛∑ 𝑙𝑛 𝑦𝑖 𝑛 𝑖=1 , 𝐴 = 𝑒𝐶 である.このようにして,xi と yiのデータからパラメータ A と B が求められる. 例 2: Ge ダイオードの特性,電圧 V に対する順方向電流 Ifを測定した(Table 2).データを グラフにプロットしたとき,プロット点間を通るような指数関数の式,𝑦 = 𝐴𝑒𝐵𝑥を最小 2 乗法で求めよ. Table 2. V (V) 0.280 1.000 1.500 2.000 2.200 If (A) 0.001 0.004 0.012 0.033 0.050 xi = Vi , yi = If とすると, 𝑆1= 1 𝑛∑ 𝑥𝑖 𝑛 𝑖=1 𝑙𝑛 𝑦𝑖 =1 5(0.28 × 𝑙𝑛(0.001) + 1.00 × 𝑙𝑛(0.004) + 1.50 × 𝑙𝑛(0.012) + 2.00 × 𝑙𝑛(0.033) + 2.20 × 𝑙𝑛(0.050)) = −5.501 𝑆2= 1 𝑛∑ 𝑥𝑖 2 𝑛 𝑖=1 = 2.434, 𝑥̅ =1 𝑛∑ xi 𝑛 𝑖=1 = 1.396, 𝑙𝑛 𝑦̅̅̅̅̅ =1 𝑛∑ 𝑙𝑛 𝑦𝑖= −4.652 𝑛 𝑖=1 とすると,
𝐵 =𝑆1− 𝑥̅ 𝑙𝑛 𝑦̅̅̅̅̅ 𝑆2− (𝑥̅)2 = 2.049, 𝐶 =𝑙𝑛 𝑦̅ 𝑆2− 𝑥̅𝑆1 𝑆2− (𝑥̅)2 = −7.512, 𝐴 = 𝑒𝐶 = 5.466 × 10−4 従って式は y=5.47×10 -4 e 2.05 xである.式を Fig. 2 に,またこのプログラムを次に示す.
/* Least Mean Square */
/* type: f(x)=Aexp(Bx) */
#include<stdio.h>
#include<math.h>
#define NUMBER_OF_DATA 5
int main()
{
struct element {
float x;
float y;
} data[(int)NUMBER_OF_DATA] = {
{0.28, 0.001},
{1.0, 0.004},
{1.5, 0.012},
{2.0, 0.033},
{2.2, 0.050}
};
int i, n;
float sum1, sum2, mx, my, a, b;
char d;
n = (int)NUMBER_OF_DATA;
sum1 = sum2 = mx = my = 0;
for(i=0; i<n; i++) {
data[i].y = log(data[i].y);
sum1 += data[i].x * data[i].y;
sum2 += data[i].x * data[i].x;
mx += data[i].x;
my += data[i].y;
}
sum1 /= n;
sum2 /= n;
mx /= n;
my /= n;
a= (sum2 * my - sum1 * mx) / (sum2 - mx * mx);
a = exp(a);
b= (sum1 - my * mx) / (sum2 - mx * mx);
printf("y=Aexp(Bx)\n");
printf("A=%e, B=%e\n",a, b);
d=getchar();
}
実行結果問題 2(5 点) Table Q2 のデータによる式,𝑦 = 𝐴𝑒𝐵𝑥を最小 2 乗法で求めよ.またエクセルで散布図のグラフ を作成せよ.グラフには Table Q2 のデータのプロット点と求めた式による曲線を合わせて表示 すること(例 Fig. 2).曲線は