如何解决nsolve 不会解决
我正在尝试根据温度创建曲面图。我需要将冷热温度输入到一个函数中,该函数为我们的“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,Tinfhout')
def solver(TH,TC):
Tinfhin = TH +273.15
Tinfcin = TC + 273.15
sols = sy.nsolve( (Eq(Qh,Eq(Qh,Eq(Qc,n * (alpha * II * Tc + 0.5 * (II**2) * ree + (Ke * (Th-Tc)))),nsc * hc * Asc * (Tc - (Tinfcin + Tinfcout)/2) ),mdotc * cpc * (Tinfcout - Tinfcin) ),Eq(II,(alpha * (Th - Tc))/(rL + ree) )),(II,Tinfhout),(1,5,300,330,330) )
result = sols[0]
return(result)
hin = linspace(0,100)
cin = linspace(0,100)
X,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)'''
这个问题的最佳解决方案是什么?
解决方法
在使用多个包时必须始终更加小心,因为一个中的习语并不总是适用于另一个。 SymPy 告诉您它不知道如何处理 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)),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)))),nsc * hc * Asc * (Tc - (Tinfcin + Tinfcout)/2) ),mdotc * cpc * (Tinfcout - Tinfcin) ),Eq(II,(alpha * (Th - Tc))/(rL + ree) )),(II,Qc,Qh,Tc,Th,Tinfcout,Tinfhout),(1,5,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,Tinfhout = sy.symbols('II,Tinfhout')
def solver(_TH,_TC):
TH = TH[0]
TC = TC[0]
Tinfhin = TH +273.15
Tinfcin = TC + 273.15
sols = sy.nsolve((sy.Eq(Qh,sy.Eq(Qh,sy.Eq(Qc,sy.Eq(II,330) )
rv.append(sols[0])
return rv
hin = np.linspace(0,200,20)
cin = np.linspace(0,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()
图是
我用过@smichr 的功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。