많은 양의 데이터를 부드럽게 보간하기 위해 scipy.interpolate.UnivariateSpline
을 사용하고 있습니다. 훌륭하게 작동합니다. 나는 함수처럼 행동하는 객체를 얻는다.나중에 파이썬이나 Matlab에서 원본 데이터 포인트가 필요없이 scipy.interpolate.UnivariateSpline의 출력을 사용합니다.
이제 스플라인 포인트를 저장하고 원본 데이터를 필요로하지 않고 Matlab (및 Python에도 사용할 수 있지만 덜 긴급합니다)에서 사용하려고합니다. 어떻게해야합니까?
scipy에서 단서가 없습니다; UnivariateSpline은 이전에 계산 된 매듭과 계수로 생성자를 제공하지 않는 것 같습니다.
MATLAB에서 Matlab 함수 spline()
과 pchip()
을 사용해 보았습니다. 둘 다 가까와 지지만 Gibbs ears처럼 보이는 끝점 근처에 오류가 있습니다.
여기 매트랩 형식이 I는 데이터의 샘플 세트가있다 :
splinedata = struct('coeffs',[-0.0412739180955273 -0.0236463479425733 0.42393753107602 -1.27274336116436 0.255711720888164 1.93923263846732 -2.30438927604816 1.02078680231079 0.997156858475075 -2.35321792387215 0.667027554745454 0.777918416623834],...
'knots',[0 0.125 0.1875 0.25 0.375 0.5 0.625 0.75 0.875 0.9999],...
'y',[-0.0412739180955273 -0.191354308450615 -0.869601364377744 -0.141538578624065 0.895258135865578 -1.04292294390242 0.462652465278345 0.442550440125204 -1.03967756446455 0.777918416623834])
계수 매듭은 scipy UnivariateSpline에 get_coeffs()
및 get_knots()
호출의 결과이다. 'Y'값은 더 정확하게 매듭에서 UnivariateSpline 값이거나 : F 내 UnivariateSpline
y = f(f.get_knots())
이다.
커브 피팅 도구 상자를 사용하지 않고이 데이터를 사용하여 UnivariateSpline의 동작과 일치하는 스플라인을 만드는 방법은 무엇입니까? Matlab에서 데이터 피팅을 할 필요가 없습니다. 매듭/계수/스플라인 값으로 입방 스플라인을 구성하는 방법을 알아야합니다. 스플라인의 매듭 계수 및 정도를 함유 ... 시퀀스 :
는 나도 몰라,하지만'UnivariateSpline' 객체는 적어도 당신이 재사용하고 싶었 경우, pickleable 것 같다 파이썬에 적합합니다. –
OP 질문에 대한 자세한 답변은 http://stackoverflow.com/questions/22488637/getting-spline-equation-from-univariatespline-object/25330648#25330648에 게시되어 있습니다. 이 답은 스플라인 노트와 계수를 수동으로 평가하는 수단을 제공하므로 OP는 다른 프로그램에서 사용하는 입력 값과 일치시킬 수 있습니다. – nzh