本文主要是介绍用newlisp做数学统计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
标准函数
newlisp已经自带了一些统计函数
幂函数
(pow 100 2) → 10000
(pow 100 0.5) → 10
(pow 100 0.5 3) → 1000(pow 3) → 9
第一个是100^2
第二个是100^0.5
第三个是(100^0.5)^3
第四个是3^2
自定义函数
阶乘
;;@n integer or big integer
;;@return n!
(define (fac n)(if (= n 0)1(apply * (map bigint (sequence 1 n)) 2)))
stat模块
newlisp stat库提供了常用的统计函数
加载模块
> (module "stat.lsp")
(lambda (stat:lst) (append (join (map string stat:lst) "\r\n") "\r\n"))
求和
> (setf a '(1 2 3 1 4 5 7))
(1 2 3 1 4 5 7)
> (stat:sum a)
23
平均值
> (stat:mean a)
3.285714285714286
平方和
> (stat:sum-sq a)
105
也就是a的每个元素求平方,然后全部加起来的和
样本方差
> (stat:var a)
4.904761904761905
样本方差的文档参考:
http://baike.baidu.com/view/2100256.htm
公式是
经过公式推导,可以变形为下面的实现:
; variance of a data vector X
(define (var X)(div (sum-d2 X) (sub (length X) 1)))
; sum of sqared differenses of X to mean of X
(define (sum-d2 X)(sub (sum-sq X) (div (mul (sum X) (sum X)) (length X))))
注释说的是方差,但是其实是无偏样本方差的实现。
标准差(均方差)
standard variance or standard deviation
> (stat:sdev a)
2.214669705568283
其实就是var的平方根
; standard deviation of a data vector X
(define (sdev X)(sqrt (var X)))
最小二乘法
参考单独的博客文章
最小二乘法数学原理和newlisp实现
这篇关于用newlisp做数学统计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!