math-utils
TOC »
- math-utils
- Documentation
- Miscellaneous Math Functions
- Usage
- fppred
- fpsucc
- log-with-base
- log/base
- degree->radian
- radian->degree
- prime?
- primes
- coprime?
- pairwise-coprime?
- fxcoprime?
- simple-interest
- compound-interest
- fibonacci
- *fibonacci
- fibonacci/memo
- *fibonacci/memo
- fibonacci/approximate
- binomial
- *binomial
- binomial/memo
- *binomial/memo
- cross-ratio
- ~=
- chinum
- *chinum
- square
- sqr
- cube
- cub
- minimum ((list-of number) -> number))
- maximum ((list-of number) -> number))
- range-value ((list-of number) -> number))
- *average
- average
- average*
- least-squares
- euclidian-distance
- manhattan-distance
- factorial
- *factorial
- factorial/memo
- *factorial/memo
- factorial-
- *factorial-
- factorial+
- *factorial+
- harmonic
- *harmonic
- harmonic/memo
- *harmonic/memo
- euclidian-distance
- manhattan-distance
- to-places
- @prec
- slope
- delta-slope
- fxrnd
- big-pi
- big-sigma
- prod
- summ
- Integration Functions
- Regession Functions
- Miscellaneous Vector Math Functions
- Miscellaneous Math Functions
- Examples
- Requirements
- Author
- Repository
- Version history
- License
Documentation
Miscellaneous Math Functions
Usage
(import math-utils)fppred
fpsucc
- fppred F #!optional Nprocedure
- fpsucc F #!optional Nprocedure
Returns the Nth predecessor or successor of a floating-point number.
- F
- float ; inexact point ;
- N
- integer ; distance to move point ; default 1
log-with-base
log/base
- log-with-base Bprocedure
- log/base Bprocedure
Returns a function for the base B logarithm.
degree->radian
radian->degree
- degree->radian Nprocedure
- radian->degree Nprocedure
Convert between radians & degrees.
- N
- real
prime?
- prime? Nprocedure
Is N prime?
- N
- integer
primes
- (primes [N 2]) -> (-> integer)procedure
Returns an infinite generator for the primes from N, which must be a prime.
(define (generate-primes n) (assert (integer? n) 'generate-primes "bad argument type - not integer" n) (assert (not (negative? n)) 'generate-primes "bad argument type - not positive" n) (let ((i n) (ps (primes)) ) (lambda () (if (zero? i) #!eof (let ((p (ps))) (set! i (- i 1)) p ) ) ) ) )
coprime?
- (coprime? M [N0 ...]) -> booleanprocedure
Are the integers M N0 ... coprime?
pairwise-coprime?
- (pairwise-coprime? M [N0 ...]) -> booleanprocedure
Are the pairs of integers in M N0 ... coprime?
fxcoprime?
- fxcoprime? M Nprocedure
Are the fixnums M N coprime?
(import (only (srfi 1) filter iota)) (import (only (math-utils) fxcoprime?)) (define (coprimes n) (filter (cut fxcoprime? n <>) (iota (- n 1) 1)) )
(import (only (streams derived) stream-range stream-filter)) (import (only (math-utils) fxcoprime?)) (define (coprime-numbers-stream n) (stream-filter (cut fxcoprime? n <>) (stream-range 1 n)) )
simple-interest
- simple-interest RATE TIME #!optional PRINprocedure
The accumulation function, the principle is assumed 1. Returns the simple interest for the RATE over TIME.
- RATE
- number ; interest rate
- TIME
- number ; time period to cover
- PRIN
- number ; principle, default 1
compound-interest
- compound-interest RATE FREQ TIME #!optional PRINprocedure
The accumulation function, the principle is assumed 1. Returns the compound interest for the RATE, applied with FREQ, over TIME.
- RATE
- number ; interest rate
- FREQ
- number ; compounding frequency
- TIME
- number ; time period to cover
- PRIN
- number ; principle, default 1
(compound-interest 0.043 4 6 1500) ;=> 1938.84 ;rounded to 2 places
fibonacci
*fibonacci
fibonacci/memo
*fibonacci/memo
- fibonacci Nprocedure
- *fibonacci Nprocedure
- fibonacci/memo Nprocedure
- *fibonacci/memo Nprocedure
Returns fibonacci of integer N.
fibonacci/approximate
- fibonacci/approximate Nprocedure
Returns an approximate fibonacci of integer N, with an error of > 1 at N ~= 70.
binomial
*binomial
binomial/memo
*binomial/memo
- binomial N Kprocedure
- *binomial N Kprocedure
- binomial/memo N Kprocedure
- *binomial/memo N Kprocedure
Returns the number of combinations of length K in N.
- N1
- integer
- N2
- integer
cross-ratio
- cross-ratio N1 N2 N3 N4procedure
Returns the Cross-ratio of N1, N2 and N3, N4.
- N1
- number
- N2
- number
- N3
- number
- N4
- number
~=
- (~= A B [EPSILON 1e-05]) -> booleanprocedure
Does A approximately equal B?
chinum
*chinum
- chinum Nprocedure
- (*chinum N) -> fixnumsyntax
Returns 1 for even? and -1 for odd; (expt -1 N).
square
sqr
- square Nprocedure
- (sqr N) -> numbersyntax
cube
cub
- cube Nprocedure
- (cub N) -> numbersyntax
minimum ((list-of number) -> number))
- minimum LSprocedure
- LS
- (list-of number)
maximum ((list-of number) -> number))
- maximum LSprocedure
- LS
- (list-of number)
range-value ((list-of number) -> number))
- range-value LSprocedure
- LS
- (list-of number)
*average
- *average LSprocedure
- LS
- (list-of number)
average
- (average [N0 ...]) -> numberprocedure
- N0
- number
average*
- (average* [TREE ...]) -> numberprocedure
- TREE
- (tree-of number)
least-squares
- least-squares PNTSprocedure
Returns b & e such that y ~= b * x + e.
- PNTS
- (list-of (pair number number)) ; list of x,y pairs
euclidian-distance
- euclidian-distance X1 Y1 X2 Y2procedure
- X1 Y1
- number number ; start point
- X2 Y2
- number number ; end point
manhattan-distance
- manhattan-distance X1 Y1 X2 Y2procedure
- X1 Y1
- number number ; start point
- X2 Y2
- number number ; end point
factorial
*factorial
factorial/memo
*factorial/memo
- factorial Nprocedure
- *factorial Nprocedure
- factorial/memo Nprocedure
- *factorial/memo Nprocedure
- N
- integer
factorial-
*factorial-
- factorial- N FALLprocedure
- *factorial- N FALLprocedure
The falling factorial.
- N
- real
- FALL
- integer
factorial+
*factorial+
- factorial+ N RISEprocedure
- *factorial+ N RISEprocedure
The rising factorial.
- N
- real
- RISE
- integer
harmonic
*harmonic
harmonic/memo
*harmonic/memo
- harmonic Nprocedure
- *harmonic Nprocedure
procedure>(harmonic/memo N) -> real</procedure> <procedure>(*harmonic/memo N) -> real</procedure>
Result of Harmonic series expansion to N terms.
- N
- integer
euclidian-distance
- euclidian-distance X1 Y1 X2 Y2procedure
Distance between X1,Y1 and X2,Y2.
- X1 Y1
- number number ; from point
- X2 Y2
- number number ; to point
manhattan-distance
- manhattan-distance X1 Y1 X2 Y2procedure
Distance between X1,Y1 and X2,Y2.
- X1 Y1
- number number ; from point
- X2 Y2
- number number ; to point
to-places
@prec
- (to-places PREC (FUNC EXPR))syntax
- (@prec PREC EXPR [FUNC truncate])procedure
Truncate the result of (FUNC EXPR) to PREC decimal places.
- PREC
- fixnum ; precision
- FUNC
- symbol ; clip operation, i.e. round, etc.
- EXPR
- * ; value to clip
slope
- (slope P1|X1 P2|Y1 [X2 Y2]) -> numberprocedure
Slope of a line defined by 2 points, P1 & P2 or X1 Y1 & X2 Y2.
- P1 & P2
- (pair number number)
- X1 Y1 & X2 Y2
- number number
delta-slope
- slope DX DYprocedure
Slope of a line delta.
- DX}
- number ; change in x
- DY
- number ; change in y
fxrnd
- fxrnd #!optional LIMITprocedure
Return a random fixnum in the range [0 LIMIT).
- LIMIT}
- fixnum ; default most-positive-fixnum
big-pi
- (big-pi F N1 N2) -> numbersyntax
Product of F in N1 to N2.
- F
- (number -> number) ;
- N1
- number ; range start
- N2
- number ; range end
big-sigma
- (big-sigma F N1 N2) -> numbersyntax
Sum of F in N1 to N2.
- F
- (number -> number) ;
- N1
- number ; range start
- N2
- number ; range end
prod
- (prod VAR ([N1 [N2 [STEP]]]) BODY...) -> numbersyntax
Product of BODY... in N1 to N2, inclusive, by STEP. When N1 > N2 the STEP becomes negative.
- VAR
- symbol ; VAR bound to current N in BODY...
- BODY...
- number ;
- N1
- number ; range start
- N2
- number ; range end
- STEP
- number ; step size, positive, default 1
summ
- (summ VAR ([N1 [N2 [STEP]]]) BODY...) -> numbersyntax
Sum of BODY... in N1 to N2, inclusive, by STEP. When N1 > N2 the STEP becomes negative.
- VAR
- symbol ; VAR bound to current N in BODY...
- BODY...
- number ;
- N1
- number ; range start
- N2
- number ; range end
- STEP
- number ; step size, positive, default 1
Integration Functions
Usage
(import (math-utils integration))trapezoid
- trapezoid F A Bprocedure
Returns a function to calculate the area under F between A & B using the Trapezoid Rule. The function takes the number of estimations as an argument, larger for a "better" result.
- F
- (number -> number) ; function to integrate
- A
- number ; lower bound
- B
- number ; upper bound
simpson
- simpson F A B #!optional Nprocedure
Calculate the area under F between A & B
- F
- (number -> number) ; function to integrate
- A
- number ; lower bound
- B
- number ; upper bound
- N
- fixnum ; interval count, default 6.
Composite Simpson's 1/3 rule.
simpson/adaptive
- simpson/adaptive F A B EPSILONprocedure
- F
- (number -> number) ; function to integrate
- A
- number ; lower bound
- B
- number ; upper bound
- EPSILON
- real ; error threshold for result
gamma
- gamma N EPSILONprocedure
The gamma function at N.
- N
- real
- EPSILON
- real ; error threshold for result
Regession Functions
Usage
(import (math-utils regression))linear-regression
- linear-regression SRCprocedure
Returns the slope & intercept values of the line fitted to the data from SRC.
- SRC
- (or list vector (-> (or eof *)))
linear-extrapolator
- linear-extrapolator SRCprocedure
Returns a procedure taking the x coordinate of the line fitted to the data from SRC, and return the y.
- SRC
- (or (list-of real) (vector-of real) (-> (or eof real)))
big-sigma*
big-pi*
- big-sigma* SRC REDUCER ...procedure
- big-pi* SRC REDUCER ...procedure
Returns reduced values for each REDUCER, in order.
- SRC
- (or list vector (-> (or eof *)))
- REDUCER
- (#!rest * -> real)
accumulate-step
summs-accumulate-step
prods-accumulate-step
- (summs-accumulate-step (real real -> real) (list-of (#!rest * -> real)) (list-of real) *) -> (list-of real)procedure
- (prods-accumulate-step (real real -> real) (list-of (#!rest * -> real)) (list-of real) *) -> (list-of real)procedure
reduce-data
- reduce-data SRC ACC REDUCER ...procedure
Returns reduced values for each REDUCER, in order.
- SRC
- (or list vector (-> (or eof *)))
- ACC
- ((list-of (#!rest * -> 'a)) (list-of 'a) * -> (list-of 'a))
- REDUCER
- (#!rest * -> *)
Miscellaneous Vector Math Functions
Usage
(import (math-utils vector))absolute-magnitude
- absolute-magnitude NUMVECprocedure
- NUMVEC
- (vector-of number) ; .
cosine-similarity
- cosine-similarity NUMVEC1 NUMVEC2procedure
- NUMVEC1
- (vector-of number) ; .
- NUMVEC2
- (vector-of number) ; .
Must be same vector-length.
vector-compare
- vector-compare VEC ... #!optional DIFFprocedure
Result is negative, zero, or positive. Comparison by length when unequal & element-wise when equal.
- VEC
- (vector) ; .
- DIFF
- ((* * -> number)) ; quantified difference function.
vector-compare2
- vector-compare2 VEC1 VEC2 #!optional DIFFprocedure
Result is negative, zero, or positive. Comparison by length when unequal & element-wise when equal.
- VEC1
- (vector-of 'a) ; .
- VEC2
- (vector-of 'b) ; .
- DIFF
- (('a 'b -> number)) ; quantified difference function.
dot-product
- dot-product NUMVEC1 NUMVEC2procedure
- NUMVEC1
- (vector-of number) ; .
- NUMVEC2
- (vector-of number) ; .
Must be same vector-length.
cross-product
- cross-product NUMVEC1 NUMVEC2procedure
Only defined for a vector-length of (0 1 2 3 4 8). All others generate an error. Must be same vector-length.
- NUMVEC1
- (vector-of number) ; .
- NUMVEC2
- (vector-of number) ; .
vector-sum
vector-prod
vector-min
vector-max
- vector-sum NUMVECprocedure
- vector-prod NUMVECprocedure
- vector-min NUMVECprocedure
- vector-max NUMVECprocedure
softmax
- softmax NUMVECprocedure
Returns the softmax of the vector elements. Normalize the vector elements so (= 1 (vector-sum NUMVEC)).
- NUMVEC
- (vector-of number) ; .
softmax*
- softmax* NUMVEC #!optional TEMPprocedure
Returns the softmax of the tempered vector elements. Spread, (< 1 TEMP), or shrink, (> 1 TEMP), data before normalization. A TEMP of 1 has no effect.
- NUMVEC
- (vector-of number) ; .
- TEMP
- real ; temperature, default 1.
vector-reduce
- vector-reduce FUNC SEED VEC #!optional START ENDprocedure
- FUNC
- ('a 'b -> 'a) ; .
- SEED
- 'a ; initial value.
- VEC
- (vector-of 'b ; vector to reduce.
- START
- fixnum ; start index of VEC, default 0.
- END
- fixnum ; end index of VEC, default (vector-length VEC).
vector-reduce
- subvector-reduce FUNC VEC #!optional WIDTH OVERLAY START ENDprocedure
Returns a vector from the application of FUNC to every set of sequential WIOTH elements in VEC; the subinterval. Should the VEC have a non-integer number of subinterval the remainder is treated a vector with WIDTH the remaining length. It is up to the caller to ensure an integral subinterval count.
- FUNC
- ('b #!optional 'b -> 'a) ; .
- VEC
- (vector-of 'b ; vector to reduce.
- WIDTH
- fixnum ; subinterval width, default 2.
- OVERLAY
- fixnum ; subinterval shift, default WIDTH.
- START
- fixnum ; start index of VEC, default 0.
- END
- fixnum ; end index of VEC, default (vector-length VEC).
vector-apply
- (vector-apply FUNC [VEC1 VEC2 VEC...]) -> (vector-of 'a)procedure
- FUNC
- ('t1 't2 ... -> 'a ; .
- VEC#
- (vector-of 't#) ; .
Must be same vector-length.
(import (only (math-utils vector) vector-apply)) (define (vector-mul . vs) (apply vector-apply * vs)) (define (vector-add . vs) (apply vector-apply + vs))
vector-scale
vector-shift
- vector-scale NUMVEC FACTORprocedure
- vector-shift NUMVEC BIASprocedure
- NUMVEC
- (vector-of number) ; .
normalize-vector-scale
normalize-vector-shift
- normalize-vector-scale NUMVECprocedure
- normalize-vector-shift NUMVECprocedure
vector-scale by the (/ (vector-maximum)). vector-shift by the (- (vector-minimum)).
- NUMVEC
- (vector-of number) ; .
Examples
(import scheme) (import (chicken base)) (import (rename (only math-utils summ sqr ;non-checking & memoized version is used *chinum factorial/memo *factorial+/memo) (*chinum chinum) (factorial/memo factorial) (*factorial+/memo factorial+))) ;https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.132.221601 ;@lam `lambda' param (define (saha-sinha-pi #!optional (lim 100) (lam 4)) (+ 4 (summ n (1 lim) (let* ((2n (* 2 n)) (2n+1 (+ 2n 1))) (* (/ 1 (factorial n)) (- (/ 1 (+ n lam)) (/ 4 2n+1)) (factorial+ (- (/ (sqr 2n+1) (+ (* 2 2n) (* 4 lam))) n) (- n 1)))))) ) (define (madhava-leibniz-pi #!optional (lim 100)) (* 4 (summ n (1 lim) (/ (chinum (- n 1)) (- (* 2 n) 1)))) ) (- (acos -1) (saha-sinha-pi)) ;=> 1.90993887372315e-11 (- (acos -1) (madhava-leibniz-pi)) ;=> -0.0101007524813226
Requirements
memoize miscmacros vector-lib fx-utils
Author
Repository
This egg is hosted on the CHICKEN Subversion repository:
https://anonymous@code.call-cc.org/svn/chicken-eggs/release/5/math-utils
If you want to check out the source code repository of this egg and you are not familiar with Subversion, see this page.
Version history
- 1.18.0
- Add subvector-reduce overlay argument. summ & prod will count down.
- 1.17.0
- Add subvector-reduce. Widen vector type, not just number, for vector-apply. vector-compare, & vector-reduce. Add optional difference function argument to vector-compare*. Add integration & regression modules. moving trapezoid & linear-regression.
- 1.16.0
- Add minimum, maximum, range-value, fxrnd.
- 1.15.2
- Change factorial+/-.
- 1.15.1
- Fix type signatures.
- 1.15.0
- CHICKEN 6 release. Remove square (scheme base). Add accumulate-step, summs-accumulate-step, prods-accumulate-step, reduce-data, big-sigma*, big-pi*, linear-regression, linear-extrapolator.
License
This code is in the public domain.