• 締切済み

Mathematica Interpolation

私は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]としても ”座標が構造上テンソル積グリッド上にありません”とかえってきます。 どなたか良い方法をご存じでしょうか? よろしくお願いします。

みんなの回答

回答No.4

f = Interpolation[data, InterpolationOrder -> All] では、うまくいかないでしょうか? 私はMathematica9をつかっていますが、InterpolationOrderはV6でつかえると思います。 なお、エラーメッセージは、Mathematicaのバージョンにより、若干ことなることがあるようです。

  • boson
  • ベストアンサー率59% (44/74)
回答No.3

エラーメッセージは省略しないで描くと 「Interpolation::indim: 座標が構造化テンソル積格子上にありません.」 ではありませんでしたか? 「Interpolation::indim」の項目を見ると http://reference.wolfram.com/legacy/v5/Built-inFunctions/WarningMessages/NumericalComputation/DataManipulation/Interpolationindim.ja.html ■多次元データのための格子は正方形である必要はなく,また格子の線は等間隔である必要もないが,データポイントは規則正しい格子に載らなければならない. とあります。つまり、この例では 「格子点{2,2}でのデータが欠落しているので補間ができない」 ということのようです。

回答No.2

{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}]

  • spring135
  • ベストアンサー率44% (1487/3332)
回答No.1

Mathematica葉使ったことはありませんが、一般論として z=ax+by+c とおいて最小二乗法でデータからa,b,cを決めればよいと思います。 2次まで使うのであれば z=ax^2+bxy+cy^2+dx+ey+f として、最小二乗法でa,b,c,d,e,fを決定すればよいでしょう。

関連するQ&A