次のようなことをしようとしています(wikipediaから抽出した画像)
#!/usr/bin/env python
from scipy import interpolate
import numpy as np
import matplotlib.pyplot as plt
# sampling
x = np.linspace(0, 10, 10)
y = np.sin(x)
# spline trough all the sampled points
tck = interpolate.splrep(x, y)
x2 = np.linspace(0, 10, 200)
y2 = interpolate.splev(x2, tck)
# spline with all the middle points as knots (not working yet)
# knots = x[1:-1] # it should be something like this
knots = np.array([x[1]]) # not working with above line and just seeing what this line does
weights = np.concatenate(([1],np.ones(x.shape[0]-2)*.01,[1]))
tck = interpolate.splrep(x, y, t=knots, w=weights)
x3 = np.linspace(0, 10, 200)
y3 = interpolate.splev(x2, tck)
# plot
plt.plot(x, y, 'go', x2, y2, 'b', x3, y3,'r')
plt.show()
コードの最初の部分は、メイン リファレンスから抽出されたコードですが、ポイントをコントロール ノットとして使用する方法については説明されていません。
このコードの結果は次の画像です。
ポイントはサンプルで、青い線はすべてのポイントを考慮したスプラインです。そして、赤い線は私にとってはうまくいかないものです. すべての中間点を制御ノットとして考慮しようとしていますが、できません。使おうとしてもknots=x[1:-1]
、うまくいかない。助けていただければ幸いです。
要するに質問:スプライン関数ですべての中間点を制御ノットとして使用するにはどうすればよいですか?
注: この最後の画像はまさに私が必要としているものであり、私が持っているもの (すべてのポイントを渡すスプライン) と必要なもの (コントロール ノットを持つスプライン) の違いです。何か案は?