Я использую алгоритм Newton Raphson + next Substitute для выполнения вычисления флэш-памяти (имитация химического процесса).Почему алгоритм терпит неудачу при увеличении точности числа? Как можно уменьшить чувствительность алгоритма до точности числа?
Алгоритм может хорошо сходиться, когда вход находится в низкой точности, например 0,1, но при увеличении точности числа до 0,11111 или 0,99999. Алгоритм не сходится.
Когда я использую метод квази-Ньютона с обновлением BFGS, та же проблема возникает снова. Как можно уменьшить чувствительность кода к числовой точности?
Вот простой пример использования Matlab для решения уравнения Рахфорда-Райса. Когда comp_overall = [0,9,1-0,9], он сходится хорошо. Однако, когда точность числа увеличивается, как [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] (https://en.wikipedia.org/wiki/Newton's_method)? – tar
Вам нужно будет опубликовать код. Фактический алгоритм сходится обязательно так. Но в основном у вас есть ошибка в вашем коде где-то, что вызывает у него проблемы. – Tatarize