python拟合曲线求方程,曲线拟合方程python
我試圖用一個(gè)包含6個(gè)元件的rlc電路的導(dǎo)納方程來(lái)擬合數(shù)據(jù)。我按照給定的he[fit]1re的例子,插入我的方程。該方程是用Mathcad簡(jiǎn)化的六元件電路導(dǎo)納的實(shí)部。在附圖中,x軸是ω(w=2*pi*f),y是以milli Siemens為單位的導(dǎo)納。在
該程序運(yùn)行,但它沒(méi)有做擬合,盡管有一個(gè)良好的試驗(yàn)功能。我感謝任何幫助,為什么適合是一條直線(xiàn)。我還附上了一個(gè)高斯擬合的例子。在
這就是當(dāng)我試圖擬合方程時(shí)得到的結(jié)果。數(shù)據(jù)為左側(cè)峰值較小的數(shù)據(jù),試驗(yàn)函數(shù)為虛線(xiàn)。擬合是一條直線(xiàn)
from numpy import sqrt, pi, exp, linspace, loadtxt
from lmfit import Model
import matplotlib.pyplot as plt
data = loadtxt("C:/Users/susu/circuit_eq_real5.dat")
x = data[:, 0]
y = data[:, 1]
def circuit(x,C0,Cm,Lm,Rm,R0,Rs):
return ((C0**2*Cm**2*Lm**2*R0*x**4)+(Rs*C0**2*Cm**2*Lm**2*x**4)+(C0**2*Cm**2*R0**2*Rm*x**2)+(Rs*C0**2*Cm**2*R0**2*x**2)+(C0**2*Cm**2*R0*Rm**2*x**2)+(2*Rs*C0**2*Cm**2*R0*Rm*x**2)+(Rs*C0**2*Cm**2*Rm**2*x**2)-(2*C0**2*Cm*Lm*R0*x**2)-(2*Rs*C0**2*Cm*Lm*x**2)+(C0**2*R0)+(Rs*C0**2)-(2*Rs*C0*Cm**2*Lm*x**2)+(2*Rs*C0*Cm)+(Cm**2*Rm)+(Rs*Cm**2))/((C0**2*Cm**2*Lm**2*x**4)+(C0**2*Cm**2*R0**2*x**2)+(2*C0**2*Cm**2*R0*Rm*x**2)+(C0**2*Cm**2*Rm**2*x**2)-(2*C0**2*Cm*Lm*x**2)+(C0**2)-(2*C0*Cm**2*Lm*x**2)+(2*C0*Cm)+(Cm**2))
gmodel = Model(circuit)
result = gmodel.fit(y, x=x, C0=1.0408*10**(-12), Cm=5.953*10**(-14),
Lm=1.475*10**(-7), Rm=1.571, R0=2.44088, Rs=0.42)
print(result.fit_report())
plt.plot(x, y, 'bo')
plt.plot(x, result.init_fit, 'k--')
plt.plot(x, result.best_fit, 'r-')
plt.show()
下面是Fit報(bào)告
^{pr2}$
非常感謝M Newville和Mikuszefski以及其他人提供的見(jiàn)解和反饋。我同意我所說(shuō)的也許是一個(gè)混亂的程序。從python代碼中可以明顯看出,我并不精通python或編程。在
Mikuszefsky,感謝您發(fā)布rlc示例代碼。你的方法既簡(jiǎn)潔又有趣。我不知道Python是直接進(jìn)行復(fù)雜擬合的,我會(huì)試試你的方法,看看能不能做到。我要同時(shí)擬合Y(準(zhǔn)入)的實(shí)部和虛部。我肯定會(huì)被困在某個(gè)地方,并將我的進(jìn)步張貼在這里。
最好的,
蘇蘇
總結(jié)
以上是生活随笔為你收集整理的python拟合曲线求方程,曲线拟合方程python的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu磁盘扩容及启动问题整理
- 下一篇: Python爬虫实战--斗鱼直播爬虫