我只想解这里提到的氨溶液的ph值。
这里详细介绍了完整的方程式,下面是我的数值解:
import numpy as np
import scipy.optimize as optimize
C = np.array([0, 0, 0.1, 0])
N = np.array([
[1, 1, 0, 0],
[0, 1, -1, 1]
])
K = np.array([1E-14, 1.77E-5])
def eq1(X):
return N.transpose() @ np.array(X) + C
def eq2(X):
return N @ np.log(eq1(X)) - np.log(K)
X = optimize.fsolve(eq2, [1E-14, 1E-14])
print("X=",X)
print("Y=",eq1(X))
但我得到了这些警告:
RuntimeWarning: invalid value encountered in log
return N @ np.log(eq1(X)) - np.log(K)
/usr/local/lib64/python3.6/site-packages/scipy/optimize/minpack.py:175: RuntimeWarning: The iteration is not making good progress, as measured by the
improvement from the last ten iterations.
warnings.warn(msg, RuntimeWarning)
X= [2.39338797e-06 2.27841240e-05]
Y= [2.39338797e-06 2.51775120e-05 9.99772159e-02 2.27841240e-05]
这个问题对于fsolve来说很棘手,因为在正确的解决方案中 [7.57E-12 1.32E-3]
x1太接近零。
我尝试了其他初始值 [1E-7, 1E-7]
, [1E-1, 1E-1]
,等等,没有人能避免这一点,直到我尝试了接近正确答案的配对,例如。 [1E-12, 1E-3]
.
fsolve是否有任何参数可以避免此类问题?或者有什么方法可以给出一个合适的初始值?
1条答案
按热度按时间o75abkj41#
试试这个安排
与剩余验证