如何求解混合微分方程?或者如何在第一次迭代中分配dPsdt = o,它将在迭代后获得价值

时间:2018-12-20 15:23:48

标签: differential-equations

错误生成如下:UnboundLocalError:赋值之前引用了本地变量'dPsdt'

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

1 个答案:

答案 0 :(得分:0)

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

A*dxdt = b
您尝试通过Gauss-Seidel迭代解决的

。您实际上必须将其实现为迭代,即在方程组上进行多次传递。请注意,您需要像对角线优势那样的收敛条件,这样才能起作用。

但是对于这些小尺寸,您可以通过使用

更快,更精确
dxdt = nump.linalg.solve(A,b)