廢話不多說,上代碼
方法1:
from sympy import *
T=symbols('T')
eq=Eq(10**20*exp(-12000/T)/(0.01+10**14*exp(-12000/T))-18700*(T-300))
#eq=[10**20*exp(-12000/T)/(0.01+10**14*exp(-12000/T))-18700*(T-300)]#改成這樣結果也是一樣的
result=nonlinsolve(eq,T)
print(result)
程式運行,回傳的是一個ConditionSet物件,說明不能解這個方程。
方法2:
import numpy as np
from scipy.optimize import fsolve
def f(T):
return 10**20*np.exp(-12000/T)/(0.01+10**14*np.exp(-12000/T))-18700*(T-300)
result=fsolve(f,[300])
print(result)
運行結果報錯
minpack.error: Result from function call is not a proper array of floats.
方法3
import numpy as np
import math
from scipy.optimize import fsolve
def f(T):
return 10**20*math.exp(-12000/T)/(0.01+10**14*math.exp(-12000/T))-18700*(T-300)
result=fsolve(f,[300])
print(result)
第3種方法能解出一個根 [303.3],但是方程有3個根。如果把“result=fsolve(f,[300])”這句改成“result=fsolve(f,[320])“,可以得到第二個根 [323.7];如果“result=fsolve(f,[300])”這句改成“result=fsolve(f,[360])“,可以得到第三個根 [349.4]。
如果把“result=fsolve(f,[300])”這句改成“result=fsolve(f,[300,320.360])“,則會報錯
TypeError: only size-1 arrays can be converted to Python scalars
各位大佬,如何才能把三個根一次性解出來呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/175112.html
