本帖最后由 chlh_jd 于 2013-10-8 17:44 编辑
大家好!
很久以前就在想:用LISP写一个求解最优化的通用函数,因为LISP语言本身就比较适合;基于对数学的弱弱了解,写了个粗糙的函数和大家讨论,希望您能多参与这个话题,感谢在先!应用例子1:求10(x1+x2-5)^2+(x1-x2)^2的极小点和极小值,理论解: ((2.5 2.5) 0)
- (defun val ()
- ;; 10(x1+x2-5)^2+(x1-x2)^2
- (+ (* 10. (expt (+ x1 x2 -5.) 2)) (expt (- x1 x2) 2)))
- (defun con () T)
- (setq arg (list "x1" "x2")
- arg_limit nil
- eps 1e-6)
- (Powell val con arg arg_limit eps);;->((2.5 2.5) 1.32989e-011)
应用例子2:求60-10x1-4x2+x1^2+x2^2-x1x2的极小点和极小值,理论解:((8 6) 8)
- (defun val ()
- ;;60-10x1-4x2+x1^2+x2^2-x1x2
- (+ 60. (* -10. x1) (* -4. x2) (* x1 x1) (* x2 x2) (* -1. x1 x2)))
- (defun con () T)
- (setq arg (list "x1" "x2")
- arg_limit nil
- eps 1e-6)
- (Powell val con arg arg_limit eps);;->((8.0 6.0) 8.0)
|