2016-05-17 8 views
1

sympyを使用してPythonでXとY配列の数値から数学関数を取得するにはどうすればよいですか?sympyでXとY配列によって与えられた曲線を生成した数学関数を確認する方法

ただ明確にする:以下のX及びYについて :

X = [0, 1, 2, 3, 4, 5] 
Y = [2, 2, 2, 2, 2, 2] 

それは(X)= KX + lであり、kおよびl可能であればとFであることを言いたいです。

私は形状が分かっている関数の逆関数を見つけなければなりません。フィット感があり、100%正確である必要はありません。

+4

これに対する一般的な解決策はありませんにfuncを書き換える任意の関数形状を試みることができる

一定です。たとえば、scipyで利用できるさまざまなカーブフィッティング関数を使用することができますが、フィットするカーブの種類と最適なものを決める方法はあなた次第です。 – BrenBarn

+0

あなたの例では何が起こっていますか? Y値はすべて同じですので、これは単なる水平線です。 "kx + l"は明らかにyの関数ではないので、 "f(y)= kx + l"の意味は分かりません。 –

+0

あなたは 'f(x)'を意味しませんか?可能な関数型(多項式、指数関数、力など)の範囲はありますか? – Jasper

答えて

1

sympy.polys.polyfuncsからのinterpolate関数を探している可能性があります。これは、データポイントの補間多項式を構築できます。これは多項式補間を行うに過ぎないことに注意してください。一般的な方程式ソルバーではなく、はるかに難しいでしょう。

2*x + 1 

することができます:あなたのf(x)はちょうどk = 0l = 22なようにあなたの与えられた例はかなり基本的なものですが、より一般的な例のためにあなたは

from sympy.polys.polyfuncs import interpolate 
from sympy.abc import x 
a = [1, 2, 3] 
b = [3, 5, 7] 
data = list(zip(a,b)) 
print(interpolate(data,x)) 

出力を有することができます後でPoly.coeffsで多項式から係数を抽出する

result = sympy.polys.polyfuncs.interpolate(data,x) 
coefficients = sympy.Poly(result).coeffs() 
print(coefficients) 

出力

[2,1] 
+0

ちょうど私が必要なもの!私の例であるアポポ、なぜkとlが何かを代表するものではないので、なぜ地球上でそれは無意味です。それはトリックを行った。すべての人がライン係数kとlを名前付けしているわけではないので、すべてがポイントであることをラインから見たいと思っていました。可能性のある混乱を短縮するためです。一部の人々は物を見て悪いです。だから... – Dalen

+0

@Dalenおそらく無意味な言葉は、間違った言葉だった、ちょうど "基本" :)と私は助けることができてうれしい。 – miradulo

+0

xからyを得る方法を知っていますか?与えられたxの値に対してyを与える多項式を得ることに成功しました。しかし、私が何をしていても、私はxからyを得ることはできません。 Xは17から0になり、Yは[19.683,20.257,20.802,21.317,21.801,22.253,22.70,23.059,23.412,23.731,24.015,24.264,24.478,24.655,24.796,24.901,24.969,25000であり、 – Dalen

0

我々は、複数の多項式(または非線形)のソリューションを持つことができるので、それは、あなたのシリーズを生成したユニークな機能を決定することはできません。

想像してみてください...あなたのシリーズのポイントと一致するポイントを持つ多くの関数があります。

あなたの問題を解決する最も合理的な方法は、いくつかの回帰テクニックを使用することです。

たとえば、最小自乗法を使用してデータを適合させることができます。

モデル(例:y = a + bx + error)を指定し、データをこの機能フォームに適合させる必要があります。

次に、あなたのような係数を持っています:ここでは、まあ、あなたが本当にフィットルーチンを必要とするいくつかのコード

import numpy as np 
from scipy.optimize import curve_fit 

def func(x, k, l): 
    return k * x + l 

X = [0, 1, 2, 3, 4, 5] 
Y = [2, 2, 2, 2, 2, 2] 

popt, pcov = curve_fit(func, X, Y) 

print(popt) 
print(pcov) 

出力をRegression Analysis

1

a = 0.2 
b = 0.05 

y = 0.2 + 0.05*x + error 

がで深く見てみましょうk,lの場合は

[ -2.18143147e-12 2.00000000e+00] 
理にかなって

Yは、単純な数学関数の説明がないかもしれないので、あなたは、自分の好み

関連する問題