-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathArrayPolynomial.hs
More file actions
51 lines (35 loc) · 1.56 KB
/
Copy pathArrayPolynomial.hs
File metadata and controls
51 lines (35 loc) · 1.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
--Autores:
----Saúl Flores Benavente 755769
----Luis García Garcés 739202
module ArrayPolynomial where
x :: [Double]
x = [1,0]
--------------------------------------------------------------------------------------------------------
coef :: Double -> [Double]
coef c = [c]
--------------------------------------------------------------------------------------------------------
aux :: Int -> Int -> [Double] -> [Double] -> [Double]
aux l1 l2 (x:xs) (y:ys)
| l1 == l2 = zipWith (+) (x:xs) (y:ys)
| l1 > l2 = x : ( aux (l1-1) l2 xs (y:ys) )
| l1 < l2 = y : ( aux l1 (l2-1) (x:xs) ys )
add :: [Double] -> [Double] -> [Double]
add [] [] = []
add x [] = x
add [] x = x
add x y = aux (length x) (length y) x y
padd :: [[Double]] -> [Double]
padd x = foldl (add) [] x
--------------------------------------------------------------------------------------------------------
mul :: [Double] -> [Double] -> [[Double]] --Funcion auxilizar para la multiplicacion
mul (x:[]) y = [(map ( x* ) y)]
mul x [] = [[]]
mul (x:xs) y = (mul xs (y++[0]))++[(map ( x* ) y)]
pmul :: [[Double]] -> [Double] --FUncion para multiplicar
pmul m = foldr (\x y -> padd (mul (reverse x) y)) [1] m
--------------------------------------------------------------------------------------------------------
peval :: [Double] -> Double -> Double
peval x y = sum $ zipWith (\q i -> q*y^i) (reverse x) [0..]
--------------------------------------------------------------------------------------------------------
pderv :: [Double] -> [Double]
pderv p = reverse $ tail $ zipWith (\x y -> x*y) (reverse p) [0..]