2014-12-04 7 views
0

Я не так много переживаю с 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); 

Может ли кто-нибудь помочь мне пройти через это?

+0

У вас есть особая причина не использовать MAZLAB fzero/fsolve? – Kostya

ответ

0

Вы, вероятно, можно использовать 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); 
+0

Можете ли вы посмотреть мой пост? –

+1

Вы имеете в виду ваш вопрос выше? – Kostya

+0

Нет, простите меня. Я забыл вставить ссылку. Пожалуйста, посмотрите на это сообщение от меня. http://stackoverflow.com/questions/27251770/converting-symbolic-expression-to-function-handle-in-matlab-r2013b?noredirect=1#comment43017237_27251770 –