近似多項式近似に問題があります。私の問題の詳細なレビューはHEREです。 基本的に私は多項式の中間部分を滑らかにして、長い数学的操作を行い、以下に示します。 私が得たアイデアは、多項式(その点)の終わりから最初から範囲と範囲をとり、中間セクションに波打ちを持たない近似多項式を作ることです。選択したポイントを以下に示します。 しかし、polyfit
関数を使用することで、私が期待していた多項式を得ることはできませんでした。 与えられたデータに近似多項式近似
これは私のコードの重要な部分:私はこの近似多項式問題を解決する方法や中央部分に手を振って解決する別の方法がある場合にいくつかのアドバイスをしたいと思い
from sympy import*
import numpy as np
init_printing()
%matplotlib inline
import matplotlib.pyplot as plt
S = np.linspace(25, 400, 1000)
SS = np.log10(S)
def f(logS): # the polynomial that I got
return 10**(-57.2476193068601*logS**5 + 585.900632193053*logS**4 - 2384.35277925916*logS**3 + 4821.25582425353*logS**2 - 4845.47249368281*logS + 1943.75303313331)
xdata = f(SS)
ydata = S
plt.figure(figsize=(12, 10), dpi= 600, facecolor='w', edgecolor='k')
plt.loglog(xdata, ydata,'k-')
# Data for new polynomial (approximation)
XX = xdata[:40].tolist()
X1 = xdata[len(xdata)-350:].tolist()
YY = ydata[:40].tolist()
Y1 = ydata[len(ydata)-350:].tolist()
for i in range(len(X1)):
XX.append(X1[i])
YY.append(Y1[i])
# Approximation polynomial fit
plt.loglog(XX,YY,'mo')
x_t = np.linspace(np.min(xdata), np.max(xdata),1000)
p = np.poly1d(np.polyfit(XX,YY, deg=5))
plt.loglog(x_t, p(x_t),'g-')
print(p)
plt.ylim((np.min(ydata), np.max(ydata)))
plt.xlim((np.min(xdata), np.max(xdata)*0.7))
plt.xlabel('xdata')
plt.ylabel('ydata')
plt.grid(True, which="both")
- スムージングの良い方法。 ご協力いただきありがとうございます。
あなたは多項式の次数を増加させようとしたことがありますか? – gabra
元の多項式と同じ次数近似多項式を使用したいと思います。これは、中間セクションを平滑化し、最後に係数を比較するという考えです。 – mcluka
1つの多項式を見つけて空間を広げ、そのデータを再現するのは難しいでしょう。区分的多項式で簡単です。私はそれを試みるだろう。 – duffymo