Методът на Нютон се корени в Matlab

Нямам толкова много опит с Matlab. Просто ми трябва за решаването на някои дълги нелинейни уравнения. Вместо да използвам fzero, искам да използвам Нютон-Рафсън за решаване на уравнението.

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);

Може ли някой да ми помогне да преодолея това?


person India Slaver    schedule 04.12.2014    source източник
comment
Имате ли конкретна причина да не използвате fzero/fsolve на MAtlab?   -  person Kostya    schedule 04.12.2014


Отговори (1)


Вероятно можете да използвате fsolve на Matlab (http://uk.mathworks.com/help/optim/ug/fsolve.html) с няколко опции

x0 = 9;
options = optimoptions('fsolve','Algorithm','levenberg-marquardt','TolFun',5*10^-6,'MaxIter',100);
x = fsolve(@(x)(exp(x) + x^3), x0,options);

или просто fzero (http://uk.mathworks.com/help/optim/ug/fzero.html), който прилага BD алгоритъм

x = fzero(@(x)(exp(x) + x^3), x0);
person Kostya    schedule 04.12.2014
comment
Можете ли да погледнете тази моя публикация? - person India Slaver; 04.12.2014
comment
Имате предвид въпроса си по-горе? - person Kostya; 04.12.2014
comment
Не, прости ми. Забравих да поставя линка. Моля, вижте тази публикация от мен. stackoverflow.com/questions/27251770/ - person India Slaver; 04.12.2014