Nugroho's blog.: Searching Multiple Roots Numerically.

Friday, April 21, 2017

Searching Multiple Roots Numerically.

This Python code only works with function that crossing x-axis.

The idea is we started from x=0 and walking to the positive direction and evaluating f(x) as we walk.

If there's change of the sign of f(x) from + to -, or vice versa, there must be a root in that area.

We began to surround it to find the-x that correspond to f(x)=0. That x value is the root.

After the root is found, we began to walk along x-axis again until found any sign change of f(x), or until x limit set on code.


Here's the code, I use Pythonista on my iPad and, because I use cosine function, I got several root value.


import numpy as np

def f(x):
 return np.cos(x)

def findRoot(xa,xb):
 if f(xa)==0:
  print 'the root is a ', xa
 if f(xb)==0:
  print 'the root is b ', xb
 xc = (xa+xb)/2.
 while f(xc)>abs(1./64.):
  if f(xc)*f(xa)>0:
   xa = xc
  else:
   xb = xc
  xc = (xa+xb)/2.
  
 print 'the root is', xc

limit = 10
dx = 1./8.
xa = 0.
xb = 0.

while xb<limit:
 xb += dx
 if (f(xa)*f(xb)<0):
  print xa, f(xa), f(xb)
  findRoot(xa,xb)
 xa = xb
 
 


.




No comments:

323f (5) amp (1) android (12) apple (7) arduino (18) art (1) assembler (21) astina (4) ATTiny (23) blackberry (4) camera (3) canon (2) cerita (2) computer (106) crazyness (11) debian (1) delphi (39) diary (286) flash (8) fortran (6) freebsd (6) google apps script (8) guitar (2) HTML5 (10) IFTTT (7) Instagram (7) internet (12) iOS (5) iPad (6) iPhone (5) java (1) javascript (1) keynote (2) LaTeX (6) lazarus (1) linux (29) lion (15) mac (28) macbook air (8) macbook pro (3) macOS (1) Math (3) mathematica (1) maverick (6) mazda (4) microcontroler (35) mountain lion (2) music (37) netbook (1) nugnux (6) os x (36) php (1) Physicist (29) Picture (3) programming (189) Python (109) S2 (13) software (7) Soliloquy (125) Ubuntu (5) unix (4) Video (8) wayang (3) yosemite (3)