Решение систем линейных уравнений (СЛУ)
Мы должны получить решение с помощью метода исключения Гаусса. В Maple нет специальной команды решения системы линейных уравнений этим методом, поэтому нам придется создать собственную идею вычисления: Здесь мы получили значения х1, х2, х3, проверим правильность нашего решения с помощью сравнения вектора свободных членов, с нашей матрицей A помноженной на соответственные значения полученных иксов. Читать ещё >
Решение систем линейных уравнений (СЛУ) (реферат, курсовая, диплом, контрольная)
Как известно, одной из первых задач решаемых в курсе линейной алгебры, является задача решения систем линейных алгебраических уравнений. Существует много способов ее решения, но классическими являются два — метод Крамера и метод исключения Гаусса. Первый в настоящее время практически не используется из-за накопления ошибок округления при реальных вычислениях на подмножестве вещественных чисел с ограниченной мантиссой, хотя, справедливости ради следует заметить, что при вычислениях в Maple подобной проблемы не возникает, так как пользователь всегда может увеличить количество цифр в мантиссе используемых чисел, присвоив системной переменой Digits требуемое значение. Именно поэтому мы и приведем оба варианта решения систем линейных уравнений и методом Крамера и Гаусса.
Метод Крамера.
Данная программа реализует классический метод решения систем линейных уравнений методом Крамера и выполняет проверку. Программа способна решать системы уравнений с n — неизвестными. > restart;
Подключим пакет Linalg о котором мы уже не раз говорили ранее.
with (linalg):
Введем размерность матрицы системы.
n:=3;
Введем коэффициенты основной матрицы, и вычислим их определитель.
A:=matrix (n, n,[1,1,-4,2,-1,1,3,5,6]);
opredelitA:=det (A);
Введем коэффициенты свободных членов.
B:=matrix (n, 1,[-15,9,1]);
Для превращения программы в программу для общего случая, необходимо использовать цикл, с помощью цикла нам удалось автоматически подставлять вектор столбец свободных членов сначала на место первого столбца, затем на место второго и т. д. в зависимости от размерности матрицы системы. И соответственно вычислять определители данных матриц и значения х1, х2, и т. д.
for m from 1 to n do.
r:=eval (m-1);
p:=eval (m+1);
F[m]: =concat (submatrix (A, 1. n, 1. r), B, submatrix (A, 1. n, p. n));
opredelitF[m]: =det (F[m]);
x[m]: =evalf (opredelitF[m]/opredelitA); od;
Получив все необходимые данные, а именно значения неизвестных переменных — х, необходимо провести проверку.
Для наглядности выведем значении полученных неизвестных коэффициентов:
> for m from 1 to n do X[m]=x[m]; od;
Разобьем первоначальную матрицу на отдельные векторы столбцы, и перемножим их со значениями неизвестных коэффициентов.
> for m from 1 to n do W[m]: =submatrix (A, 1. n, m. m);od;
for m from 1 to n do W[m]: =evalm (W[m]*x[m]); od;
Сложим полученные значения.
> Q:=evalm (W[1]+W[2]+W[3]);
> C:=matrix (B);
Очевидно, что полученный вектор столбец равен вектору столбцу, введенному ранее — столбцу свободных членов, значит решение данной системы верно, и полученные неизвестные коэффициенты действительно являются решениями данной системы.
Метод Гаусса.
Пусть в условии задачи нам дана некоторая система линейных алгебраических уравнений.
- 3*x1 + 2*x2 + x3 = 5
- 2*x1 + 3*x2 + x3 = 1
- 2*x1 + x2 + 3*x3 = 11
Необходимо доказать ее совместимость и решить методом Гаусса.
Неоднородная квадратная система линейных уравнений совместна при любом векторе правой части, если определитель не равен нулю.
> A:=matrix (3,3,[[2,1,0],[-3,4,0],[-2,1,2]]);
> B:=vector (3,[5,1,11]);
Вычислить определитель в Maple можно обратившись к команде det ().
> A:=matrix (3,3,[[2,1,0],[-3,4,0],[-2,1,2]]);
opredelit:=linalg [det](A);
Мы должны получить решение с помощью метода исключения Гаусса. В Maple нет специальной команды решения системы линейных уравнений этим методом, поэтому нам придется создать собственную идею вычисления:
> with (linalg):A:=matrix (3,3,[[2,1,0],[-3,4,0],[-2,1,2]]);
> B:=vector (3,[5,1,11]);
> m:=rowdim (A);
> c:=matrix (A);
> c:=concat (c, B);
> x:=vector (m);
> for i from 1 to m do r:=1/c[i, i]; c:=mulrow (c, i, r); if im then for j from i+1 to m do r:=-c[j, i]; c:=addrow (c, i, j, r);end do;end if; end do;
> x[m]: =c[m, m+1]; for i from m-1 to 1 by -1 do x[i]: =c[i, m+1]-sum (x[k]*c[i, k], k=(i+1).m); end do; sol:=eval (x);
Здесь мы получили значения х1, х2, х3, проверим правильность нашего решения с помощью сравнения вектора свободных членов, с нашей матрицей A помноженной на соответственные значения полученных иксов.
> evalm (A&*sol);evalm (B);
Из полученного результата мы видим, что полученный результат полностью совпадает со столбцом свободных членов, а значит наше решение верно.
В прямом ходе метода расширенная матрица системы приводится к верхнему треугольному виду с единицами на главной диагонали. В обратном ходе в векторе х процедуры вычисляется вектор решения системы, который и является ее обратным значением. При приведении матрицы к верхнему треугольному виду в двойном цикле используется команда addrow принадлежащая пакету linalg, а при последовательном вычислении элементов вектора решения — команда sum. Эти команды реализуют циклы.