特殊形式的差分方程
形式为a(n)=2*a(n-1)^2-1的差分方程,根据以前的经验:
可以转化为a(n-1)=(sqrt (/ {1+a(n)} 2 ) )
如果当a(n)=0.5 (即小于1的时候,可以用三角函数确定值,这样也就能确定每一个a(n-1)的值了。
下面是程序验证:
注意这种程序有两个重要的限制条件,0<a(n)<1,是从尾部向前移动的,与一般思维不一样。
下面写程序来证明:
(defun pow (num count)
(if (or (> count 1) (eq count 1) )
(* num
(pow num
(- count 1) ) )
1))
(defun slayer ( count)
(if (or (> count 1) (eq count 1) )
(* count
(slayer
(- count 1) ) )
1))
(defun look ( init left right value )
(if (< (abs (- (cos init ) value )) (/ 1.0 10000000))
init
(if (< (cos init ) value )
(look (/ (+ init left ) 2.0) left init value)
(look (/ (+ init right ) 2.0) init right value))))
(setq an (look 0.1 0 (/ pi 2 ) 0.5))
(defun expr (n x)
(if (eq n 1)
(cos x)
(- (* 2
(pow (expr (1- n)
x)
2))
1)))
(defun test (n)
(if (> n 0)
(progn
(print (expr n (/ an (pow 2 (1- n))) ))
(print 'compare)
(print (cos an))
(test (- n 1)))
(print 'over)))
(test 10)
对于绝大部分差分方程来说,上面的两个条件都不满足,这个时候应该怎样求解???