最小二乘法求解n=p非线性方程组:解违反约束问题咨询
非线性方程组最小二乘求解发散及变量负值问题求助
本人为博士生,正研究含物理意义的非线性方程组求解问题:
- 输入变量:A、B、Cf、Jp、ks、Pp、R、T
- 输出变量:Jw、Js、Cm、Cp、Pf
相关代码
import numpy as np from scipy.optimize import least_squares from math import exp A = 0.0027 #m/s.bar-1 B = 1.19e-08 #m/s R = 0.0821 #L.bar/mol.K T = 25+273 #K Qp = 140 #L/h S_membrane= 14 #m² Jp = (Qp*(1e-3/3600))/(S_membrane) #m/s Pp = 0.45 #bar Cf = 7 #kg/m3 def equations(vars): Js,Jw,Cp,Cm,Pf = vars return( Jw - A*(Pf - Pp - 2*R*T*(Cm*17.11 - Cp*17.11)), Js - B*(Cm - Cp), Cp - (Js*1000)/Jw, (Cm - Cp)/(Cf - Cp) - exp(Jw/ks), Jp - Js/1000 - Jw )
求解设置
采用最小二乘法求解,初始向量及变量边界设置如下:
x0 = np.array([ 1e-8, #Js 1e-6, #Jw 0.001, #Cp 8, #Cm 13 #Pf ]) Xmin = np.array([ 1e-9, #Js 1e-7, #Jw 0.000001, #Cp 1.01*Cf, #Cm 10 #Pf ]) Xmax = np.array([ 1e-7, #Js 1e-4, #Jw 0.1, #Cp 500, #Cm 18 #Pf ])
调用least_squares方法:
res = least_squares( equations, x0, method='trf', xtol=1e-13, ftol=1e-13, max_nfev=5000, verbose=1 ) print(res.active_mask) print(res.message) print(res.success)
运行结果
The maximum number of function evaluations is exceeded. Function evaluations 5000, initial cost 2.1240e+02, final cost 3.3402e-11, first-order optimality 4.10e-01. [0. 0. 0. 0. 0.] The maximum number of function evaluations is exceeded. False Cf : 7 Cm : 6.964735678220357 Cp : 6.8969269139880875 Jw : -5.395451652744672e-06 Js : -3.721203572887036e-08 Jp : 2.7777777777777775e-06 dP : 57.21883313421709
疑问与求助
当前求解存在以下问题:
- 迭代达到最大函数评估次数仍未收敛,系统发散
- Jw、Js出现负值,违反物理意义及预设的边界约束
- 尝试'trf'、'lm'、'dogbox'等方法后结果类似
恳请提供解决思路。
内容的提问来源于stack exchange,提问作者Mich
相关产品推荐
相关产品推荐

