//examples
X*X-B*X-1=0
Go
X=B+1/X
Go
(init x=1 ,B=2 )
(setq small 37)
(setq big 99)
(defun calc (a b)
(if (eq a 1)
(cons b nil)
(cons (/ (- b (mod b a ) )
a)
(calc (mod b a ) a ))))
(defun recalc (lst top)
(if (eq (cdr lst ) nil)
(/ top (car lst))
(/ top
(+ (car lst)
(recalc (cdr lst) top)))))
(setq initvalue 1.0)
(setq B 2)
(defun fun (value)
(+ B
(/ 1.0 value)))
(defun many (value)
(if (> (abs (- (fun value ) value )) (/ 1 10000000) )
(+ 1 (many (print (fun value)) ))
0))
(defun generate (count )
(if (> count 0)
(cons B (generate (- count 1) ))
(cons initvalue nil)
)
)
//比如要开(sqrt 11)
(x-2)(x+2)=7
Go
x=2+7/(2+x)
GO
y=2+x
Go
y-2=2+7/y
Go
y=4+7/y
Go
(setq B 4)
(+ B (recalc (generate (many initvalue ) ) 7.0 ) )
//注意最后一行的+ B的意义因为它与前面的1/(1+x)格式不一样.
可以实现.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
(x-3)(x+3)=2
Go
x=3+2/(x+3)
GO
y=3+x
Go
y-3=3+2/y
Go
y=6+2/y
Go
(setq B 6)
(+ B (recalc (generate (many initvalue ) ) 2.0 ) )
//注意最后一行的+ B的意义因为它与前面的1/(1+x)格式不一样.
可以实现.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$44
(x-3.3)(x+3.3)=11-3.3*3.3=0.11000061
Go
x=3.3+0.11000061/(x+3.3)
GO
y=3.3+x
Go
y-3.3=3.3+0.11000061/y
Go
y=6.6+0.11000061/y
Go
(setq B 6.6)
(+ B (recalc (generate (many initvalue ) ) 0.11000061) )
//注意最后一行的+ B的意义因为它与前面的1/(1+x)格式不一样.
可以实现.
//////////////////////////////////////////////
从上面可以看出top的值越小越好,比如如果允许为小数,则更精确,当然现实中可能不允许为小数,但可以考虑不断逼近的方法