24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1100  |  回复: 0
【悬赏金币】回答本帖问题,作者xjzeng将赠送您 10 个金币

xjzeng

木虫 (小有名气)

[求助] python解非线性方程的问题

废话不多说,上代码
方法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 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

各位大佬,如何才能把三个根一次性解出来呢?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xjzeng 的主题更新
不应助 确定回帖应助 (注意:应助才可能被奖励,但不允许灌水,必须填写15个字符以上)
信息提示
请填处理意见