ここから質問投稿すると、最大4000ポイント当たる!!!! >>

私はMathematica 6.0 を使用しています。
MathamaticaのInterpolationについて質問です。

以下のような三次元のデータ(例えば{x座標、y座標、水深})があります。

data={{1,1,50},{1,2,40},{1,3,60},{2,1,30},{2,3,50},{3,1,30},{3,2,60},{3,3,40}};

このdataを補完し、自分が得たい座標({x,y}={2,2})を入力すれば、
そこの水深(z)がわかるようにしたいのですがいい方法がわかりません。

単純に
Interpolation[data]としても
”座標が構造上テンソル積グリッド上にありません”とかえってきます。

どなたか良い方法をご存じでしょうか?
よろしくお願いします。

A 回答 (4件)

f = Interpolation[data, InterpolationOrder -> All]


では、うまくいかないでしょうか?
私はMathematica9をつかっていますが、InterpolationOrderはV6でつかえると思います。

なお、エラーメッセージは、Mathematicaのバージョンにより、若干ことなることがあるようです。
    • good
    • 0

エラーメッセージは省略しないで描くと


「Interpolation::indim: 座標が構造化テンソル積格子上にありません.」
ではありませんでしたか?

「Interpolation::indim」の項目を見ると
http://reference.wolfram.com/legacy/v5/Built-inF …
■多次元データのための格子は正方形である必要はなく,また格子の線は等間隔である必要もないが,データポイントは規則正しい格子に載らなければならない.

とあります。つまり、この例では
「格子点{2,2}でのデータが欠落しているので補間ができない」
ということのようです。
    • good
    • 0

{2,2}のデータが欠落すると補間がうまくいかないのはなぜかわかりませんが、、、、


応急措置として、もしも理論的なモデル関数が分かっているとか、あるいはスムーズな変化しかしないとわかっているとかでしたら、フィッティングで代替するのはどうでしょうか。
次のやつはx,yで分離した多項式でやってみました。(x,y分離はこの場合はあまりうまくいかないようですが。簡単のため)
data = {{1, 1, 50}, {1, 2, 40}, {1, 3, 60}, {2, 1, 30}, {2, 3,
50}, {3, 1, 30}, {3, 2, 60}, {3, 3, 40}};
ListPlot3D[data]
fitFunc = (a x^2 + b x + c)*(d y^2 + e y + f);
fitSol = FindFit[data, fitFunc, {a, b, c, d, e, f}, {x, y}]
fitFunc /. fitSol /. {x -> 2, y -> 2}
Plot3D[fitFunc /. fitSol, {x, 1, 3}, {y, 1, 3}]
    • good
    • 0

Mathematica葉使ったことはありませんが、一般論として



z=ax+by+c

とおいて最小二乗法でデータからa,b,cを決めればよいと思います。

2次まで使うのであれば

z=ax^2+bxy+cy^2+dx+ey+f

として、最小二乗法でa,b,c,d,e,fを決定すればよいでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング