最小二乗法
最小二乗法を書いてみた.だんだん前置記法に慣れてきた.頭の中に構文木ができてきている予感.とりあえずはmapcar, applyの便利さに感動.今までPerlで高階関数を使ってこなかったことを激しく後悔
(defun least-squares (lis) (let ((sum_x (apply '+ (mapcar 'car lis))) (sum_y (apply '+ (mapcar 'cadr lis))) (sum_xy (apply '+ (mapcar '(lambda (x) (* (car x) (cadr x))) lis))) (sum_x2 (apply '+ (mapcar '(lambda (x) (* (car x) (car x))) lis)))) (list ; a (/ (- (* (length lis) sum_xy) (* sum_x sum_y)) (- (* (length lis) sum_x2) (* sum_x sum_x))) ; b (/ (- (* sum_x2 sum_y) (* sum_xy sum_x)) (- (* (length lis) sum_x2) (* sum_x sum_x)))))) (least-squares '((4 -17) (15 -4) (30 -7) (100 50))) (15370/22363 -449536/22363)