Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Need help editing my Newton Raphson Code

Asked by Matthew on 18 Nov 2012
function [r,N]= newtonraphe7(fHan,x0,fTol,iterMax)
iterations=0;
max_no_roots=size(fHan,2);
r=0;
N=0; 
for no_roots=1:max_no_roots-1
    fun_root_new=x0;
    flag=1;
    coeff_der_function=derivate(fHan);
    order_fun=size(fHan,2);
    order_der_fun=size(coeff_der_function,2);
    while flag==1
        fun_root_old=fun_root_new;
        fx=0;
        dfx=0;
        nonzero=1;
        while nonzero==1
            powers=order_fun-1;
            for index=1:order_fun
                fx=fx+fHan(index)*fun_root_old^powers;
                powers=powers-1;
            end
            powers=order_der_fun-1;
            for index=1:order_der_fun
                dfx=dfx+coeff_der_function(index)*fun_root_old^powers;
                powers=powers-1;
            end
            if dfx==0
                fun_root_old=fun_root_old+1;
            else
                nonzero=0;                
            end                
        end
        iterations = iterations + 1;
        fun_root_new = fun_root_old - fx/dfx;
        if iterations >= iterMax 
            flag=0;
        elseif  abs(fun_root_new-fun_root_old)<=fTol 
            flag=0;
            r(no_roots)=fun_root_new;
            N(no_roots)=fx;
        end
    end
   end

I am trying to implement the Newton-Raphson algorithm to solve nonlinear algebraic equations. My function, newtonRaphE7, finds a real root of the nonlinear algebraic equation f(x) = 0, using a Newton-Raphson algorithm.

Input arguments:

  • • fHan: function handle to f(x)
  • 
• dfHan: function handle to f′(x) = df(x)/dx,
  • 
• x0: scalar, double, representing an initial guess, x0,

  • • fTol: tolerance for stopping criterion, i.e., f(r) ≤ fTol,
  • • iterMax: maximum number allowed iterations.

Output Arguments

  • • r: the final root estimate obtained by the algorithm,

  • • rHist: a vector containing the sequence of estimates including the initial guess x0,
  • • N: the total number of performed iterations,
  • • fRoot: the absolute value of the function f(x) at r, i.e., fRoot = f(r)
  • If the initial guess, x0 satisfies the stopping criterion, then the root r should be returned as x0, and N should be 0 since no actual iterations were performed.

In general, rHist contains the sequence of estimates x0, x1, x2, . . . , that are calculated by the algorithm. The first element of rHist should be x0, therefore the value returned in N should be equal to length(rHist)-1. In the case N ≥ 1, the function should compute the root, rE, using the MATLAB function fzero. Treat rE as the “exact” root, and produce a plot (using semilogy) of the absolute error (i.e., rHist − rE) as a function of iteration (i.e., 0:N).

I don’t know how to in cooperate the variables “dfHan”and “froot” and “rHist” into my function. Can someone help? Thanks!

2 Comments

bym on 18 Nov 2012

At first blush, your code seems more complicated than the ordinary Newton Raphson implementation. I also don't see where you have implemented the function 'fzero'

Matthew on 19 Nov 2012

Yeah, I originally just tried the Newton Raphson but my instructor told me that I needed to add the extra variables in there. I don't see HOW to include them in there though ...

Matthew

Products

No products are associated with this question.

0 Answers

Contact us