У меня есть приведенный ниже код matlab для метода Newton raphson.Метод Ньютона Рафсона
a=1;b=4;c=-2;d=0;h=0.5;t=1;
x0 = -0.5+2i;
i = 1;
N = 100; %maximum number of iterations
tol = 1e-4; %precision required
syms x
p = @(x) x^2+a*x+b-c*exp(-x*h)-d*exp(-x*t);
f = @(x) a*x+b-lambertw(a*x+b-p*exp(a*x+b)); %function we are solving
df = diff(f); %differential of f(x)
while i <= N
numf = subs(f,x,x0); %// Numerator - Substitute f(x) for f(y)
denf = subs(df,x,x0);
x = x0-double(numf)/double(denf); %Newton-Raphson method
if (abs(x - x0)/abs(x))>tol %stopping criterion
fprintf('Solution is %f \n', double(x))
return
end
i = i + 1;
x0 = x; %update p0
end
fprintf('Solution did not coverge within %d iterations at a required precision of %d \n', N, error) %error for non-convergence within N iterations
Когда я побежал это дает ошибку ниже:
- Ошибки использование mupadmex Ошибки в команде MuPAD: DOUBLE не может преобразовать выражение ввода в двойной массив.
- Ошибка использования diff Функция 'diff' не поддерживается для класса 'function_handle'. Ошибка в строке 10 diff = diff (f);
% дифференциал f (х)
Я не знаю, как исправить эти ошибки. Помощь действительно ценится.
Raplace 10 строка на df = diff (f (x)); и будет рассмотрен с последней строкой. –
Спасибо. Он работал для второй ошибки, но первая ошибка все еще остается. – user3563283
Это странно. Какова ваша версия matlab и покажите модифицированную версию кода. Мои показания: Решение 0.043026 –