notes

/Home ....
....

trešdiena, 2014. gada 17. decembris

n-tās pakāpes saknes algoritms

Ar sekojošo Bisekcijas algoritmu atrod jebkuru n-tās pakāpes sakni racionālam (R) skaitlim. Iteratīvi tuvina rezultātu līdz trāpa vai sasniedz tuvāko iegūstamo reālā laikā. Protams, ja pielietojamas funkcijas kā SQRT vai celšana ^(1/n) daļskaitļa pakāpē, tad šis algoritms ir lieks.

' Ceļam 2^32 pakāpē 
b = 2
n = 32
S = pow(b,n)

print "Rēķinam ", n, "tās pakāpes sakni no ", S 

'Bisekcijas metode

'limitēsim iterāciju skaitu
const iMAX = 9999

' iegaumēsim zīmi
m = (S<0)
if(m) then
  S = -S   'meklēsim pozitīvo
end if

' var būt zem 1, tad intervāli otrādi
a = MIN( 1, S )
b = MAX( S, 1 )

for i = 1 to iMAX
  ' jauns viduspunkts
  c = (a + b)/2
  ' ceļam pakāpē lai pārbaudītu
  P = pow(c,n)
  If P = S then
    exit for
  EndIf

  if P>S then
    b = c
  else
    if P<S then
      a = c
    else
      'atradām un c ir sakne
      exit for 
    end if
  end if
next i

if(m) then
  S = -S
  c = -c
  'protams pāra pakāpes sakne
  ' no negatīva nav iespējama
end if

print "Sakne ir ", c, " , atrasts ",i, " iterācijās"

Rezultāti:

Rēķinam 32tās pakāpes sakni no 4294967296
Sakne ir 2 , atrasts 64 iterācijās

Rēķinam 32tās pakāpes sakni no 0.000244140625
Sakne ir 0.5 , atrasts 49 iterācijās

Rēķinam 17tās pakāpes sakni no -129140163
Sakne ir -3 , atrasts 78 iterācijās

'  sakne, kas ir maksimāli tuvināta
Rēķinam 9tās pakāpes sakni no 1.8014398509482e+16
Sakne ir 64 , atrasts 1000 iterācijās

Nav komentāru:

Ierakstīt komentāru