Решение СЛАУ методом Крамера - C (СИ)
Формулировка задачи:
Нужно написать программу на СИ для решения СЛАУ с помощью метода Крамера.
2x1 - x2 + 3x3 + 2x4 = 4
2x1 + 3x2 + 3x3 + 2x4 = 6
3x1 - x2 - x3 + 2x4 = 6
3x1 - x2 + 3x3 - x4 = 6
Если кому не сложно, помогите плз.
Решение задачи: «Решение СЛАУ методом Крамера»
textual
Листинг программы
#include <stdio.h> #include <conio.h> const N=4; //нахождение детерминанта float Det(int G, double M[4][4]) { if (G == 1) return M[0][0]; else { double M1[4][4]; int i, x, X, Y; float Res = 0; for (i = 0; i < G; i++) { for (Y = 1; Y < G; Y++) { x = 0; for (X = 0; X < G; X++) if (X != i) M1[Y-1][x++] = M[Y][X]; } if (i % 2 == 0) Res += M[0][i] * Det(G - 1, M1); else Res -= M[0][i] * Det(G - 1, M1); } return Res; } } //----------------------------------------------------------------------------- //Вывод на экран матрицы vyvod(double V[4][4]) { int i,j; for (i = 0; i < N; i++) for (j = 0; j < N; j++) { if (j==0) printf("\n"); else printf("\t"); printf("%7.2f", V[i][j]); } printf("\n"); } //создание матрицы и нахождение детерминанта podstanovka(int k, double M[4][4],double A[4][4],double B[4]) { int i,j; for (i=0; i<N; i++) for (j=0; j<N; j++) { M[i][j] = A[i][j]; } for (i=0; i<N; i++) //подстановка { // // M[i][k] = B[i]; // } // float Opr = Det(4, M); return Opr; } main( ) { int i,j; double A[4][4]={{2,-1,3,2}, {2,3,3,2}, {3,-1,-1,2}, {3,-1,3,-1}}; double B[4]={4,6,6,6}; //Вывод на экран исходной матрицы printf("\nVyvod ishodnoi matricy"); vyvod(A); //------Нахождение определителя исходной матрицы--------------------------- printf("\nVyvod determinanta ishodnoi matricy\n"); float Op = Det(4, A); printf("Determinant = %7.2f\n", Op); //------------------------------------------------------------------------- //*********************************** //действия над новыми матрицами double M1[N][N]; float Op1 = podstanovka(0, M1, A, B); printf("Determinant 1 = %7.2f\n", Op1); double M2[N][N]; float Op2 = podstanovka(1, M2, A, B); printf("Determinant 2 = %7.2f\n", Op2); double M3[N][N]; float Op3 = podstanovka(2, M3, A, B); printf("Determinant 3 = %7.2f\n", Op3); double M4[N][N]; float Op4 = podstanovka(3, M4, A, B); printf("Determinant 4 = %7.2f\n", Op4); // Вывод решения printf("\nVyvod resheniya\n"); float x1 = Op1/Op; printf("X1 = %7.2f\n", x1); float x2 = Op2/Op; printf("X2 = %7.2f\n", x2); float x3 = Op3/Op; printf("X3 = %7.2f\n", x3); float x4 = Op4/Op; printf("X4 = %7.2f\n", x4); system("pause"); }
Объяснение кода листинга программы
- Объявление переменных и массивов:
- N = 4 (размерность матрицы)
- double M[4][4] (матрица размером 4x4 для хранения исходных данных)
- double A[4][4] (матрица размером 4x4 для хранения исходных данных)
- double B[4] (вектор размером 1x4 для хранения данных)
- В функции main():
- Вывод исходной матрицы A с помощью функции vyvod(A)
- Вычисление определителя исходной матрицы A с помощью функции Det(4, A) и вывод результата с помощью функции printf()
- Создание новой матрицы M1 размером 4x4 с помощью функции podstanovka(0, M1, A, B) и вычисление определителя этой матрицы
- Создание новой матрицы M2 размером 4x4 с помощью функции podstanovka(1, M2, A, B) и вычисление определителя этой матрицы
- Создание новой матрицы M3 размером 4x4 с помощью функции podstanovka(2, M3, A, B) и вычисление определителя этой матрицы
- Создание новой матрицы M4 размером 4x4 с помощью функции podstanovka(3, M4, A, B) и вычисление определителя этой матрицы
- Вычисление значений x1, x2, x3 и x4 с помощью формулы xi = Opi / Op и вывод результатов с помощью функции printf()
- В функции Det():
- Рекурсивный алгоритм для вычисления определителя матрицы. Если размерность матрицы равна 1, то возвращается значение элемента главной диагонали. В противном случае создается новая матрица M1, заполняемая значениями элементов исходной матрицы, исключая главный элемент. Затем рекурсивно вызывается функция Det() для M1. Если размерность матрицы четная, то к результату добавляется произведение главного элемента и определителя матрицы M1. Если размерность матрицы нечетная, то от результата нужно отнять произведение главного элемента и определителя матрицы M1.
- В функции podstanovka():
- Создание новой матрицы M с помощью функции podstanovka()
- Заполнение новой матрицы M значениями элементов исходной матрицы A
- Подстановка в новую матрицу M элементов вектора B с помощью цикла for
- Вычисление определителя новой матрицы M с помощью функции Det()
- Возврат значения определителя новой матрицы M
- В функции vyvod():
- Цикл for для вывода элементов матрицы на экран
- Использование функции printf() для форматирования вывода
- В функции main() после вызова функции podstanovka() происходит вывод решения с помощью функции printf()
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д