簡體   English   中英

使用python求系數

[英]Equating coefficients using python

給定兩個方程,這實際上是手動完成的非常簡單的任務,但是我想知道是否有可能在python中等於系數(也許使用numpy或sympy / scipy?)。 所以我看到的方程是這樣的:

y = 1.0066*x**2-1.8908*x-0.888
U = 0.5kB*(r-r0)**2

現在理想情況下,應首先將第二個方程式相乘以形成上述形狀,然后通過三個系數a(= 1.0066),b(= 1.8908)和c(0.888)來計算kB ,其中r0也是一個常數(基本上給我3個kB值)所以唯一的變量是x和r,但我對它們並不真正感興趣

可以執行這樣的任務嗎? 謹記我只是一個初學者

謝謝

您可以使用SymPy將右側表示為關於符號變量xrr0kB表達式:

x, r, r0, kB = sym.symbols('x,r,r0,kB')
y = 1.0066*x**2-1.8908*x-0.888
U = 0.5*kB*(r-r0)**2

現在我們可以將yU轉換為關於xr多項式:

In [39]: sym.poly(y, x)
Out[39]: Poly(1.0066*x**2 - 1.8908*x - 0.888, x, domain='RR')

In [40]: sym.poly(U, r)
Out[40]: Poly(0.5*kB*r**2 - 1.0*kB*r0*r + 0.5*kB*r0**2, r, domain='RR[r0,kB]')

sym.Poly具有all_coeffs方法,該方法返回系數列表:

In [41]: sym.poly(y, x).all_coeffs()
Out[41]: [1.00660000000000, -1.89080000000000, -0.888000000000000]

In [42]: sym.poly(U, r).all_coeffs()
Out[42]: [0.5*kB, -1.0*kB*r0, 0.5*kB*r0**2]

我們可以使用zip來配對兩個列表中的系數:

In [43]: list(zip(sym.poly(y, x).all_coeffs(), sym.poly(U, r).all_coeffs()))
Out[43]: 
[(1.00660000000000, 0.5*kB),
 (-1.89080000000000, -1.0*kB*r0),
 (-0.888000000000000, 0.5*kB*r0**2)]

然后使用sympy.Eq等同於表達式,並使用sympy.solve將它們求解為kB 我在這里用來生成列表的Python構造稱為列表理解

In [44]: [sym.solve(sym.Eq(a, b), [kB]) for a, b in zip(sym.poly(y, x).all_coeffs(), sym.poly(U, r).all_coeffs())]
Out[44]: [[2.01320000000000], [1.8908/r0], [-1.776/r0**2]]

放在一起:

import sympy as sym

x, r, r0, kB = sym.symbols('x,r,r0,kB')
y = 1.0066*x**2-1.8908*x-0.888
U = 0.5*kB*(r-r0)**2
result = [sym.solve(sym.Eq(a, b), [kB]) for a, b in 
          zip(sym.poly(U, r).all_coeffs(), sym.poly(y, x).all_coeffs())]
print(result)

版畫

[[2.01320000000000], [1.8908/r0], [-1.776/r0**2]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM