In this post, we learn about solving Algebraic Equation using Newton's Method (or) Newton-Raphson Method.

**Newton's Method:**

Given an approximate root of an equation, a closer approximation to the root can be found using Newton's Method.

Let a0 be the approximate root of the equation f(x)=0.

Let a be the exact root nearer to a0.

Then, a = a0 + h

where h is an integer with very small value.

Since a is the exact root of f(x)=0,

f(a) = f(a0+h) = 0

By Taylor's expression,

f(a) = f(a0+h) = f(a0) + hf'(a0) + (h^2/2!)f"(a0)+0000=0

Since, h is small, neglecting higher powers h^2, h^3,....etc, we get

f(a0) + hf'(a0) = 0

h = -(f(a0)/f'(a0))

a1 = a0 + h = a0 - (f(a0)/f'(a0))

a2 = a1 + h = a1 - (f(a1)/f'(a1))

Thus, we again get a sequence of approximate roots which converges to form the exact root on a few iterations depending on the required precision.

**Source Code:**

% this function that calculates solution of algebraic equation

% using Newton-Raphson method

**function**NewtonFunc(co,range)

% the variable prev stores the first approximate root of the eqn.

% here, we assume it to be the mean of the two points p1 and p2 (say)

% such that, f(p1)<0 and f(p2)>0

prev = (range(1) + range(2))/2;

% x is symbol var represented by 'x'

x=sym('x');

% the function 'f' is initialized

f=0;

% n gives the size of the coeff/: vector

[m,n]=size(co);

% in the loop below, we create the function 'f' using symbol 'x'

% from the coeff/: vector

**for**i = 1 : n

% the last element of co vector is the constant

**if**i == n

f = f + co(i);

**end**

% end of if i==n

% adding the terms of the function step by step

**if**co(i) ~= 0 && i ~= n

f = f + co(i)*(x^(n-i));

**end**

% end of if

**end**

%end of for

% infinite while loop

% where we find the sequence of approximate roots

**while**( 1 )

% finding the approximate root

% using Taylor's expansion (neglecting higher powers)

x0=prev-(subs(f,prev)/subs(diff(f),prev));

% when the required precision is obtained, break the loop

**if**abs( abs(prev) - abs(x0) ) < 0.000001

**break**;

**end**

% end of if

% assigning previous value

prev=x0;

**end**

% end of while

disp(x0);

**end**

% end of function

## 0 comments:

## Post a Comment

தங்களது கருத்துக்களை இங்கே வெளியிடவும்...