Tôi đang chuyển đổi chương trình MatLab thành Python và tôi gặp sự cố khi hiểu tại sao scipy.interpolate.interp1d cho kết quả khác với MatLab interp1.SciPy interp1d kết quả khác với MatLab interp1
Trong MatLab việc sử dụng là hơi khác nhau:
yi = interp1(x,Y,xi,'cubic')
scipy:
f = interp1d(x,Y,kind='cubic')
yi = f(xi)
Đối với một ví dụ tầm thường các kết quả đều giống nhau: MatLab:
interp1([0 1 2 3 4], [0 1 2 3 4],[1.5 2.5 3.5],'cubic')
1.5000 2.5000 3.5000
Python:
interp1d([1,2,3,4],[1,2,3,4],kind='cubic')([1.5,2.5,3.5])
array([ 1.5, 2.5, 3.5])
Nhưng đối với một ví dụ thực tế họ không giống nhau:
x = 0.0000e+000 2.1333e+001 3.2000e+001 1.6000e+004 2.1333e+004 2.3994e+004
Y = -6 -6 20 20 -6 -6
xi = 0.00000 11.72161 23.44322 35.16484... (2048 data points)
Matlab:
-6.0000e+000
-1.2330e+001
-3.7384e+000
...
7.0235e+000
7.0028e+000
6.9821e+000
scipy:
array([[ -6.00000000e+00],
[ -1.56304101e+01],
[ -2.04908267e+00],
...,
[ 1.64475576e+05],
[ 8.28360759e+04],
[ -5.99999999e+00]])
Bất kỳ suy nghĩ như thế nào tôi có thể nhận được kết quả phù hợp với MatLab?
Chỉnh sửa: Tôi hiểu rằng có một số vĩ độ trong việc triển khai cho các thuật toán nội suy khối có thể giải thích sự khác biệt mà tôi thấy. Nó cũng có vẻ như là chương trình MatLab ban đầu mà tôi đang chuyển đổi nên đã sử dụng nội suy tuyến tính, do đó, câu hỏi có lẽ là tranh luận.