-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtest12.hs
More file actions
52 lines (48 loc) · 1.44 KB
/
test12.hs
File metadata and controls
52 lines (48 loc) · 1.44 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
52
dup_1 :: Eq a => [a] -> Bool
dup_1 [] = False
dup_1 [x] = False
dup_1 (x1:x2:xs) = x1 == x2 || dup_1(x1:xs)
dup_l :: Eq a => [a] -> Bool
dup_l [] = False
dup_l [x] = False
dup_l (x:xs) = dup_1(x:xs) || dup_l(xs)
{--
detMat [[x]] = x
detMat [[a,b],[c,d]] = a*d - b*c
detMat ([]:xss) = 0
detMat ((x:xs):xss)
--}
dely :: Int-> [a] -> [a]
dely 1 (x:xs) = xs
dely k (x:xs) = [x] ++ dely (k-1) xs
deletesty::(Num a) => Int -> [[a]] -> [[a]]
deletesty k x = [c |c<- [ dely k q | q<-x ]]
dety :: Num a => [[a]] -> a
dety [] = error "Empty Error"
dety [[x]] = x
dety (x:xs) =
sum [(-1)^(j+1)* (head [x])!!(j-1)
* dety(deletesty j xs) | j
<-
[1..(length x) ]]
swaps :: Int -> Int -> [a] -> [a]
swaps i j xs =
let elemI = xs !! i
elemJ = xs !! j
left = take i xs
middle = take (j-i-1) (drop (i+1) xs)
right = drop (j+1) xs
in left ++ [elemJ] ++ middle ++ [elemI] ++ right
obratno :: Fractional t => [[t]] -> [[t]]
obratno [] = error "Empty Error"
obratno [[x]] = [[1/x]]
obratno (x:xs) = obratno_part(x:xs) ++ obratno_part(swaps 0 1(x:xs))
where
det = dety(x:xs)
i = [i | i<-[1..(length(x)-1)]]
obratno_part (x:xs) = [[(-1)^(j+1)*(dety(deletesty j xs))/det | j <-[1..(length x)]]]
--obratno_part i (x:xs) = [[(-1)^(j+1)*(dety(deletesty j s))/det | j <-[1..(length x)]]]
-- where
-- s = if i <= (length(x)-1)
-- then drop(1 swaps(0 i (x:xs)))
-- else xs