我在下面有这个功能,但似乎不能用它来手动评估多分区余数:
(define (poly-scale poly n) (map (lambda (x) (* x n)) poly))
(define (poly-remainder poly1 poly2)
(let
((scale (/ (leading-coef poly1) (leading-coef poly2))))
(if (< (degree poly1) (degree poly2)) poly1
(poly-remainder (rest-of-poly (p+ (poly-scale poly2 (* scale -1)) poly1))
poly2))))
不幸的是,这里有很多帮助功能。计划5.14 on p. 23(pdf)包含大部分内容。 p ^ +的定义是Program 5.9 on p.18(pdf)。
另外两个帮助功能:
(define list-of-zeros
(lambda(n)
(cond
((zero? n) '())
(else (cons 0 (list-of-zeros (sub1 n)))))))
(define sub1
(lambda(n)
(- n 1)))
这是我尝试手动评估(x ^ 2 - 2)/(x + 1)的剩余部分:
(poly-remainder '(1 0 -2) '(1 1))
(poly-remainder (rest-of-poly (p+ (poly-scale poly2 (* scale -1)) poly1)) poly2))
(poly-remainder (rest-of-poly (p+ (poly-scale poly2 -1) poly1)) poly2))
(poly-remainder (rest-of-poly (p+ (-1 -1) poly1)) poly2))
(poly-remainder (rest-of-poly (1 -1 -3)) poly2))
(poly-remainder (-1 -3) poly2))
(poly-remainder (rest-of-poly (p+ (poly-scale poly2 (* scale -1)) poly1)) poly2))
(poly-remainder (rest-of-poly (p+ (1 1) poly1)) poly2))
(poly-remainder (rest-of-poly (0 -2)) poly2))
(poly-remainder (-2) poly2))
(-2)
但剩下的应该是(-1)。
请告诉我我的错误。如果poly-remainder定义不正确,你可以修理它,或者你知道一个不错的选择吗?
答案 0 :(得分:0)
在poly-remainder
目的
(p+ (poly-scale poly2 (* scale -1)) poly1)
是取消poly1的主要术语。
但是......当poly2的度数小于poly1的程度时会发生什么?
您需要将poly2与x^(m-n)
相乘,其中m和n分别具有poly1和poly2的度数。我相信你可以通过将m-n
零附加到poly2来实现。