SymPy求解7元非线性方程组未获离散解问题咨询
问题:SymPy求解7元非线性方程组未得到离散值
尝试用SymPy求解包含7个方程的非线性方程组,期望得到mdot_Fluid的离散值,但运行代码后得到的是{mdot_Fluid: 8.99341199537194e-5*v_Fluid},而非预期的数值解。虽然方程组有7个方程和7个未知数,但结果显示系统仍欠定。
原代码如下:
import math from CoolProp.CoolProp import PropsSI import sympy as sym alpha_Fluid, Re_l, v_Fluid, mdot_Fluid, Nu_Fluid, Nu_l_lam, Nu_l_turb = sym.symbols('alpha_Fluid, Re_l, v_Fluid, mdot_Fluid, Nu_Fluid, Nu_l_lam, Nu_l_turb') ################################ Discrete Parameters ################################ fluid = 'Nitrogen'; p_Fluid = 1.1e5; T_Fluid = 80; T_ZP = 300; Pr_Fluid = PropsSI("PRANDTL",'P|gas', p_Fluid, 'T', (T_Fluid+T_ZP)/2, fluid); eta_Fluid = PropsSI("VISCOSITY",'P|gas', p_Fluid, 'T', (T_Fluid+T_ZP)/2, fluid); lambda_Fluid = PropsSI("CONDUCTIVITY",'P|gas', p_Fluid, 'T', (T_Fluid+T_ZP)/2, fluid); rho_Fluid = PropsSI("DMASS",'P|gas', p_Fluid, 'T', (T_Fluid+T_ZP)/2, fluid); Bi = 0.1; r_ZP = 7e-3; lambda_ZP = 230; L_ZP_Biot = r_ZP; L_ZP_KONV = (math.pi/2)*2*r_ZP; A_Inflow = 4e-3; A_Anstr = 2*math.pi*r_ZP*A_Inflow; Eq1 = sym.Eq((alpha_Fluid*L_ZP_Biot)/lambda_ZP, Bi) Eq2 = sym.Eq((alpha_Fluid*L_ZP_KONV)/lambda_Fluid, Nu_Fluid) Eq3 = sym.Eq(0.664*(Re_l)**(1/2)*Pr_Fluid**(1/3),Nu_l_lam) Eq4 = sym.Eq((0.037*Re_l**(0.8)*Pr_Fluid)/(1+2.443*Re_l**(-0.1)*(Pr_Fluid**(2/3)-1)), Nu_l_turb) Eq5 = sym.Eq(0.3 + (Nu_l_lam**2 + Nu_l_turb**2)**(1/2), Nu_Fluid) Eq6 = sym.Eq((rho_Fluid*v_Fluid*L_ZP_KONV)/eta_Fluid, Re_l) Eq7 = sym.Eq((mdot_Fluid*rho_Fluid)/A_Anstr, v_Fluid) result = sym.solve([Eq1, Eq2, Eq3, Eq4, Eq5, Eq6, Eq7],mdot_Fluid) print(result)
问题根源
错误出在Eq7的公式逻辑:质量流量的定义是mdot = 流体密度 × 流速 × 流通面积,即mdot_Fluid = rho_Fluid * v_Fluid * A_Anstr,但原代码中把公式写反了,写成了(mdot_Fluid*rho_Fluid)/A_Anstr = v_Fluid,这导致mdot_Fluid和v_Fluid仍为线性依赖关系,方程组并没有真正闭合,因此无法解出离散值。
修正方案
将Eq7的公式修正为正确的质量流量表达式:
Eq7 = sym.Eq(mdot_Fluid, rho_Fluid * v_Fluid * A_Anstr)
修正后重新运行代码,SymPy就能解出mdot_Fluid的离散数值解。
内容的提问来源于stack exchange,提问作者Malte Radecke
相关产品推荐
相关产品推荐

