SciPy - 2D Daten interpolieren und Schnittpunkt bestimmen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ihPyP
User
Beiträge: 55
Registriert: Samstag 4. September 2010, 23:06

Samstag 23. April 2011, 21:59

Hallo,

ich habe zwei kurze Fragen und hoffe, dass ich hier etwas Hilfe bekomme. Und zwar habe ich zwei Probleme/Fragen:
1. Ich habe ein 2D Gitter, welches mit einer Temperaturverteilung belegt ist. Ich möchte gerne die Temperaturverteilung von dem Ausgangsnetz auf ein Netzderivat interpolieren. Das neue Netz ist kleiner als das Basisnetz, so dass eine Interpolation eigentlich möglich sein sollte. Ich habe schon ein wenig dazu gegoogelt - die Beispiele, welche ich fand, waren aber nicht lauffähig.

2. Ich möchte gerne den Schnittpunkt zwischen einem 2D-Vektor und einer Kurve (Punktewolke) suchen. Hierfür fehlt mir derzeit noch jeglicher Ansatz...
ihPyP
User
Beiträge: 55
Registriert: Samstag 4. September 2010, 23:06

Sonntag 24. April 2011, 08:18

Hier ein Beispiel, welches gefunden haben zum Daten interpolieren - aber ich erhalte immer die Fehlermeldung "ImportError: cannot import name griddata
".

Code: Alles auswählen

import numpy as np
import scipy as sp
# Suppose we want to interpolate the 2-D function

def func(x, y):
    return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2

# on a grid in [0, 1]x[0, 1]

grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]

# but we only know its values at 1000 data points:

points = np.random.rand(1000, 2)
values = func(points[:,0], points[:,1])

# This can be done with `griddata` -- below we try out all of the
# interpolation methods:

from scipy.interpolate import griddata
grid_z0 = griddata(points, values, (grid_x, grid_y), method='nearest')
grid_z1 = griddata(points, values, (grid_x, grid_y), method='linear')
grid_z2 = griddata(points, values, (grid_x, grid_y), method='cubic')

# One can see that the exact result is reproduced by all of the
# methods to some degree, but for this smooth function the piecewise
# cubic interpolant gives the best results:

import matplotlib.pyplot as plt
plt.subplot(221)
plt.imshow(func(grid_x, grid_y).T, extent=(0,1,0,1), origin='lower')
plt.plot(points[:,0], points[:,1], 'k.', ms=1)
plt.title('Original')
plt.subplot(222)
plt.imshow(grid_z0.T, extent=(0,1,0,1), origin='lower')
plt.title('Nearest')
plt.subplot(223)
plt.imshow(grid_z1.T, extent=(0,1,0,1), origin='lower')
plt.title('Linear')
plt.subplot(224)
plt.imshow(grid_z2.T, extent=(0,1,0,1), origin='lower')
plt.title('Cubic')
plt.gcf().set_size_inches(6, 6)
plt.show()
Antworten