こんにちは、ソフト班Shinpukuです。
指数近似のプログラム書きましたよ。
#include <stdio.h>
#include <math.h>
#define DATA_NUM 17
int main(void)
{
//距離
double distance[DATA_NUM] = {0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.5,
2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5};
// 中心からのピクセル数
double pixels[DATA_NUM] = {21, 27, 31, 37, 42, 44, 46, 50, 62, 68, 74,
76, 80, 82, 84, 84, 86};
double X[DATA_NUM], Y[DATA_NUM];
double sumX, sumX2;
double sumY, sumXY;
// XとY初期化
for (int i = 0; i < DATA_NUM; i++) {
X[i] = pixels[i];
Y[i] = log(distance[i]);
}
// Σたち
sumX = sumX2 = sumY = sumXY = 0;
for (int i = 0; i < DATA_NUM; i++) {
sumX += X[i];
sumX2 += X[i]*X[i];
sumY += Y[i];
sumXY += X[i]*Y[i];
}
// 最小2乗計算
double A1 = (sumX*sumY - DATA_NUM*sumXY)/
(sumX*sumX - DATA_NUM*sumX2);
double A0 = (-sumX2*sumY + sumX*sumXY)/
(sumX*sumX - DATA_NUM*sumX2);
double alpha = exp(A0);
double beta = A1;
printf("alpha = %f\n", alpha);
printf("beta = %f\n", beta);
return 0;
}
α=0.122702
β=0.042482
と出て、
x=中心からのピクセル数
y = α * exp(β * x)
で距離yが出ます。
0 件のコメント:
コメントを投稿