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

New to MATLAB?

Need help editing my Newton Raphson Code

Asked by Matthew

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

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

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

Matthew

Products

No products are associated with this question.

0 Answers

Contact us