Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Обмен столбцов
- let change matr b n =
- matr |> List.mapi(fun i x -> if i <> n - 1 then x else b)
- // Удалить элемент списка с номером n
- let deleteNth n l =
- l |> List.mapi(fun i x -> if i <> n - 1 then Some(x) else None) |> List.choose id
- // Минор n - 1 порядка
- let Minor matr j =
- matr |> List.tail |> List.map (fun x -> deleteNth j x)
- let rec opred = function
- | [a] when (List.length a = 1) -> List.head a
- | matr ->
- let first = List.nth matr 0 // первый столбец
- let kol = List.length first // количество миноров
- let minors = [for i = 1 to kol do yield (Minor matr i) |> opred] // список посчитанных миноров предыдущего порядка
- let tmp = List.mapi2 (fun i x y -> if i % 2 = 0 then x * y else -x * y) first minors
- List.sum tmp
- let Solve matr b =
- let main = opred matr
- if main = 0.0 then []
- else
- let kol_x = List.length matr
- [for i = 1 to kol_x do yield (opred (change matr b i)) / main]
- // Тесты
- 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]]
- let b = [107.0; 84.0; 81.0; 87.0]
- let matr1 = [[2.0; 1.0; 3.0]; [1.0; -1.0; -1.0]; [1.0; 0.0; 2.0]]
- let b1 = [2.0; -2.0; 2.0]
- let matr2 = [[1.0; 2.0; 3.0]; [4.0; 5.0; 6.0]; [7.0; 8.0; 9.0]]
- let b2 = [1.0; 1.0; 1.0]
- let matr3 = [[1.0; 0.0; 0.0]; [2.0; 1.0; 1.0]; [3.0; 2.0; 0.0]]
- let b3 = [7.0; 1.0; 1.0]
- // Находим решение
- let Message = function
- |[] -> "No Solution!"
- |_ -> "Solution is finded!"
- let SLAU = Solve matr3 b3
- let s = Message SLAU
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement