math-utils
Documentation
Miscellaneous Math Functions
Usage
(import math-utils)fppred
fpsucc
Returns the Nth predecessor or successor of a floating-point number.
Ffloat; inexact point ;Ninteger; distance to move point ; default1
log-with-base
log/base
Returns a function for the base B logarithm.
degree->radian
radian->degree
Convert between radians & degrees.
Nreal
prime?
(prime? N) -> booleanIs N prime?
Ninteger
primes
(primes [N 2]) -> (-> integer)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 ...]) -> booleanAre the integers M N0 ... coprime?
pairwise-coprime?
(pairwise-coprime? M [N0 ...]) -> booleanAre the pairs of integers in M N0 ... coprime?
fxcoprime?
(fxcoprime? M N) -> booleanAre 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 [PRIN]) -> numberThe accumulation function, the principle is assumed 1. Returns the simple interest for the RATE over TIME.
RATEnumber; interest rateTIMEnumber; time period to coverPRINnumber; principle, default1
compound-interest
(compound-interest RATE FREQ TIME [PRIN]) -> numberThe accumulation function, the principle is assumed 1. Returns the compound interest for the RATE, applied with FREQ, over TIME.
RATEnumber; interest rateFREQnumber; compounding frequencyTIMEnumber; time period to coverPRINnumber; principle, default1
(compound-interest 0.043 4 6 1500)
;=> 1938.84 ;rounded to 2 placesfibonacci
*fibonacci
fibonacci/memo
*fibonacci/memo
Returns fibonacci of integer N.
fibonacci/approximate
(fibonacci/approximate N) -> realReturns an approximate fibonacci of integer N, with an error of > 1 at N ~= 70.
binomial
*binomial
binomial/memo
*binomial/memo
Returns the number of combinations of length K in N.
N1integerN2integer
cross-ratio
(cross-ratio N1 N2 N3 N4) -> numberReturns the Cross-ratio of N1, N2 and N3, N4.
N1numberN2numberN3numberN4number
~=
(~= A B [EPSILON 1e-05]) -> booleanDoes A approximately equal B?
chinum
*chinum
Returns 1 for even? and -1 for odd; (expt -1 N).
square
sqr
cube
cub
minimum ((list-of number) -> number))
(minimum LS) -> numberLS(list-of number)
maximum ((list-of number) -> number))
(maximum LS) -> numberLS(list-of number)
range-value ((list-of number) -> number))
(range-value LS) -> numberLS(list-of number)
*average
(*average LS) -> numberLS(list-of number)
average
(average [N0 ...]) -> numberN0number
average*
(average* [TREE ...]) -> numberTREE(tree-of number)
least-squares
(least-squares PNTS) -> number numberReturns 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 Y2) -> numberX1 Y1number number; start pointX2 Y2number number; end point
manhattan-distance
(manhattan-distance X1 Y1 X2 Y2) -> numberX1 Y1number number; start pointX2 Y2number number; end point
factorial
*factorial
factorial/memo
*factorial/memo
Ninteger
factorial-
*factorial-
The falling factorial.
NrealFALLinteger
factorial+
*factorial+
The rising factorial.
NrealRISEinteger
harmonic
*harmonic
harmonic/memo
*harmonic/memo
procedure>(harmonic/memo N) -> real</procedure> <procedure>(*harmonic/memo N) -> real</procedure>
Result of Harmonic series expansion to N terms.
Ninteger
euclidian-distance
(euclidian-distance X1 Y1 X2 Y2) -> numberDistance between X1,Y1 and X2,Y2.
X1 Y1number number; from pointX2 Y2number number; to point
manhattan-distance
(manhattan-distance X1 Y1 X2 Y2) -> numberDistance between X1,Y1 and X2,Y2.
X1 Y1number number; from pointX2 Y2number number; to point
to-places
@prec
Truncate the result of (FUNC EXPR) to PREC decimal places.
PRECfixnum; precisionFUNCsymbol; clip operation, i.e.round, etc.EXPR*; value to clip
slope
(slope P1|X1 P2|Y1 [X2 Y2]) -> numberSlope of a line defined by 2 points, P1 & P2 or X1 Y1 & X2 Y2.
P1&P2(pair number number)X1 Y1&X2 Y2number number
delta-slope
(slope DX DY) -> numberSlope of a line delta.
DX}number; change in xDYnumber; change in y
fxrnd
(fxrnd [LIMIT]) -> fixnumReturn a random fixnum in the range [0 LIMIT).
LIMIT}fixnum; defaultmost-positive-fixnum
big-pi
(big-pi F N1 N2) -> numberProduct of F in N1 to N2.
F(number -> number);N1number; range startN2number; range end
big-sigma
(big-sigma F N1 N2) -> numberSum of F in N1 to N2.
F(number -> number);N1number; range startN2number; range end
prod
(prod VAR ([N1 [N2 [STEP]]]) BODY...) -> numberProduct of BODY... in N1 to N2, inclusive, by STEP. When N1 > N2 the STEP becomes negative.
VARsymbol;VARbound to currentNinBODY...BODY...number;N1number; range startN2number; range endSTEPnumber; step size, positive, default1
summ
(summ VAR ([N1 [N2 [STEP]]]) BODY...) -> numberSum of BODY... in N1 to N2, inclusive, by STEP. When N1 > N2 the STEP becomes negative.
VARsymbol;VARbound to currentNinBODY...BODY...number;N1number; range startN2number; range endSTEPnumber; step size, positive, default1
Integration Functions
Usage
(import (math-utils integration))trapezoid
(trapezoid F A B) -> (fixnum -> number)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 integrateAnumber; lower boundBnumber; upper bound
simpson
(simpson F A B [N]) -> (fixnum -> number)Calculate the area under F between A & B
F(number -> number); function to integrateAnumber; lower boundBnumber; upper boundNfixnum; interval count, default6.
Composite Simpson's 1/3 rule.
simpson/adaptive
(simpson/adaptive F A B EPSILON) -> (fixnum -> number)F(number -> number); function to integrateAnumber; lower boundBnumber; upper boundEPSILONreal; error threshold for result
gamma
(gamma N EPSILON) -> realThe gamma function at N.
NrealEPSILONreal; error threshold for result
Regession Functions
Usage
(import (math-utils regression))linear-regression
(linear-regression SRC) -> real realReturns the slope & intercept values of the line fitted to the data from SRC.
SRC(or list vector (-> (or eof *)))
linear-extrapolator
(linear-extrapolator SRC) -> (real -> real)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*
Returns reduced values for each REDUCER, in order.
SRC(or list vector (-> (or eof *)))REDUCER(#!rest * -> real)
accumulate-step
(accumulate-step ('a 'a -> 'a) (list-of (#!rest * -> 'a)) (list-of 'a) *) -> (list-of 'a)summs-accumulate-step
prods-accumulate-step
reduce-data
(reduce-data SRC ACC REDUCER ...) -> * ...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 NUMVEC) -> numberNUMVEC(vector-of number); .
cosine-similarity
(cosine-similarity NUMVEC1 NUMVEC2) -> numberNUMVEC1(vector-of number); .NUMVEC2(vector-of number); .
Must be same vector-length.
vector-compare
(vector-compare VEC ... [DIFF]) -> numberResult 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 [DIFF]) -> numberResult 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 NUMVEC2) -> numberNUMVEC1(vector-of number); .NUMVEC2(vector-of number); .
Must be same vector-length.
cross-product
(cross-product NUMVEC1 NUMVEC2) -> (or number (vector-of number))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
softmax
(softmax NUMVEC) -> (vector-of number)Returns the softmax of the vector elements. Normalize the vector elements so (= 1 (vector-sum NUMVEC)).
NUMVEC(vector-of number); .
softmax*
(softmax* NUMVEC [TEMP]) -> (vector-of number)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); .TEMPreal; temperature, default1.
vector-reduce
(vector-reduce FUNC SEED VEC [START [END]]) -> (vector-of 'a)FUNC('a 'b -> 'a); .SEED'a; initial value.VEC(vector-of 'b; vector to reduce.STARTfixnum; start index ofVEC, default0.ENDfixnum; end index ofVEC, default(vector-length VEC).
vector-reduce
(subvector-reduce FUNC VEC [WIDTH [OVERLAY [START [END]]]]) -> (vector-of 'a)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.WIDTHfixnum; subinterval width, default2.OVERLAYfixnum; subinterval shift, defaultWIDTH.STARTfixnum; start index ofVEC, default0.ENDfixnum; end index ofVEC, default(vector-length VEC).
vector-apply
(vector-apply FUNC [VEC1 VEC2 VEC...]) -> (vector-of 'a)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
NUMVEC(vector-of number); .
normalize-vector-scale
normalize-vector-shift
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.0101007524813226Requirements
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-reduceoverlay argument.summ&prodwill count down. - 1.17.0
- Add
subvector-reduce. Widen vector type, not justnumber, forvector-apply.vector-compare, &vector-reduce. Add optional difference function argument tovector-compare*. Add integration & regression modules. movingtrapezoid&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). Addaccumulate-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.