PHP İnterpolasyon

0 Cevap php

Ben JPGraph yılında ContourPlot fonksiyonu kullanarak için ayarlanmış bir ızgarah veri düzensiz yerleştirilen veri kümesi (x, y, z) interpolating için PHP bir işlev arıyorum. Ben basit bir Inverse distance weighting dayalı bir işlevi geliştirdik, ama çok yavaş. Ben daha hızlı ve daha düzgün hale getirmek için "Modifiye Shepard'ın Yöntemi" ya da daha fazla doğruluk ile herhangi bir olası diğer yöntemler gibi başka bir yöntem kullanmak gerekir.

İşte benim geçerli kod:

for($i = 0, $ij = 0; $i < $gridX; $i ++) {
    for($j = 0; $j < $gridY; $j ++, $ij ++) {
        $x = $startP->x + ($deltaX * $i);
        $y = $startP->y + ($deltaY * $j);
        $g [$ij]->i = $i;
        $g [$ij]->j = $j;
        $g [$ij]->x = ( int ) $x;
        $g [$ij]->y = ( int ) $y;
        $g [$ij]->z = IDW_U ( $x, $y, $sampleData, $sampleSize, $p );
    }
}

function IDW_U($x, $y, $data, $size, $p) {
    $idw_sum = IDWeightSum ( $x, $y, $data, $size, $p );
    $idw_u = 0.0;
    for($k = 0; $k < $size; $k ++) {
        if ($x == $data [$k]->x && $y == $data [$k]->y)
            return $data [$k]->z;
        $idw_u += IDWeight ( $x, $y, $data [$k], $p ) * $data [$k]->z / $idw_sum;
    }
    return $idw_u;
}

function IDWeightSum($x, $y, $data, $size, $p) {
    $sum = 0.0;
    for($k = 0; $k < $size; $k ++)
        $sum += IDWeight ( $x, $y, $data [$k], $p );
    return $sum;
}

function IDWeight($x, $y, $d, $p) {
    if ($x == $d->x && $y == $d->y)
        return 1.0;
    $dx = $x - $d->x;
    $dy = $y - $d->y;
    $ret = 1.0 / pow ( sqrt ( pow ( $dx, 2 ) + pow ( $dy, 2 ) ), $p );
    return $ret;
}

Herkes bu amaç için kullanılabilir bir işlevi veya kitaplık biliyor mu?

0 Cevap