2009/02/08

距離校正はつらいよ(3)

こんにちは、ソフト班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 件のコメント: