Python 解决不了问题

Python 解决不了问题,python,function,matplotlib,sympy,equation-solving,Python,Function,Matplotlib,Sympy,Equation Solving,我正在尝试创建一个基于温度的曲面图。我需要输入一个热和冷的温度到一个函数中,这个函数为我们的“z轴”值解一个方程组。在我将其设置为某个变量之前,该函数工作正常。当我将其设置为变量时,系统不会给出完全解。下面是我遇到的错误示例: SympifyError Traceback (most recent call last) <ipython-input-12-828bf02f4398> in <module>

我正在尝试创建一个基于温度的曲面图。我需要输入一个热和冷的温度到一个函数中,这个函数为我们的“z轴”值解一个方程组。在我将其设置为某个变量之前,该函数工作正常。当我将其设置为变量时,系统不会给出完全解。下面是我遇到的错误示例:

SympifyError                              Traceback (most recent call last)
<ipython-input-12-828bf02f4398> in <module>
     49 cin = linspace(0,200,100)
     50 X, Y = meshgrid(hin,cin)
---> 51 Z = solver(X,Y)
     52 
     53 ax = axes(projection='3d')

<ipython-input-12-828bf02f4398> in solver(TH, TC)
     34     Tinfhin = TH +273.15
     35     Tinfcin = TC + 273.15
---> 36     sols = sy.nsolve(  (Eq(Qh,mdoth * cph * (Tinfhin - Tinfhout) ),
     37           Eq(Qh,nsh * hh * Ash * ((Tinfhin + Tinfhout)/2 - Th)),
     38           Eq(Qh,n * (alpha * II * Th - 0.5 * (II**2) * ree + (Ke * (Th-Tc)))),

D:\Users\sampl\Anaconda3\lib\site-packages\sympy\core\relational.py in __new__(cls, lhs, rhs, **options)
    389 
    390         lhs = _sympify(lhs)
--> 391         rhs = _sympify(rhs)
    392 
    393         evaluate = options.pop('evaluate', global_evaluate[0])

D:\Users\sampl\Anaconda3\lib\site-packages\sympy\core\sympify.py in _sympify(a)
    415 
    416     """
--> 417     return sympify(a, strict=True)
    418 
    419 

D:\Users\sampl\Anaconda3\lib\site-packages\sympy\core\sympify.py in sympify(a, locals, convert_xor, strict, rational, evaluate)
    337 
    338     if strict:
--> 339         raise SympifyError(a)
    340 
    341     if iterable(a):

SympifyError: SympifyError: array([[1353.5478432 - 4.955328*Tinfhout,
        1363.55860683636 - 4.955328*Tinfhout,
        1373.56937047273 - 4.955328*Tinfhout, ...,
        2324.59191592727 - 4.955328*Tinfhout,
        2334.60267956364 - 4.955328*Tinfhout,

这个问题的最佳解决方案是什么?

使用多个软件包时必须格外小心,因为一个软件包中的习惯用法并不总是适用于另一个软件包。SymPy告诉您它不知道如何处理
数组
对象。我认为您需要一次一个地解包数组元素,以解算和构建解向量*并将变量名
re
更改为
ree
无处不在:

def solver(_TH, _TC):
    rv = []
    for TH,TC in zip(_TH, _TC):
        TH = TH[0]
        TC = TC[0]
        Tinfhin = TH +273.15
        Tinfcin = TC + 273.15
        sols = sy.nsolve(  (Eq(Qh,mdoth * cph * (Tinfhin - Tinfhout) ),
            Eq(Qh,nsh * hh * Ash * ((Tinfhin + Tinfhout)/2 - Th)),
            Eq(Qh,n * (alpha * II * Th - 0.5 * (II**2) * ree + (Ke * (Th-Tc)))), 
            Eq(Qc,n * (alpha * II * Tc + 0.5 * (II**2) * ree + (Ke * (Th-Tc)))),
            Eq(Qc,nsc * hc * Asc * (Tc - (Tinfcin + Tinfcout)/2) ),
            Eq(Qc,mdotc * cpc * (Tinfcout - Tinfcin) ),
            Eq(II,(alpha * (Th - Tc))/(rL + ree) )),
        (II, Qc, Qh, Tc, Th, Tinfcout, Tinfhout), (1,5,5,300,300,330,330) )
        rv.append(sols[0])
    return(rv)     

不要使用这些,这是一种不好的做法。请使用
import matplotlib.pyplot

从pylab导入*
从随机导入*
改进后的代码是:

导入matplotlib
将matplotlib.pyplot作为plt导入
随机输入
#从mpl_工具包导入mplot3d
#作为pd进口熊猫
从scipy.optimize导入fsolve
将sympy作为sy导入
将numpy作为np导入
mdoth=0.004916
cph=1008
nsh=0.598
hh=86.68
灰分=0.02
n=127
α=0.00041427
rho=.002129
k=3.041
Le=.0025
Ae=.000001
ree=rho*Le/Ae
Ke=k*Ae/Le
nsc=.674
hc=87.68
Asc=.016
rL=ree
mdotc=.004542
cpc=1007
二、 Qc、Qh、Tc、Th、Tinfcout、Tinfhout=sy.符号('II、Qc、Qh、Tc、Th、Tinfcout、Tinfhout')
def解算器(_TH,_TC):
rv=[]
对于TH,拉链中的TC(_TH,_TC):
TH=TH[0]
TC=TC[0]
Tinfhin=TH+273.15
Tinfcin=TC+273.15
sols=sy.nsolve((sy.Eq(Qh,mdoth*cph*(Tinfhin-Tinfhout)),
sy.Eq(Qh,nsh*hh*Ash*((Tinfhin+Tinfhout)/2-Th)),
sy.Eq(Qh,n*(α*II*Th-0.5*(II**2)*ree+(Ke*(Th Tc)),
sy.Eq(Qc,n*(α*II*Tc+0.5*(II**2)*ree+(Ke*(Th Tc)),
系统等式(Qc、nsc*hc*Asc*(Tc-(Tinfcin+Tinfcout)/2),
sy.Eq(Qc,mdotc*cpc*(Tinfcout-Tinfcin)),
sy.Eq(II,(α*(Th-Tc))/(rL+ree)),
(II,Qc,Qh,Tc,Th,Tinfcout,Tinfhout),(1,5,5300300330330))
rv.append(sols[0])
返回rv
hin=np.linspace(0,200,20)
cin=np.linspace(0,200,20)
十、 Y=np.网格网格(hin,cin)
Z=解算器(X,Y)
ZZ=[]
对于范围(0,len(Z))内的uu:
ZZ.追加(Z)
ZZ=np.array(ZZ,dtype='float')
图,ax=plt.子地块(图大小=(8,8),子地块_kw={“投影”:“3d”})
X.plot_曲面(X,Y,ZZ,rstride=1,cstride=1,cmap=plasma,抗锯齿=False)
ax.集合标签(“TC”)
ax.设置标签(“环境”)
ax.设置标签(“电压”)
ax.view_init(0180)
图1紧_布局图()
plt.show()
数字是


我使用了@smichr生成的函数。

我以前也使用过类似的方法。你的方法和我的旧方法给了我一个不同的错误。”AttributeError:'list'对象没有属性'ndim',我猜这会在代码后面发生。您可能需要将列表转换回数组(或者后面的代码中所期望的任何形式)。
def solver(_TH, _TC):
    rv = []
    for TH,TC in zip(_TH, _TC):
        TH = TH[0]
        TC = TC[0]
        Tinfhin = TH +273.15
        Tinfcin = TC + 273.15
        sols = sy.nsolve(  (Eq(Qh,mdoth * cph * (Tinfhin - Tinfhout) ),
            Eq(Qh,nsh * hh * Ash * ((Tinfhin + Tinfhout)/2 - Th)),
            Eq(Qh,n * (alpha * II * Th - 0.5 * (II**2) * ree + (Ke * (Th-Tc)))), 
            Eq(Qc,n * (alpha * II * Tc + 0.5 * (II**2) * ree + (Ke * (Th-Tc)))),
            Eq(Qc,nsc * hc * Asc * (Tc - (Tinfcin + Tinfcout)/2) ),
            Eq(Qc,mdotc * cpc * (Tinfcout - Tinfcin) ),
            Eq(II,(alpha * (Th - Tc))/(rL + ree) )),
        (II, Qc, Qh, Tc, Th, Tinfcout, Tinfhout), (1,5,5,300,300,330,330) )
        rv.append(sols[0])
    return(rv)