2

私は現在、一連の座標点 (経度、緯度、約 60000 個) とその場所の温度で作業しています。特定の地域をマッピングするために、温度が不明ないくつかのポイントで値を計算するために、それらを補間する必要があります。ポイントがそれらの間に持つ影響を尊重するために、すべての(経度、経度)ポイントを単位球ポイント(x、y、z)に変換しました。「数値レシピ第3版」からの一般化された多次元シェパード補間の適用を開始しました。

Doub interp(VecDoub_I &pt) 
    {
        Doub r, w, sum=0., sumw=0.;
        if (pt.size() != dim) 
            throw("RBF_interp bad pt size");
        for (Int i=0;i<n;i++) 
        {
            if ((r=rad(&pt[0],&pts[i][0])) == 0.) 
                return vals[i];
            sum += (w = pow(r,pneg));
            sumw += w*vals[i];
        }
        return sumw/sum;
    }

    Doub rad(const Doub *p1, const Doub *p2) 
    {
        Doub sum = 0.;
        for (Int i=0;i<dim;i++) 
            sum += SQR(p1[i]-p2[i]);
        return sqrt(sum);
    }

ここに画像の説明を入力 ご覧のように、1 つのポイントの補間では、アルゴリズムはそのポイントから他の各ポイントまでの距離を計算し、それを最終値の重みとして使用します。このアルゴリズムは機能しますが、特定の領域のグリッドをマッピングするために多くのポイントを計算するため、必要なものに比べて遅すぎます。これを最適化する 1 つの方法は、特定の半径を超えるポイントを除外することですが、ポイントがほとんどまたはまったくない領域では問題が発生します。もう 1 つの方法は、ルックアップ テーブルを 1 回だけ計算して距離を保存することにより、各 2 点間の距離の計算を減らすことです。これに関する問題は、そのような大きな行列 (60000 x 60000) を格納できないことです。得られた温度のグリッドは、さまざまな温度値の等高線を計算するために使用されます。

4

2 に答える 2

1

無限にサポートされる動径基底関数は、多数のデータ ポイントがあり、多数の補間値を取得する場合、おそらく使用したくないものです。

N 最近隣と有限サポートを使用して、各補間値で考慮する必要があるポイントの数を減らすバリアントがあります。これの変形は、Python による Inverse Distance Weighted (IDW) Interpolation で言及された最初のソリューションで見つけることができます。(私は、この実装が特定の条件下で不連続になる可能性があるというしつこい疑いを持っています-確かに問題のないバリアントがあります)

于 2011-10-10T10:39:30.000 に答える
0

ルックアップ テーブルは、60k 平方のすべてのポイントを格納する必要はなく、繰り返し使用されるポイントを 1 回だけ格納する必要があります。任意の座標xをマッピングint(x*resolution)して、解像度を下げることでヒット率を向上させることができます。

累乗関数の同様のルックアップ テーブルも役立つ場合があります。

于 2011-10-10T10:18:25.663 に答える