RosettaCodeData/Task/Multiple-regression/PicoLisp/multiple-regression-1.l

44 lines
1.1 KiB
Plaintext

(scl 20)
# Matrix transposition
(de matTrans (Mat)
(apply mapcar Mat list) )
# Matrix multiplication
(de matMul (Mat1 Mat2)
(mapcar
'((Row)
(apply mapcar Mat2
'(@ (sum */ Row (rest) (1.0 .))) ) )
Mat1 ) )
# Matrix identity
(de matIdent (N)
(let L (need N (1.0) 0)
(mapcar '(() (copy (rot L))) L) ) )
# Reduced row echelon form
(de reducedRowEchelonForm (Mat)
(let (Lead 1 Cols (length (car Mat)))
(for (X Mat X (cdr X))
(NIL
(loop
(T (seek '((R) (n0 (get R 1 Lead))) X)
@ )
(T (> (inc 'Lead) Cols)) ) )
(xchg @ X)
(let D (get X 1 Lead)
(map
'((R) (set R (*/ (car R) 1.0 D)))
(car X) ) )
(for Y Mat
(unless (== Y (car X))
(let N (- (get Y Lead))
(map
'((Dst Src)
(inc Dst (*/ N (car Src) 1.0)) )
Y
(car X) ) ) ) )
(T (> (inc 'Lead) Cols)) ) )
Mat )