2015-06-17 6 views
1

Итак, я хочу прочитать в нескольких наборах данных и сравнить их с одним набором данных, чтобы выполнить исследование разрешения сетки. У меня есть базовый скрипт, настроенный для чтения в моих данных из файла дампа из моего кода CFD. Он интерполирует между моим набором данных и прекрасно работает, но он только отображает сплайн между моими данными.Интерполяция и сравнение python

f = open('x_data.dat','r') 
    xd=np.genfromtxt(f) 
    f.close() 

    f = open('y_data.dat','r') 
    yd=np.genfromtxt(f) 
    f.close() 

    plt.plot(xd,yd,'o') 

    t = np.arange(xd.shape[0], dtype=float) 
    t /= t[-1] 
    nt = np.linspace(0, 1, 100) 
    x1 = scipy.interpolate.spline(t, xd, nt) 
    y1 = scipy.interpolate.spline(t, yd, nt) 
    plt.plot(x1, y1, label='range_spline') 

    plt.show() 

Я хочу сохранить, что данные сплайн и использовать его в качестве Р (х, у), чтобы подключить другие х, у данных в и проверить расположение поверхности к тому, что мой «точное решение» должно быть. Данные из моих других наборов данных не совпадают с точными данными решения, следовательно, необходимо интерполировать. Есть ли способ хранения данных сплайнов между каждой точкой, поэтому я могу получить f (x, y), который я могу использовать как функцию? Кроме того, эти сплайны кубические. Не выглядят кубиками, и я не мог найти простой ответ.

+0

Вместо этого вы можете использовать scipy.interpolate.interp1d? Это вернет функцию, которую можно повторно использовать (и вы можете указать кубическую интерполяцию). Обратите внимание, что по умолчанию ошибка возникает, если вы передаете значение вне диапазона, поэтому оно не будет экстраполироваться вообще. – Gretchen

+0

Мои данные не монотонны, они закрыты и клиновидны. Поэтому я не думаю, что могу использовать эту конкретную интерполяцию. Мне не нужно интерполировать, мне нужна кривая для измерения нормального расстояния до точек вокруг нее. – crockski

+0

* Мне не нужно экстраполировать – crockski

ответ

0

spline - это комбинация splmake и spleval, все три недокументированные. Лучше не использовать их напрямую. interp1d с kind=cubic будет использовать эти подпрограммы под капотом.

Для построения сплайн-объекта для последующего повторного использования используйте splrep (splprep для параметрических сплайнов)/splev, или UnivariateSpline.

Смежные вопросы