2015-11-02 2 views
0
#plotted log values of Re and C(d) 
import numpy as np 
import matplotlib.pyplot as plt 
plt.plot([np.log(0.2),np.log(2), np.log(20), np.log(200), np.log(2000), np.log(20000)], [np.log(103), np.log(13.9), np.log(2.72), np.log(0.800), np.log(0.401), np.log(0.433)], 'r-^') 
plt.ylabel('C(D)') 
plt.xlabel('Re') 
plt.show() 


#Then we Interpolate 
import scipy 
from scipy.interpolate import interpolate 
scipy.interpolate.interp1d('x', 'y', kind='cubic') 
import matplotlib.pyplot as plt 
x = np.linspace[np.log(103), np.log(13.9), np.log(2.72), np.log(0.800), np.log(0.401), np.log(0.433)] 
y = [np.log(0.2), np.log(2), np.log(20), np.log(200), np.log(2000), np.log(20000)] 
f = interp1d(x, y, kind='cubic') 
plt.plot(x, f(x)) 

Так что это мой код до сих пор, чтобы интерполировать набор данных, и я получил это далеко, но мне говорят, что у меня есть «целочисленное деление или по модулю ноль», и у меня было играть с ним, но я не могу найти свою ошибку.интерполяция с использованием кубического сплайна

ответ

0

Эта строка вызывает исключение.

scipy.interpolate.interp1d('x', 'y', kind='cubic') 

Вы можете посмотреть трассировку и посмотреть, какая именно линия вызвала проблему. Это делает это, потому что вы даете ему строки ('x', 'y'), когда он хочет массивы.

Строка f = interp1d(x, y, kind='cubic') верна, но вы не импортируете interp1d правильно. Вы хотите что-то вроде from scipy.interpolate import interp1d или f = scipy.interpolate.interp1d(x, y, kind='cubic').

Выполнение f(x) является беспредметным. Вся точка интерполяции заключается в создании значений, отличных от ваших входных точек. Как и в, указывает не на массив x.

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