母函数应用的实践(改变权值)
不定方程解的个数,注意这里是求不小于
x+2*y=j,
用母函数能够解得答案是:
a(n)=n/2+3/4+1/4*(-1)^n
注意这里的形式已经不像前面的那种简单的组合形式了,是一种多项式了,跟差分方程一般结果类似。
另外因为解答的复杂,这里只能有两个变量,因为变量多了,方程会很难解。
y前面的系数为2时简单,其它的很复杂。
下面写程序来证明:
(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 slayerex (num count)
(if (or (> count 1) (eq count 1) )
(* num
(slayerex
(- num 1)
(- count 1) ) )
1))
(defun exprhelp ( count n value)
(if (> n 0)
(+ (expr (- count 1)
(- n value) )
(exprhelp count
(- n value)
value))
0))
//技巧
(defun getvalue (n )
n)
(defun expr (count n)
(if (eq n 0)
1
(if (eq count 0)
0
(+ (exprhelp count
n
(getvalue (- 3
count)))
(expr (- count 1)
n)))))
(defun formula (n)
(+ (/ n
2.0)
(/ 3.0
4)
(* (/ 1.0
4)
(pow -1
n))))
(defun test (n)
(if (> n 1)
(progn
(print (expr 2 n))
(print 'compare)
(print (formula n))
(test (- n 1)))
(print 'over)))
(test 10)
另外发现的一个特别的地方是:用formula计算出的值结果也全为整数。
[21]> (test 80)
41
COMPARE
41.0
40
COMPARE
40.0
40
COMPARE
40.0
39
COMPARE
39.0
39
COMPARE
39.0
38
COMPARE
38.0
38
COMPARE
38.0