解决不了问题

2024-10-04 09:18:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个基于温度的曲面图。我需要输入一个热和冷的温度到一个函数中,这个函数为我们的“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,

这是我的密码:

from pylab import *
from random import *
from mpl_toolkits import mplot3d
import pandas as pd
from scipy.optimize import fsolve
import sympy as sy

mdoth = 0.004916
cph = 1008
nsh = .598
hh= 86.68
Ash = .02
n=127
alpha = .00041427
rho = .002129
k=3.041
Le = .0025
Ae = .000001
re = rho * Le/Ae
Ke = k * Ae/Le
nsc = .674
hc = 87.68
Asc = .016
rL = re
mdotc = .004542
cpc = 1007




II, Qc, Qh, Tc, Th, Tinfcout, Tinfhout = symbols('II, Qc, Qh, Tc, Th, Tinfcout, Tinfhout')

def solver(TH, TC):
    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) )
    result = sols[0]
    return(result)     


hin = linspace(0,200,100)
cin = linspace(0,200,100)
X, Y = meshgrid(hin,cin)
Z = solver(X,Y)

ax = axes(projection='3d')
ax.set_xlabel("TC")
ax.set_ylabel("Ambient")
ax.set_zlabel("Voltage")
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap = 'plasma')
ax.view_init(0, 180)'''

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


Tags: inimportalphaaxiieqtcqc
2条回答

在使用多个软件包时必须格外小心,因为一个软件包中的习惯用法并不总是适用于另一个软件包。Symphy告诉您它不知道如何处理array对象。我认为您需要一次一个地解包数组元素,以解算和构建解向量*并将变量名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)     

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

from pylab import *
from random import *

改进后的代码是:

import matplotlib
import matplotlib.pyplot as plt
import random
# from mpl_toolkits import mplot3d
# import pandas as pd
from scipy.optimize import fsolve
import sympy as sy
import numpy as np

mdoth = 0.004916
cph = 1008
nsh = .598
hh= 86.68
Ash = .02
n=127
alpha = .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




II, Qc, Qh, Tc, Th, Tinfcout, Tinfhout = sy.symbols('II, Qc, Qh, Tc, Th, Tinfcout, Tinfhout')

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((sy.Eq(Qh,mdoth * cph * (Tinfhin - Tinfhout) ),
            sy.Eq(Qh,nsh * hh * Ash * ((Tinfhin + Tinfhout)/2 - Th)),
            sy.Eq(Qh,n * (alpha * II * Th - 0.5 * (II**2) * ree + (Ke * (Th-Tc)))), 
            sy.Eq(Qc,n * (alpha * II * Tc + 0.5 * (II**2) * ree + (Ke * (Th-Tc)))),
            sy.Eq(Qc,nsc * hc * Asc * (Tc - (Tinfcin + Tinfcout)/2) ),
            sy.Eq(Qc,mdotc * cpc * (Tinfcout - Tinfcin) ),
            sy.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


hin = np.linspace(0, 200, 20)
cin = np.linspace(0, 200, 20)
X, Y = np.meshgrid(hin,cin)
Z = solver(X,Y)

ZZ = []

for _ in range(0, len(Z)):
    ZZ.append(Z)
    
ZZ = np.array(ZZ, dtype='float')

fig, ax = plt.subplots(figsize=(8, 8), subplot_kw={"projection": "3d"})
ax.plot_surface(X, Y, ZZ, rstride=1, cstride=1, cmap = 'plasma', antialiased=False)

ax.set_xlabel("TC")
ax.set_ylabel("Ambient")
ax.set_zlabel("Voltage")
ax.view_init(0, 180)
fig.tight_layout()
plt.show()

数字是

enter image description here

我使用了@smichr生成的函数

相关问题 更多 >