Cette liste est une fonction simple qui associe un point 2D à un certain nombre, si vous considérez chaque {{x,y},z}
comme f[x,y]=z
Mathematica Force pour interpoler sur la grille de tenseur non structuré
{
{{1,3},9}, {{1,4},16},
{{2,4},8}, {{2,5},10}
}
Je veux maintenant une fonction qui interpole/extrapole f[x,y]
pour tout {x,y}
.
Mathematica refuse de le faire:
Interpolation[{{{1,3},9}, {{1,4},16},{{2,4},8}, {{2,5},10}},
InterpolationOrder->1]
de la Indim Interpolation: Les coordonnées ne se trouvent pas sur une grille de produit tenseur structuré.
Je comprends pourquoi (Mathematica veut un domaine « rectangulaire »), mais ce qui est la meilleure façon de forcer Mathematica pour créer une interpolation?
Cela ne fonctionne pas:
f[1,3]=9; f[1,4]=16; f[2,4]=8; f[2,5]=10;
g=FunctionInterpolation[f[x,y],{x,1,2},{y,3,5}]
FunctionInterpolation :: nreal:
16 Près de {x, y} = {1, -}, la fonction n'a pas évaluer un réel nombre. 5 FunctionInterpolation :: nreal:
17 Près de {x, y} = {1, -}, la fonction n'a pas évalué à un nombre réel. 5 FunctionInterpolation :: nreal:
18 Près de {x, y} = {1, -}, la fonction n'a pas validé en un nombre réel. 5 Général :: stop: La sortie supplémentaire de FunctionInterpolation :: nreal sera supprimée lors de ce calcul.
Même si vous ignorez les avertissements ci-dessus, l'évaluation g donne des erreurs
g[1.5,4] // FortranForm
f(1.5,4) + 0.*(-9.999999999999991*(f(1.4,4) - f(1.5,4)) +
- 0.10000000000000009*
- (9.999999999999991*
- (9.999999999999991*(f(1.4,4) - f(1.5,4)) +
- 4.999999999999996*(-f(1.4,4) + f(1.6,4))) +
- 0.5000000000000006*
- (-10.000000000000014*
- (-3.333333333333333*(f(1.3,4) - f(1.6,4)) -
- 4.999999999999996*(-f(1.4,4) + f(1.6,4))) -
- 9.999999999999991*
- (9.999999999999991*(f(1.4,4) - f(1.5,4)) +
- 4.999999999999996*(-f(1.4,4) + f(1.6,4))))))
L'autre idée « évidente » (interpoler fonctions eux-mêmes interpoler) ne fonctionne pas non plus.
Yasushi Iwasaki, bienvenue à la communauté Mathematica StackOverflow, et je vous remercie de contribuer. –