Я не так много переживаю с Matlab. Мне просто нужно это ради решения некоторых длинных нелинейных уравнений. Вместо того, чтобы использовать fzero
, я хочу использовать уравнение Ньютона-Рафсона для решения уравнения.Метод метода Ньютона на Matlab
newton.m
файл содержит следующий код.
function [ x, ex ] = newton(f, df, x0, tol, nmax)
if nargin == 3
tol = 1e-4;
nmax = 1e1;
elseif nargin == 4
nmax = 1e1;
elseif nargin ~= 5
error('newton: invalid input parameters');
end
x(1) = x0 - (f(x0)/df(x0));
ex(1) = abs(x(1)-x0);
k = 2;
while (ex(k-1) >= tol) && (k <= nmax)
x(k) = x(k-1) - (f(x(k-1))/df(x(k-1)));
ex(k) = abs(x(k)-x(k-1));
k = k+1;
end
end
И в главном файле, я назвал эту функцию следующим образом:
ext_H = newton(exp(x) + x^3, diff(exp(x) + x^3), 9, 0.5*10^-5, 10);
Когда я запускаю эту функцию, она дает мне следующее сообщение об ошибке.
Error using sym/subsref (line 9)
Error using maplemex
Error, (in MTM:-subsref) Array index out of range
Error in newton (line 37)
x(1) = x0 - (f(x0)/df(x0));
Error in main (line 104)
ext_H = newton(exp(x) + x^3, diff(exp(x) + x^3), 9, 0.5*10^-5, 10);
Может ли кто-нибудь помочь мне пройти через это?
У вас есть особая причина не использовать MAZLAB fzero/fsolve? – Kostya