関数でder
キーワード引数を使用するだけです。splev
ddy = splev(X, tck, der=2)
の多くの値をループしないでください。代わりに、評価したいすべての値を含むx
Nx1 配列を作成して、シーケンスに入れなければならない個々の値の代わりに値の配列を取得するようにしてください。X
また、結果をデバッグする方法として、結果をプロットすることを強くお勧めします。プロットが理にかなっている場合、期待どおりに機能している可能性が高くなります (そうでない場合は、確実に機能していません)。
編集: X を使用した補間で近似値が得られ、TRUE の最大値が必要な場合は、スプラインが局所的に滑らかであることを考慮して、最大値 (局所補間された最大値とその近傍) を定義する 3 つの点の放物線補間を使用できます。
def parabolic_interpolation(p1, p2, p3):
x1, y1 = p1
x2, y2 = p2
x3, y3 = p3
denom = (x1-x2)*(x1-x3)*(x2-x3);
a = (x3*(y2-y1)+x2*(y1-y3)+x1*(y3-y2))/denom
b = (x3*x3*(y1-y2)+x2*x2*(y3-y1)+x1*x1*(y2-y3))/denom
c = (x2*x3*(x2-x3)*y1+x3*x1*(x3-x1)*y2+x1*x2*(x1-x2)*y3)/denom
xv = -b/(2*a)
yv = c-b**2/(4*a)
return (xv, yv) # coordinates of the vertex
お役に立てれば!