Dr. Baranyai László, fénykép

Dr. Baranyai László

 

Gyökvonáshoz Scilab függvények

febr 24, 13:28, |

 

Nemrég kezdtem az ismerkedést a Scilab programmal, melynek az 5.4.0 verzióját sikeresen telepítettem openSUSE Linux alá. A nyelvezete hasonlít a Matlab-ra, de azért akadnak eltérések. A tesztelést a gyökvonás függvényekkel kezdtem.

Newton féle gyökvonás

A négyzet- és köbgyök számítás egyszerű módja a Newton-féle iteráció alkalmazása. Ezt egy korábbi bejegyzésben már bemutattam JavaScript alapon (lásd "Tippek és trükkök" 2010). Az algoritmus gyorsan konvergál a célértékhez, pár lépésben már kielégítő pontosságú eredményt ad. Újdonság más gyökvonás algoritmusokhoz képest, hogy nem a számábrázolás határozza meg a számítás pontosságát, hanem ezt a felhasználó kezébe adom. A gyökvonás függvény második paramétere az elvárt pontosság, amely egyben a végeredmény kerekítését is meghatározza.

A négyzetgyök számítás módját a következő nr2() függvény mutatja be:

// Square root calculation
function [rv]=nr2(Number,Accuracy)
 myGuess = Number/2
 myDiff = Accuracy*2
 while myDiff>Accuracy
  myGuess = (myGuess + Number/myGuess)/2
  myDiff = abs(myGuess^2 - Number)
 end
 rv = round(myGuess/Accuracy)*Accuracy
endfunction

A Scilab szerkesztőjét csak dicsérni tudom, jó a szintaxis kiemelése és automatikusan kiegészíti a vezérlő struktúrákat, zárójeleket. A tesztelések során nem tapasztaltam, hogy a ciklusba épített abs() függvény lassította volna a kalkulációt.

A köbgyök számítás módját a következő nr3() függvény mutatja be:

// Cubic root calculation
function [rv]=nr3(Number,Accuracy)
 myGuess = Number/3
 myDiff = Accuracy*2
 while myDiff>Accuracy
  myGuess = (2*myGuess + Number/myGuess^2)/3
  myDiff = abs(myGuess^3 - Number)
 end
 rv = round(myGuess/Accuracy)*Accuracy
endfunction

A függvények nem írnak a konzolra, csak visszaadják a keresett értéket (rv = Return Value). Használatuk egyszerű. Ellenőrizzük le a működését a beépített sqrt() függvény segítségével:

-->sqrt(99)
 ans  =
 
    9.9498744  
 
-->nr2(99,0.0001)
 ans  =
 
    9.9499

A fenti forráskódokat nem szükséges CTRL-C és CTRL-V átmásolni, töltse le innen és futtassa: