Задачи по "Математике"
Автор: takoyami • Август 21, 2022 • Задача • 4,012 Слов (17 Страниц) • 159 Просмотры
Задание 1. Вариант 7.
Решение системы линейных алгебраических уравнений (СЛАУ) методом обратной матрицы с проверкой правильности расчетов
Вариант 7.
[pic 1]
Решение:
Запишем систему в матричном виде:
[pic 2][pic 3][pic 4]
AX=B; X=A-1B; Найдем обратную матрицу A-1
, где Aij – алгебраическое дополнение к элементам матрицы. [pic 5]
Найдем определитель матрицы - .[pic 6]
[pic 7]
Определитель матрицы отличен от 0, следовательно, обратная матрица существует.
Для нахождения матрицы А-1 осталось вычислить алгебраические дополнения к каждому элементу матрицы по формуле:
[pic 8]
[pic 9]
[pic 10]
[pic 11]
[pic 12]
[pic 13]
[pic 14]
[pic 15]
[pic 16]
[pic 17]
Подставим найденные значения в исходную формулу для вычисления А-1.
.[pic 18]
Выполним проверку:
[pic 19]
. [pic 20]
Проверка подтвердила правильность найденной матрицы.
Найдем матрицу-столбец неизвестных:
X=A-1B=.[pic 21]
Итак, Сделаем проверку, подставив найденное решение в каждое уравнение системы.[pic 22][pic 23]
Проверка:
; [pic 24][pic 25]
Итак, мы видим, что после подстановки в систему каждое уравнение обратилось в числовое тождество. Следовательно, решение системы найдено верно.
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N = 3;
double det3(int A[N][N])
{
return A[0][0] * A[1][1] * A[2][2] +
A[0][1] * A[1][2] * A[2][0] +
A[1][0] * A[2][1] * A[0][2] -
A[2][0] * A[1][1] * A[0][2] -
A[1][0] * A[0][1] * A[2][2] -
A[2][1] * A[1][2] * A[0][0];
}
double det_2(int A[N-1][N-1])
{
return A[0][0] * A[1][1] - A[0][1] * A[1][0];
}
int main()
{
int A[N][N] =
{
1, 2, 3,
3, 1, 1,
2, 1, 2
};
int B[N] =
{
8,
6,
6
};
double X[N] =
{
0,
0,
0
};
int minor[N - 1][N - 1];
int For_minor[N][N];
double A_minus1[N][N];
double detA;
int i, j, t, l;
int i1, j1, t1, l1;
if (det3(A) != 0) { detA = det3(A); }
else { cout << "ne sovmestnaya matritsa" << endl; system("pause"); return 0; }
for (t = 0; t < N; t++)
{
for (l = 0; l < N; l++)
{
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (t != i && l != j) For_minor[i][j] = A[i][j]; else For_minor[i][j] = 2147483647;
...