2011-11-21 67 views
9

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.

Trả lời

11

Phương pháp nội suy cơ bản là scipy.interpolate.interp1dinterp1 là khác nhau. Scipy sử dụng các thói quen netlib fitpack, tạo ra các tiêu chuẩn khối liên tục chuẩn C2. Đối số "khối" trong interp1 sử dụng các hàm đa thức nội suy khối thứ ba, không phải C2 liên tục. Xem here để biết giải thích về những gì Matlab làm.

Tôi cho rằng đó là nguồn gốc của sự khác biệt mà bạn đang thấy.

0

Sử dụng scipy hiện tại http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.PchipInterpolator.html Điều này sẽ tạo nội suy khối đơn điệu của y = f (x), và sử dụng thuật toán pchip để xác định độ dốc trong các điểm. Vì vậy, đối với mỗi phần, (x, y) được thông qua bởi bạn, thuật toán pchip sẽ tính toán (x, dy/dx), và chỉ có khối đi qua 2 điểm với đạo hàm đã biết tại các điểm này. Mỗi lần xây dựng, nó sẽ liên tục với đạo hàm đầu tiên liên tục.

Các vấn đề liên quan