Scheme中有多项式的余数函数的工作定义吗?

时间:2015-10-06 15:51:05

标签: scheme

我在下面有这个功能,但似乎不能用它来手动评估多分区余数:

(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定义不正确,你可以修理它,或者你知道一个不错的选择吗?

1 个答案:

答案 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来实现。