Advertisement
Guest User

Untitled

a guest
Dec 18th, 2013
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.69 KB | None | 0 0
  1. //Обмен столбцов
  2.  
  3. let change matr b n =      
  4.     matr |> List.mapi(fun i x -> if i <> n - 1 then x else b)
  5.  
  6. // Удалить элемент списка с номером n
  7.  
  8. let deleteNth n l =
  9.     l |> List.mapi(fun i x -> if i <> n - 1 then Some(x) else None) |> List.choose id
  10.  
  11.  // Минор n - 1 порядка
  12.  
  13. let Minor matr j =
  14.     matr |> List.tail |> List.map (fun x -> deleteNth j x)
  15.  
  16. let rec opred = function
  17. | [a] when (List.length a = 1) -> List.head a
  18. | matr ->
  19.     let first = List.nth matr 0 // первый столбец
  20.     let kol = List.length first // количество миноров
  21.     let minors = [for i = 1 to kol do yield (Minor matr i) |> opred] // список посчитанных миноров предыдущего порядка
  22.     let tmp = List.mapi2 (fun i x y -> if i % 2 = 0 then x * y else -x * y) first minors
  23.     List.sum tmp
  24.  
  25. let Solve matr b =
  26.     let main = opred matr
  27.     if main = 0.0 then []
  28.     else
  29.         let kol_x = List.length matr
  30.         [for i = 1 to kol_x do yield (opred (change matr b i)) / main]
  31.  
  32. // Тесты
  33.  
  34. let matr = [[3.0; 4.0; 5.0; 2.0]; [2.0; 3.0; 4.0; 6.0]; [7.0; 5.0; 3.0; 5.0]; [3.0; 1.0; 1.0; 1.0]]
  35.  
  36. let b = [107.0; 84.0; 81.0; 87.0]
  37.  
  38. let matr1 = [[2.0; 1.0; 3.0]; [1.0; -1.0; -1.0]; [1.0; 0.0; 2.0]]
  39.  
  40. let b1 = [2.0; -2.0; 2.0]
  41.  
  42. let matr2 = [[1.0; 2.0; 3.0]; [4.0; 5.0; 6.0]; [7.0; 8.0; 9.0]]
  43.  
  44. let b2 = [1.0; 1.0; 1.0]
  45.  
  46. let matr3 = [[1.0; 0.0; 0.0]; [2.0; 1.0; 1.0]; [3.0; 2.0; 0.0]]
  47. let b3 = [7.0; 1.0; 1.0]
  48.  
  49. // Находим решение
  50.  
  51. let Message = function
  52.     |[] -> "No Solution!"
  53.     |_ -> "Solution is finded!"
  54.    
  55. let SLAU = Solve matr3 b3
  56. let s = Message SLAU
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement