Polynomial long division: Difference between revisions
Content deleted Content added
Line 1,406: | Line 1,406: | ||
(if (zero? pi) d i))) |
(if (zero? pi) d i))) |
||
(define (lead p) (vector-ref p (deg p))) |
(define (lead p) (vector-ref p (deg p))) |
||
(define (mono |
(define (mono c d) (build-vector (+ d 1) (λ(i) (if (= i d) c 0)))) |
||
(define (poly*cx^n c n p) (vector-append (make-vector n 0) (for/vector ([pi p]) (* c pi)))) |
(define (poly*cx^n c n p) (vector-append (make-vector n 0) (for/vector ([pi p]) (* c pi)))) |
||
(define (poly+ p q) (poly/lin 1 p 1 q)) |
(define (poly+ p q) (poly/lin 1 p 1 q)) |
||
Line 1,427: | Line 1,427: | ||
[(< N D) (values 0 n)] |
[(< N D) (values 0 n)] |
||
[else (define c (/ (lead n) (lead d))) |
[else (define c (/ (lead n) (lead d))) |
||
(define |
(define q (mono c (- N D))) |
||
(define |
(define r (poly- n (poly*cx^n c (- N D) d))) |
||
(define r (poly- n (poly*cx^n c e d))) |
|||
(define-values (q1 r1) (poly/ r d)) |
(define-values (q1 r1) (poly/ r d)) |
||
(values (poly+ q q1) r1)])) |
(values (poly+ q q1) r1)])) |