使用删除值时出现内存错误同解算器

2024-10-01 11:22:13 发布

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

嘿,我试着从几个方程中用同解算器. 你知道吗

这里没有给出的一些值是从excel表中导入的

R = 0.287
cp = 1
cv = 0.714
kappa = cp/cv
v_r1 = 438.15
p_r1 = 2.264

b = Symbol('b')

for k in range(4):
    T1[k] = T1_c[k] + 273.15
    P2[k] = P1[k]*(epsilon**(kappa))
    T2[k] = T1[k]*(epsilon**(kappa-1))
    a[k] = P3[k]/P2[k]
    P4[k] = P3[k]
    T3[k] = a[k]*T2[k]
    W_i[k] = P_mi[k]*V_s[k]
    wi[k] = W_i[k]/((P1[k]*V1[k])/(R*T1[k]))

w12 = -cv*(T2[0]-T1[0])
w34 = cv*T1[0]*(kappa-1)*(epsilon**(kappa-1))*a[0]*(b-1)
w45 = cv*T1[0]*(((epsilon**(kappa-1))*a[0]*b)-(a[0]*(b**(kappa-1))))
expr1 = w34 + w45 - np.abs(w12) - wi[0]
b1 = solve((w34 + w45 - np.abs(w12) - wi[0]), b, quick=True, warn=True)

这是运行代码后收到的错误:

   h.append(f.get((k,), K.zero))

MemoryError

有没有人知道使用这个解算器是否可以驱动b?任何信息将不胜感激!!你知道吗


Tags: cpcv算器t1p2kappap3r1
1条回答
网友
1楼 · 发布于 2024-10-01 11:22:13

由于这个问题有很多未声明的变量,我只是添加了必要的声明和一些随机值来获得更多的见解。你知道吗

我的随机参数给出了expr1的表达式,如下所示:

-42730504.6501296*b**0.400560224089636 + 1495543.03214645*b - 428340.625314184

辛比的解决方案因此陷入记忆障碍。你知道吗

当sympy试图找到精确的符号解,而我们正在处理不精确的浮点时,一个更好的策略似乎是尝试用数值方法来解决这个问题。Sympy有一个函数lambdify,用于将其表达式转换为可以用数字表示的函数。你知道吗

fb = lambdify(b, expr1, 'numpy')将expr1转换为函数fb(x),现在可以作为任何普通python函数调用。例如,你可以用它来绘图,看它是否有意义,以及它在哪里达到零。你知道吗

我试着给scipy的非线性解算器打电话,但他也不喜欢这个方程。RuntimeWarning: The iteration is not making good progress, as measured by the improvement from the last ten iterations.但也许这是因为我的随机数没有意义。我建议您尝试使用scipy的solve和它的nonlinear solvers。你知道吗

正如@Oscar Benjamin在评论中提到的,sympy还有一个数值解算器,它能给出一个解,尽管它是一个复数。(如果需要复数解,文档建议给nsolve一个复数作为初始值。)Sympy的solve和scipy的fsolve只搜索实值解。你知道吗

目前还不清楚复杂的值对于您试图解决的问题是否有用,也不清楚我对参数的模拟是否有任何意义。你知道吗

from sympy import *
import random

R = 0.287
cp = 1
cv = 0.714
kappa = cp/cv
v_r1 = 438.15
p_r1 = 2.264

b = Symbol('b')

T1 = [None] * 4
T2 = [None] * 4
T3 = [None] * 4
P2 = [None] * 4
P4 = [None] * 4
a = [None] * 4
W_i = [None] * 4
wi = [None] * 4
P1 = [random.random() for _ in range(4)]
P3 = [random.random() for _ in range(4)]
T1_c = [random.random() for _ in range(4)]
P_mi = [random.random() for _ in range(4)]
V1 = [random.random() for _ in range(4)]
V_s = [random.random() for _ in range(4)]

epsilon = 0.0001

for k in range(4):
    T1[k] = T1_c[k] + 273.15
    P2[k] = P1[k]*(epsilon**(kappa))
    T2[k] = T1[k]*(epsilon**(kappa-1))
    a[k] = P3[k]/P2[k]
    P4[k] = P3[k]
    T3[k] = a[k]*T2[k]
    W_i[k] = P_mi[k]*V_s[k]
    wi[k] = W_i[k]/((P1[k]*V1[k])/(R*T1[k]))

w12 = -cv*(T2[0]-T1[0])
w34 = cv*T1[0]*(kappa-1)*(epsilon**(kappa-1))*a[0]*(b-1)
w45 = cv*T1[0]*(((epsilon**(kappa-1))*a[0]*b)-(a[0]*(b**(kappa-1))))
expr1 = w34 + w45 - Abs(w12) - wi[0]
print(expr1)
sol = nsolve(expr1, b, 1)
print(sol)

fb = lambdify(b, expr1, 'numpy')

from scipy.optimize  import fsolve
sol = fsolve(fb, 0)

相关问题 更多 >