Saltar al contenido

Interpolación en una malla no estructurada

Agradecemos tu apoyo para extender nuestras crónicas con relación a las ciencias de la computación.

Solución:

Aquí está cómo hacerlo, solo deja ToElementMesh crear la malla:

Needs["NDSolve`FEM`"]
mesh = ToElementMesh[pts];
values = #[[1]], #[[2]], #[[1]] #[[2]]^2 & /@ pts;
int = ElementMeshInterpolation[mesh, values[[All, 3]]];
Length[pts], Length[mesh["Coordinates"]]

1001, 1001

Plot3D[int[x, y], x, y [Element] mesh]

ingrese la descripción de la imagen aquí

En términos generales, dado un conjunto de puntos ToBoundayMesh devolverá un casco convexo y ToElementMesh devolverá una triangulación de Delaunay.

Probar

mesh = ToElementMesh[[email protected]
, MeshQualityGoal -> 0 ,"MeshOrder" -> 1 ];

Esta es una malla triangular simple (¡sin puntos adicionales!)

Length[pts]==Length[mesh["Coordinates"]]
(*True*) 

values = #[[1]] #[[2]]^2 & /@ mesh["Coordinates"];
fFE = ElementMeshInterpolation[mesh, values];
Plot3D[fFE[x, y], Element[x, y, mesh] ]

ingrese la descripción de la imagen aquí

pienso Interpolation hace lo que quieres debajo del capó (básicamente lo que dijo @MarcoB):

ifn = Interpolation[[email protected]pts, values[[All, 3]], 
   InterpolationOrder -> 1];

emesh = [email protected]"ElementMesh";
emesh["Wireframe"]

ingrese la descripción de la imagen aquí

Tenga en cuenta que controló la construcción de la malla de la manera que quería.

Actualizar.
Puedes construir la malla de esta manera:

mymesh = ToElementMesh[[email protected], MeshQualityGoal -> 0, 
   MaxCellMeasure -> Infinity, "IncludePoints" -> pts, 
   "MeshOrder" -> 1];
[email protected]["Wireframe"] === [email protected]["Wireframe"]
(* True  *)

Las coordenadas están ordenadas de manera diferente a ptspor lo que necesitamos permutar los valores en consecuencia para construir el ElementMeshInterpolation:

myvalues = 
  values[[All, 3]][[
    [email protected] pts]][[
    [email protected][email protected][email protected]"Coordinates"]];
myifn = ElementMeshInterpolation[mymesh, myvalues];

Plot3D[myifn[x, y], x, y ∈ mymesh]

ingrese la descripción de la imagen aquí

Comprobar equivalencia:

myifn[##] === ifn[##] & @@
 [email protected][[email protected], 10000]
(*  True  *)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *