2010-05-15 22 views
1

par exemple: (3x - 5x + 2) (7x + 1) et vous simplifiez comme ceci:aide à la multiplication des polynômes en Lisp

((3 2)(-5 1)(2 0))((7 1)(1 0)) 
((21 3)(3 2)(-35 2)(-5 1)(14 1)(2 0)) 
(21 3)(32 2)(9 1)(2 0) 

et vous obtenez cette réponse: 21x + 32x + 9x + 2

j'ai besoin de cette solution dans Lisp s'il vous plaît aider

+0

Est-ce que c'est ce devoir? Si oui, vous devriez le marquer comme tel. –

+0

Tout d'abord, vérifiez votre algèbre - votre réponse est incorrecte. Ensuite, montrez-nous ce que vous avez essayé jusqu'ici. Qu'est-ce qui te dérange? –

+0

et pourquoi est-ce mal? vous écrire: (3x2-5x + 2) comme ((3 2) (-5 1) (2 0)) de sorte que vous écrire le premier 3 et ensuite la puissance 2 si 5 a un simple x alors il est 1, si nous ne disposons pas x alors il est 0 étape suivante, vous multyply et ajouter ((ab) (cd)) ((fg) (jk)) = (((a * f) (b + g)) ((a * j) (b + k)) ((c * f) (d + g)) ((c * j) (d + k))) et alors vous combiner: (3 2) avec (-35 2) et (-5 1) avec (14 1) puis vous transformez et calculez 21x3 + 32x2 + 9x + 2 – iulia

Répondre

0

pour la première étape, vous devez jumeler chaque composant LHS avec chaque composant RHS; un produit cartésien des deux ensembles. Cela nécessite une carte à deux niveaux suivie d'une concaténation des listes de paires de deuxième niveau dans une seule liste de premier niveau (pensez (apply #'append ...).

La deuxième étape peut être effectuée avec une réduction qui crée une liste d'association, saisie sur l'exposant.

EDIT: Permettez-moi de résoudre un autre problème pour vous, et laissez-vous savoir comment traduire dans la solution à votre problème:

Compute (a + b + ... + k) * (l + m + ... + z) en développant d'abord en paires, puis en additionnant les produits:

(defun mul-sums (aa bb) 
    (reduce #'+ 
      (apply #'append 
       (map 'list 
         #'(lambda (a) 
          (map 'list 
           #'(lambda (b) 
            (* a b)) 
           bb)) 
         aa)))) 
; Compute (1 + 2 + 3) * (3 + 4). 
> (mul-sums '(1 2 3) '(3 4)) 
42 
+0

pouvez-vous donner un point de départ? comment commencer? – iulia

+0

merci beaucoup je vais essayer – iulia