2016-07-06 13 views
1

私は、 parametric equationsをPythonを使ってデータポイントのセットに適合させる方法を模索しています。与えられた簡単な例として Pythonのデータポイントにパラメトリック方程式を適合させる方法

は、以下のデータポイントのセットです、私はデータポイントに次のパラメトリック方程式をフィットするパラメータとして tを使用して

import numpy as np 
x_data = np.array([1, 2, 3, 4, 5]) 
y_data = np.array([2, 0, 3, 7, 13]) 

t = np.arange(0, 5, 0.1) 
x = a1*t + b1 
y = a2*t**2 + b2*t + c2 

つまり、Pythonは係数の値を見つけましたa1b1a2b2c2(x,y)ベストフィットoデータポイント(x_data, y_data)

上記のy(t)およびx(t)関数は、パラメトリック方程式の例としてのみ機能することに注意してください。私のデータに合わせたい実際の関数はもっと複雑で、その関数では、の関数としてyを表現することは自明ではありません。

ありがとうございます - ありがとうございます!

+0

を使用することができる機能を取得します。問題は 'scipy.optimize.curve_fit'が(私が知る限り)' y'が 'x'の関数であることです。 私の問題では、 't'の関数として' y'と 'x'の両方を持つパラメトリック方程式があります。 –

答えて

0

xyの関係は2次のものなので、係数を得るにはnp.polyfitを使用できます。 はあなたの方程式によると、あなたのxy関係は次のとおりです。関数polyfitを使用して

y = a2*((x-b1)/a1)**2 + b2*((x-b1)/a1) + c2

は、我々はa1, b1, a2, b2, c2

y_data = np.array([2, 0, 3, 7, 13]) 
x_data = np.array([1, 2, 3, 4, 5]) 
np.polyfit(x_data,y_data,2) 
[p2,p1,p0] = list(array([ 1.21428571, -4.38571429, 4.8  ])) 

値は以下のEQNS

に解くことによって得ることができ得ますp2 = a2/a1**2

p1 = -2b1*a2/a1**2 + b2/a1

p0 = a2*b1**2/a1**2 -b2*b1/a1 + c2

+0

ありがとうございます。しかし、私の実際の問題では、 'x'と' y'の間の関係を見つけるための些細な方法はなく、私はデータ点にパラメトリック方程式を当てはめたいと思います。私がここで提供した 'x'と' y'関数は、単純な例としてのみ提供されています。 –

+0

さて、以下の答えは正しいです、あなたが配列 't'の値が何であるかを知っていることを前提とします。 –

2

あなたは関数polyfitを使用しますが、Tの長さは、データポイントの長さに

import numpy as np 

tt = np.linspace(0, 5, len(x_data)) 

x_params = np.polyfit(tt, x_data, 1) 
y_params = np.polyfit(tt, y_data, 2) 

変更するには、フィットを考える度に三番目のパラメータと一致する必要があります気をつけてくださいすることができますあなたのデータ。

あなたは私が `scipy.optimize.curve_fit`を使用しようとしました

y = np.poly1d(y_params) 

t = np.arange(0, 5, 0.1) 

plot(t, y(t)) 
plot(tt, y_data, 'o') 
関連する問題