Tôi đang cố gắng chuyển một chương trình sử dụng bộ nội suy cuộn tay (do một trường toán học phát triển) sang sử dụng bộ nội suy do scipy cung cấp. Tôi muốn sử dụng hoặc bọc bộ nội suy scipy để nó có hành vi gần nhất có thể với bộ nội suy cũ.
Sự khác biệt chính giữa hai chức năng là trong bộ nội suy ban đầu của chúng tôi - nếu giá trị đầu vào cao hơn hoặc thấp hơn phạm vi đầu vào, bộ nội suy ban đầu của chúng tôi sẽ ngoại suy kết quả. Nếu bạn thử điều này với bộ nội suy scipy, nó sẽ tăng a ValueError
. Hãy coi chương trình này như một ví dụ:
import numpy as np
from scipy import interpolate
x = np.arange(0,10)
y = np.exp(-x/3.0)
f = interpolate.interp1d(x, y)
print f(9)
print f(11) # Causes ValueError, because it's greater than max(x)
Có cách nào hợp lý để làm cho nó thay vì sụp đổ, dòng cuối cùng sẽ chỉ đơn giản thực hiện phép ngoại suy tuyến tính, tiếp tục các gradient được xác định bởi hai điểm đầu tiên và cuối cùng đến vô cùng.
Lưu ý rằng trong phần mềm thực, tôi không thực sự sử dụng hàm exp - ở đây chỉ để minh họa!
scipy.interpolate.UnivariateSpline
dường như ngoại suy mà không có vấn đề.