2016-11-16 12 views
-2

私はこれをy = axとして適合させたいと思います。ただし、コードは機能しません。誰でも私を助けることができる?Pythonでy = axに合う

def func(): 
    return a * x 

F1 = [0.55, 0.45, 0.50, 0.65, 0.75, 0.80] 
r1 = [18.2, 18.4, 18.8, 19.5, 20.0, 20.2] 

plt.plot(F1, r1) 
popt = curve_fit(func, r1, F) # I supose it only returns one value 
plt.plot(r1, popt * r1, 'g--') 

エラーは次のようになります。このような

ValueError: Unable to determine number of fit parameters. 
+0

このコードには非常に多くのエラーがあり、これに答えることさえ困難です。 F1とは何ですか、r1とは何ですか? これらのうちどれがxであるべきですか? 曲線にフィットさせるデータ点は何ですか? – SilverSlash

+0

カーブフィットは1つの値を返しません。あなたはポップがどのように見えるかチェックしましたか?あなたはF1を使用するべきであり、F – Moritz

答えて

0

何か。コードを実行して、curve_fitの結果がどのようなものかを確認し、ロジックに注意深く従います。

import matplotlib.pyplot as plt 
from scipy.optimize import curve_fit as curve_fit 

def f(x,a): 
    return a*x 

F1 = [ 0.55, 0.45, 0.50, 0.65, 0.75, 0.80 ] 
r1 = [ 18.2, 18.4, 18.8, 19.5, 20.0, 20.2 ] 

result = curve_fit(f, r1, F1) 
print (result) 

print ('F1 = %s * r1' % result[0][0]) 

plt.plot(r1, F1, 'b.') 

p = [ result[0][0] * _ for _ in r1 ] 
plt.plot(r1, p, 'g--') 
plt.show() 
1

numpy.polyfitを使用している(IMO簡単な方法)線形フィットを行うための別の方法があります。ドキュメントはhereです。

import numpy as np 
import matplotlib.pyplot as plt 

F1 = [ 0.55, 0.45, 0.50, 0.65, 0.75, 0.80 ] 
r1 = [ 18.2, 18.4, 18.8, 19.5, 20.0, 20.2 ] 

z = np.polyfit(F1, r1, 1) # The 1 at the end denotes a linear fit. 
          # Change to 2,3 etc. for polynomial fitting 
zf = np.poly1d(z) 

plt.plot(F1,r1,'o') # plot data points 
plt.plot(F1, zf(F1)) # plot the fit 

plt.show() 

これは、次のグラフを生成します。

enter image description here

+0

ではありません。私はすでにこの種のフィットを知っています。そして私はそれらを望んでいません。彼らはy = ax + bのようなもので、y = axのようなものが1つ必要です。とにかくありがとう – MatMorPau22

0

あなたのコードの主な問題は、あなたのフィット関数への入力を持っていないということです。 funcは何を知っているのですかaxですので、返すことはできませんa*x

import matplotlib.pyplot as plt 
from scipy.optimize import curve_fit 

# func needs x and a as inputs 
def func(x, a): 
    return a*x 

F1=[0.55,0.45,0.50,0.65,0.75,0.80] 
r1=[18.2,18.4,18.8,19.5,20.0,20.2] 

plt.plot(r1,F1, 'bo') 
popt, pcov = curve_fit(func, r1, F1) 
plt.plot(r1,popt*r1,'g--') 
plt.show() 

enter image description here

:あなたが返される値

でそれをキャッチする必要がありますので

また、curve_fitはちょうどここにあなたのコードの修正版だ、またpcovをPOPTを返すのではなく、

注:フィットが良くない理由は、ラインが原点を通過しなければならないためです。 a*x+bを使ってよりフィット感を増すことができますが、それはあなたが何をするように頼んだのではありません。

関連する問題