想要构建一个python编程,目的是求解一系列的微分方程,但是这个方程又很复杂,可以按以下简化步骤考虑。
比如微分方程组大概有很多组,其中一组是dX/dt=C*R,C和R都是矩阵形式,其中C是19x21的矩阵,R是21x1的矩阵,并且矩阵R的各个元素是由很多未知参数组成的代数式形式的东西,如下面代码所示。X是由这个R里面的未知元素构成的组合,这种如何用代码求解方程实现呢?
应该下面的未知数定义成数组还是什么呢?如果定义成数组,矩阵R的形式就不是21x1,就变成了一个三维数组,在与矩阵C做点乘的时候就会出现报错。
R=np.array([[3*S_o*(X_s/X_h)*X_h/(0.2+S_o)/(0.1+X_s/X_h)],
[3*0.6*0.2*S_no*(X_s/X_h)*X_h/(0.2+S_o)/(0.5+S_no)/(0.1+X_s/X_h)],
[3*0.4*0.2*0.5*(X_s/X_h)*X_h/(0.2+S_o)/(0.5+S_no)/(0.1+X_s/X_h)],
[6*S_o/(0.2+S_o)*S_f/(4+S_f)*S_f/(S_a+S_f)*S_nh/(0.05+S_nh)*S_po/(0.01+S_po)*S_alk/(0.1+S_alk)*X_h],
[6*S_o/(0.2+S_o)*S_a/(4+S_a)*S_a/(S_a+S_f)*S_nh/(0.05+S_nh)*S_po/(0.01+S_po)*S_alk/(0.1+S_alk)*X_h],
[6*0.8*0.2/(0.2+S_o)*S_no/(0.5+S_no)*S_f/(4+S_f)*S_f/(S_a+S_f)*S_nh/(0.05+S_nh)*S_po/(0.01+S_po)*S_alk/(0.1+S_alk)*X_h],
[6*0.8*0.2/(0.2+S_o)*S_no/(0.5+S_no)*S_a/(4+S_a)*S_a/(S_a+S_f)*S_nh/(0.05+S_nh)*S_po/(0.01+S_po)*S_alk/(0.1+S_alk)*X_h],
[3*0.2/(0.2+S_o)*0.5/(0.5+S_no)*S_f/(4+S_f)*S_alk/(0.1+S_alk)*X_h],
[0.4*X_h],
[3*S_a/(4+S_a)*S_alk/(0.1+S_alk)*X_pp/X_pao/(0.01+X_pp/X_pao)*X_pao],
[1.5*S_o/(0.2+S_o)*S_po/(0.2+S_po)*S_alk/(0.1+S_alk)*X_pha/X_pao/(0.01+X_pha/X_pao)*(0.34-X_pp/X_pao)/(0.01+0.34-X_pp/X_pao)*X_pao],
[1.5*S_o/(0.2+S_o)*S_po/(0.2+S_po)*S_alk/(0.1+S_alk)*X_pha/X_pao/(0.01+X_pha/X_pao)*(0.34-X_pp/X_pao)/(0.01+0.34-X_pp/X_pao)*X_pao*0.6*0.2/S_o*S_no/(0.5+S_no)],
[1*S_o/(0.2+S_o)*S_nh/(0.05+S_nh)*S_po/(0.01+S_po)*S_alk/(0.1+S_alk)*X_pha/X_pao/(0.01+X_pha/X_pao)*X_pao],
[1*S_o/(0.2+S_o)*S_nh/(0.05+S_nh)*S_po/(0.01+S_po)*S_alk/(0.1+S_alk)*X_pha/X_pao/(0.01+X_pha/X_pao)*X_pao*0.6*0.2/S_o*S_no/(0.5+S_no)],
[0.2*X_pao*S_alk/(0.1+S_alk)],
[0.2*X_pp*S_alk/(0.1+S_alk)],
[0.2*X_pha*S_alk/(0.1+S_alk)],
[1*S_o/(0.5+S_o)*S_nh/(1+S_nh)*S_po/(0.01+S_po)*S_alk/(0.5+S_alk)*X_aut],
[0.15*X_aut],
[1*S_po*X_meoh],
[0.6*X_mep*S_alk/(0.5+S_alk)]])