【发布时间】:2017-01-25 21:02:02
【问题描述】:
我正在使用 Newton Raphson +successive Substitute 算法进行快速计算(化学过程模拟)。
当输入是0.1这样的低精度时,算法可以很好地收敛,但是当数字精度增加到0.11111或0.99999时。算法不会收敛。
当我使用带有 BFGS 更新的准牛顿法时,同样的问题再次出现。我们如何降低代码对数值精度的敏感性?
这是一个使用 matlab 求解 Rachford-Rice 方程的简单示例。当 comp_overall=[0.9,1-0.9] 时,它收敛得很好。但是,当数字精度增加到 like[0.99999,1-0.99999] 时。它不会收敛。
K=[0.053154011443159 34.234731216532658],
comp_overall= [0.99999 1- 0.99999], phi=0.5; %initial values
epsilon = 1.0;
iter1 = 1;
while (epsilon >=1.e-05)
rc=0.0;
drc=0.0;
for i=1:2
% Rachford-Rice Equation
rc = comp_overall(i)*(K(i)-1.0)/(1.0+phi*(K(i)-1.0))+rc;
% Derivative
drc = comp_overall(i)*(K(i)-1.0)^2/(1.0+phiK(i)-1.0))^2+drc;
end
% Newton-Raphson
phi1 = phi +0.01 (rc / drc);
epsilon = abs( (phi1-phi)/phi );
% Convergence
phi = phi1;
iter1=iter1+1;
end
【问题讨论】:
-
你的意思是Newton-Raphson?
-
您需要发布代码。实际算法必然如此收敛。但是,基本上你的代码中有一个错误导致它出现问题。
标签: algorithm matlab precision numerical