首页 > 解决方案 > 如何求解混合微分方程?或者如何在第一次迭代中分配 dPsdt = o 并在迭代后获得值

问题描述

错误生成如下: UnboundLocalError: local variable 'dPsdt' referenced before assignment

dL1dt = (m_si*(h1-hf) + pi*di*alphai_1*L1*(Tm1-Ts1) - d13*dPsdt)/d11
dL2dt = (m_si*hf-m_so*hg + pi*di*alphai_2*L2*(Tm2-Ts2)- d21 * dL1dt -d23*dPsdt- 
          d24*dhodt)/d22
dPsdt = (m_so*(hg-ho) + pi*di*alphai_3*L3*(Tm3-Ts3)-d31*dL1dt-d32*dL2dt - 
        d34*dhodt)/d33
dhodt = (m_si - m_so -(d41*dL1dt) - (d42*dL2dt) - (d43*dPsdt))/d44 

dzdt = [dL1dt, dL2dt, dPsdt, dhodt, dTm1dt, dTm2dt, dTm3dt, dTp1dt, dTp2dt, dTp3dt]

return dzdt

标签: differential-equations

解决方案


似乎您的导数是由某些线性系统隐式定义的

A*dxdt = b

您尝试通过 Gauss-Seidel 迭代来解决。这必须实际实现为迭代,即多次遍历方程组。请注意,您需要像对角线优势这样的收敛条件,以便完全有效。

但是对于这些小尺寸,您可以通过使用更快、更精确

dxdt = nump.linalg.solve(A,b)

推荐阅读