- •Студенты
- •1. Содержание
- •2. Постановка задачи
- •3. Методы решения систем линейных алгебраических уравнений
- •Метод Гаусса
- •3.1.1 Условия применимости метода Гаусса
- •3.1.2 Обоснование и вывод формул
- •Теоремы с доказательствами Теорема об lu-разложении
- •Следствие
- •Элементарные треугольные матрицы
- •3.1.4 Алгоритм метода Гаусса
- •Метод простой итерации
- •3.2.1 Условия применимости метода простой итерации
- •3.2.3 Алгоритм метода простой итерации
- •Метод Зейделя
- •3.3.1 Обоснование и вывод формул
- •3.3.2 Условия применимости метода Зейделя
- •3.3.3 Приведение системы к виду, удобному для итераций
- •3.3.4 Алгоритм метода Зейделя
- •Метод Крамера
- •3.4.1 Условия применимости метода Крамера
- •Метод главных элементов
- •3.5.1 Условия применимости метода главных элементов.
- •3.5.2 Обоснование и вывод формул
- •Метод квадратных корней
- •3.6.1 Обоснование и вывод формул
- •3.6.2 Условие применимости метода квадратных корней
- •3.7.1 Условия применимости схемы Халецкого
- •3.7.2 Обоснование и вывод формул
- •Теория погрешностей
- •3.8.1 Источники и классификация погрешностей результата
- •3.8.2 Типы погрешностей
- •Проверка ручного счета средствами Excel
- •Метод Крамера
- •Метод простой итерации
- •Метод Зейделя
- •Метод Гаусса с выбором главного элемента
- •Метод квадратных корней
- •Язык Fortran
- •Метод Гаусса
- •Метод простых итераций
- •Метод Зейделя
- •Результаты и их анализ
- •Список использованной литературы
Метод Зейделя
Таблица идентификаторов
В таблице 10 приведены основные идентификаторы, используемые в программе, реализующей метод Зейделя на языке Fortran.
Таблица 10 – Идентификаторы для метода Зейделя
Название переменной |
Тип |
Описание |
N |
int |
Размерность матрицы коэффициентов |
matrix [N][ N+1] |
double |
Матрица коэффициентов + свободные члены |
x_old [N] |
double |
Корни подсчитанные на i-ой итерации |
x [N] |
double |
Корни |
exp |
double |
Погрешность вычисления |
//zeid.for
1 |
2-5 |
6 |
9 72 | |||
|
|
|
program zeid implicit none character*64 file_name real matrix(100,101), x(100), x_old(100), summa, eps integer i, j, k, N write(*,*) "Enter file name: " read(*, *)file_name !чтение матрицы из файла open(3, FILE = file_name) read(3,*) N !размерность матрицы do i = 1,N read(3,*) (matrix(i,j), j=1,N+1) end do !печать матрицы do i = 1,N write(*,*) (matrix(i,j), j=1,N+1) x(i) = 0.0 x_old(i) = 1.0 end do write(*,*) "Entereps: " read(*,*)eps
!проверка на сходимость do i = 1,N summa=0.0 do j = 1,N summa = summa + abs(matrix(i,j)) end do summa = summa - abs(matrix(i,i)); if (summa > abs(matrix(i,i))) then stop ' diverges' end if end do
!делать итерации, пока не будет достигнута точность do while(.true.) do i = 1,N ! проверка, не достигнута ли заданная точность if(abs(x(i) - x_old(i)) < eps) then do k=1, N print*,"x(",k,")=",x(k) enddo stop end if end do do i = 1,N x_old(i) = x(i) end do do i = 1,N summa = 0.0; do j = 1,N if (i /= j) then summa = summa + (x(j)*matrix(i,j)); end if end do x(i) = (matrix(i,N+1)-summa)/matrix(i,i); end do end do end program
|
|
|
|
Результаты и их анализ
В таблицах 11 и 12 представлены результаты работы программ, реализующих методы: Гаусса, простой итерации, Зейделя, Крамера, Халецкого, Гаусса с выбором главного элемента и метод квадратных корней на языках программирования С++ и Fortran, показанные на рисунках 2.1-2.15, а также результаты полученные средствамиExcel, (рис.4.1-4.14). Также в таблице приведены расхождения в полученных результатах.
Таблица 11 – Сводная таблица результатов (Король)
Язык программирования |
Результат работы программы |
Результат ручного подсчета |
Расхождение результатов |
С++ |
Гаусс: х1=1,086 х2=0,008 х3=0,825 Итерации: х1=1,2772 х2=-0,4441 х3=-0,2617 x4=0,2016 Зейдель: х1=-19,7513 х2=58,4989 х3=-9,6409 Крамер: х1=2 х2=0 х3=0 x4=0 Метод Халецкого: х1=0,974 х2=-0,466 х3=0,282 x4=-0,569 y1=3,484 y2=0,209 y3=2,422 y4=-0,569 Метод главных элементов: х1=3,429 х2=1,666 х3=-0,791 Метод квадратных корней: х1=11,754 х2=-13,104 х3=1,2060 1=12,754 2=-12,104 3=2,200 |
Гаусс: х1=1,0863 х2=0,0082 х3=0,8253
Итерации: х1=1,2772 х2=-0,4441 х3=-0,2617 x4=0,2016
Зейдель: х1=-19,75 х2=58,49 х3=-9,64
Крамер: х1=2 х2=0 х3=0 x4=0
Метод Халецкого: х1=0,974 х2=-0,466 х3=0,282 x4=-0,569 y1=3,484 y2=0,209 y3=2,422 y4=-0,569
Метод главных элементов: х1=3,429 х2=1,666 х3=-0,791
Метод квадратных корней: х1=11,754 х2=-13,104 х3=1,206 1=12,754 2=-12,104 3=2,200 |
Гаусс: х1=0,0003 х2=0,0002 х3=0,0003 Итерации: отсутствуют Зейдель: отсутствуют Крамер: отсутствуют Метод Халецкого: отсутствуют Метод главных элементов: отсутствуют Метод квадратных корней: отсутствуют |
Excel |
Гаусс: х1=1,0863 х2=0,008222 х3=0,825374 Итерации: х1=1,277278 х2=-0,444148 х3=-0,261745 x4=0,201607 Зейдель: х1=-19,7513 х2=58,49896 х3=-9,64094 Крамер: х1=2 х2=0 х3=0 x4=0 Метод Халецкого: х1=0,9745 х2=-0,4665 х3=0,2828 x4=-0,5697 y1=3,4844 y2=0,2097 y3=2,4221 y4=-0,5697 Метод главных элементов: х1=3,429 х2=1,666 х3=-0,791 Метод квадратных корней: х1=11,754 х2=-13,104 х3=1,206 1=12,754 2=-12,104 3=2,200 |
Гаусс: отсутствуют Итерации: Для х10,000078 Для х20,000048 Для х30,000045 Для x4 0,000007 Зейдель: х1=0,0013 х2=0,00896 х3=-9,64094 Крамер: отсутствуют Метод Халецкого: х1=0,005 х2=-0,005 х3=0,008 x4=-0,007 y1=0,004 y2=0,007 y3=0,001 y4=-0,0007 Метод главных элементов: отсутствуют Метод квадратных корней: отсутствуют | |
Fortran |
Гаусс: х1=1,0863 х2=0,008222 х3=0,825374 Итерации: х1=1,277278 х2=-0,444148 х3=-0,261745 x4=0,201607 Зейдель: х1=-19,7513 х2=58,49896 х3=-9,64094 |
Гаусс: отсутствуют Итерации: Для х10,000078 Для х20,000048 Для х30,000045 Для x4 0,000007 Зейдель: Для х10,0000226 Для х20,0000437 Для х30,0001051 |
Таблица 12 – Сводная таблица результатов (Скворцова)
Язык программирования |
Результат работы программы |
Результат ручного подсчета |
Расхождение результатов |
С++ |
Гаусс: х1=0,587 х2=0,031 х3=0,255 Итерации: х1=-1,53107 х2=-0,771092 х3=0,909281 x4=0,687675 Зейдель: х1=3,137266 х2=-12,4684 х3=-6,60387 Крамер: х1=2 х2=0 х3=0 x4=0 Метод Халецкого: х1=8,234 х2=0,776 х3=-0,6901 x4=-0,655 y1=9,0909 y2=0,4198 y3=-0,077 y4=-0,655 Метод главных элементов: х1=-0,791 х2=1,666 х3=-3,429 Метод квадратных корней: х1=2,691 х2=-2,849 х3=0,825 1=3,691 2=-1,849 3=1,825 |
Гаусс: х1=0,587 х2=0,031 х3=0,255
Итерации: х1=-1,531105 х2=-0,771126 х3=0,909377 x4=0,687759
Зейдель: х1=3,1373 х2=-12,4684 х3=-6,6039
Крамер: х1=2 х2=0 х3=0 x4=0
Метод Халецкого: х1=8,234 х2=0,776 х3=-0,6901 x4=-0,655 y1=9,0909 y2=0,4198 y3=-0,077 y4=-0,655 Метод главных элементов: х1=-0,791 х2=1,666 х3=-3,429
Метод квадратных корней: х1=2,691 х2=-2,849 х3=0,825 1=3,691 2=-1,849 3=1,825 |
Гаусс: отсутствуют Итерации: х1=0,000012 х2=0,000034 х3=0,00009 x4=0,000104 Зейдель: х1=0,000034 х3=0,00013 Крамер: отсутствуют Метод Халецкого: отсутствуют Метод главных элементов: отсутствуют Метод квадратных корней: отсутствуют |
Excel |
Гаусс: х1=0,586723 х2=0,030839 х3=0,254991 Итерации: х1=-1,531105 х2=-0,771126 х3=0,909377 x4=0,687759 Зейдель: х1=3,137266 х2=-12,4684 х3=-6,60387 Крамер: х1=2 х2=0 х3=0 x4=0 Метод Халецкого: х1=8,2339 х2=0,776 х3=-0,6901 x4=-0,6551 y1=9,0909 y2=0,4198 y3=-0,0771 y4=-0,6551 Метод главных элементов: х1=-0,791 х2=1,666 х3=-3,429 Метод квадратных корней: х1=2,691 х2=-2,849 х3=0,825 1=3,691 2=-1,849 3=1,825 |
Гаусс: х1=0,000023 х2=0,000171 х3=0,000111 Итерации: отсутствуют Зейдель: х1=0,000044 х3=0,000013 Крамер: отсутствуют Метод Халецкого: х1=0,005 х2=-0,005 х3=0,008 x4=-0,007 y1=0,004 y2=0,007 y3=0,001 y4=-0,0007 Метод главных элементов: отсутствуют Метод квадратных корней: отсутствуют | |
Fortran |
Гаусс: х1=0,587623 х2=0,0309 х3=0,25499 Итерации: х1=-1,53107 х2=-0,771092 х3=0,909281 x4=0,687675 Зейдель: х1=3,137266 х2=-12,4684 х3=-6,60387
|
Гаусс: х1=0,0000623 х2=0,00009 х3=0,000011 Итерации: х1=0,000012 х2=0,000034 х3=0,00009 x4=0,000104 Зейдель: х1=0,000034 х3=0,00013
|
Выводы
Существует несколько методов решения систем линейных уравнений, мы изучили метод Гаусса, метод простой итерации, метод Зейделя, метод Крамера, метод Халецкого, метод главных элементов и метод квадратных корней. Какие-то из этих методов являются более эффективными, а какие-то менее.
Выбор определенного метода решения систем линейных алгебраических уравнений производится в каждом конкретном случае в зависимости от вида матрицы , её особенностей, а также от используемой вычислительной техники.
Если вычисления ведутся с помощью калькулятора, то для сокращения записи промежуточных результатов при решении систем линейных алгебраических уравнений используют компактную схему Гаусса. При работе на калькуляторе удобна также схема Халецкого. В ней получение расчетных формул основано на представлении матрицы (невырожденной, квадратной) системы в виде произведения двух треугольных матриц согласноLU-теореме.
Для уменьшения влияния погрешности округления в прямых методах следует отдать предпочтение методу Гаусса с выбором главного элемента. Количество арифметических операций в методе Гаусса и его модификациях приблизительно одинаково.
В случае, когда A– симметрическая матрица, для экономии памяти следует применять метод квадратного корня.
Для систем с трех–пятидиагональной матрицей можно применять каждый из вышеописанных методов. При решении систем линейных алгебраических уравнений с помощью метода Гаусса и его модификаций, а также метода квадратного корня число действий приблизительно пропорционально кубу числа неизвестных.
Полученные результаты, как видно из сводной таблицы результатов, имеют некоторые расхождения в силу особенностей языков программирования и погрешностей вычисления.
В зависимости от того, какого вида СЛАУ требуется решить, зависит и выбор метода.