Разработка программы для решения систем линейных алгебраических уравнений методом Зейделя
Министерство образования Российской
Федерации
Национальный минерально-сырьевой
университет "Горный"
Кафедра информатики и компьютерных
технологий
КУРСОВАЯ РАБОТА
по дисциплине Информатика
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
Тема работы: Разработка программы для
решения систем линейных алгебраических уравнений методом Зейделя
Автор: студент гр Морозов А.В.
Проверил: ассистент /Кротова С.Ю./
Санкт-Петербург 2012
Аннотация
Пояснительная записка представляет собой отчет о выполнении
курсовой работы на тему "Разработка программы для решения систем линейных
алгебраических уравнений методом Зейделя". В ней рассмотрены вопросы об
оформлении решения систем уравнений на языке Visual Basic for Application.
Страниц ___.
Оглавление
Введение
Теория метода
Вычислительная схема метода Зейделя
Разработка программы на языке VBA
Решение СЛАУ методом Зейделя в MS Excel
Решение СЛАУ методом Зейделя в MathCad
Решение СЛАУ методом Зейделя в MatLab
Заключение
Библиографический список
Введение
Система m линейных уравнений с n неизвестными имеет сл.
вид:
, где
корни СЛАУ;
коэффициенты системы;
свободные члены.
Если число m уравнений
равно числу n неизвестных, то такая система называется
квадратной. В данной работе рассматривается решение квадратных систем.
В матричном виде квадратная СЛАУ выглядит следующим образом:
или , где
А - матрица
коэффициентов системы;
х - столбец
неизвестных;
b - столбец свободных членов.
Для матрицы А существует невырожденная матрица С,
если . Тогда . Если матрица С является обратной для А, т.е. , тогда:
Для решения СЛАУ разработано множество методов. Прямые методы
позволяют найти решение за определенное количество шагов. К ним относятся:
1) Метод Гаусса;
2) Метод Гаусса - Жордана;
) Метод Крамера;
) Матричный метод и др.
Итерационные методы позволяют найти решение СЛАУ путем
уточнений начальных приближений многократным повторением одинаковых итераций.
Число итераций зависит от заданной точности решения.
Наиболее распространенные итерационные методы:
) Метод Якоби (метод простой итерации);
2) Метод Гаусса - Зейделя.
К решению систем линейных уравнений сводятся такие группы
задач:
) задачи механики (статические, теплотехнические);
2) задачи из геодезии, связанные с построением карт на
основании данных геодезической съемки;
) задачи приближенного решения уравнений, имеющих
большое распространение в высшей математике;
) системы линейных уравнений широко используются в
области физики и смежных с ней наук: теории относительности, атомной физике,
при составлении прогнозов погоды и т.д.
Перечисленные задачи не исчерпывают всех случаев
использования систем линейных уравнений, но обнаруживают, насколько часто
приходится сталкиваться при решении задач математики и естествознания с
необходимостью исследовать и точно или приближенно решить систему линейных
уравнений.
линейное алгебраическое уравнение программа
Теория метода
Метод Гаусса-Зейделя можно рассматривать как модификацию метода
Якоби. Основная идея модификации состоит в том, что новые значения используются здесь сразу же по мере
получения, в то время как в методе Якоби они не используются до следующей
итерации.
Пусть дана квадратная система линейных алгебраических уравнений с n неизвестными, корни которой необходимо
найти с заданной точностью :
или
Для решения данной СЛАУ можно применить метод Зейделя, если
выполняется условие сходимости для матрицы А. Оно заключается в
следующем: модули диагональных элементов строки или столбца матрицы должны быть
больше суммы модулей недиагональных элементов этой строки или столбца, т.е.:
Преобразуем матричное выражение к виду , разрешив n-ю строку относительно переменной :
Придадим начальные приближения , значения которых можно рассчитать как: . Посчитаем первые приближения, подставив в систему. Соответственно, на k-м шаге приближения будут рассчитываться
как:
В общем виде расчетные формулы выглядят:
Из вычислительной математики известие факт, что для СЛАУ в виде , при условии сходимости матрицы, в
процессе итераций получаемые приближения сходятся к корням уравнения при любом
начальном приближении, т.е. , где i-й корень СЛАУ. Количество итераций зависит от необходимой
точности. Если задана точность , то процесс уточнения неизвестных прекращают, когда выполняется
условие критерия близости на k-м шаге:
Вычислительная
схема метода Зейделя
Рассмотрим вычислительную схему метода Зейделя на примере
системы уравнений задания:
Матрица системы
, вектор-столбец
. Проверяется условие сходимости матрицы:
верно;
верно;
верно.
. Вычисление начальных приближений:
4. Нахождение приближений:
. Критерий близости:
, заданная точность не достигнута.
Дальнейшие итерации выполняются аналогично (таблица 1).
Таблица 1
Результат вычислений методом Зейделя
k
|
|
|
|
|
|
|
|
0
|
0,187
|
-0,169
|
-0,137
|
|
|
|
|
1
|
0,187
|
-0,173
|
-0,076
|
0,0007
|
0,0044
|
0,0615
|
0,0615
|
2
|
0, 190
|
-0,155
|
-0,085
|
0,0024
|
0,0179
|
0,0088
|
0,0179
|
3
|
0,189
|
-0,158
|
-0,083
|
0,0010
|
0,0027
|
0,0014
|
0,0027
|
4
|
0,189
|
-0,158
|
-0,083
|
0,0001
|
0,0004
|
0,0002
|
0,0004
|
Решение достигается за 4 итерации. Корни СЛАУ:
Разработка
программы на языке VBA
1. Блок-схема программы
. Описание подпрограмм
) Имя: VVOD
Назначение: подпрограмма, осуществляющая считывание
данных с листа MS Excel.
Вход:
list - лист MS Excel, в котором содержаться
исходные данные;
row - номер строки, с которой начинается считывание
матрицы;
col - номер столбца, с которого начинается
считывание матрицы;
n - число строк матрицы;
m - число столбцов матрицы.
Выход:
М1 () - матрица исходных данных.
2) Имя: PROVERKA
Назначение: осуществляет проверку сходимости матрицы
коэффициентов, сообщает результат проверки.
list - лист MS Excel, на который выводится
результат проверки сходимости;
n - число строк и столбцов матрицы;
М1 () - матрица исходных данных.
Выход: -
3) Имя: ZEIDEL
Назначение: осуществляет решение СЛАУ, выводит процесс
вычислений на лист MS Excel.
Вход:
list - лист MS Excel, на который выводится
вычисления;
n - число строк и столбцов матрицы;
М1 () - матрица коэффициентов;
М2 () - матрица-столбец.
Выход:
М3 () - матрица, содержащая корни СЛАУ
4) Имя: VIVOD
Назначение: подпрограмма, осуществляющая вывод корней
СЛАУ на лист MS Excel
Вход:
list - лист MS Excel, в который выводятся
данные;
n - число строк матрицы корней;
М3 () - матрица корней.
Выход: -
3. Листинг подпрограммы
) Основная программа
Sub RESHENIE ()C As Integer = InputBox ("Введите число
переменных")
ReDim A (C, C) As Singleb (C, 1) As SingleX (C)
As SingleVVOD (1, 2, 1, C, C, A ())VVOD (1, 2, C + 1, C, 1, b ())PROVERKA (1,
C, A ())ZEIDEL (1, C, A (), b (), X ())VIVOD (1, C, X ())Sub
) Подпрограмма ввода данных
Sub VVOD (list As Integer, row As Integer, col As
Integer, n As Integer, m As Integer, M1 () As Single)i As Integerj As Integeri
= 1 To nj = 1 To m(i, j) = Worksheets (list). Cells (row + i - 1, col + j - 1).
ValuejiSub
3) Подпрограмма проверки сходимости
Sub
PROVERKA (list As Integer, n As Integer, M1 () As Single)i As Integerj As
Integerd As Integersum As Integer(list). Cells (1, n + 3). Value = "Проверка сходимости"= 0i = 1 To n= 0j = 1 To
nj <> i Then sum = sum + Abs (M1 (i, j))jAbs (M1 (i, i)) > Abs (sum)
Then d = d + 1id = n Then(list). Cells (2, n + 3). Value = "Сходится"(list). Cells (2, n + 3). Value =
"Не сходится"IfSub
) Подпрограмма
решения СЛАУ методом Зейделя
Sub
ZEIDEL (list As Integer, n As Integer, M1 () As Single, M2 () As Single, M3 ()
As Single)i As Integerj As Integerg As IntegerS As Singlem (n) As SingleX (n)
As Singlee As Singlef As Singlev As Single= 0.001= o
'Подсчет
начальных приближений. Подготовка таблицы решения
For i
= 1 To n(i) = M2 (i, 1) / M1 (i, i)(list). Cells (n + 3, 1). Value =
"№"(list). Cells (n + 3,2). Value = Str (g)(list). Cells (n + 4 + i,
1). Value = "X" + Str (i)(list). Cells (2 * n + 5 + i, 1). Value =
"раз-ть X" + Str (i)(list). Cells (3 * n + 7, 1). Value = "MAX разность"(list). Cells (n + 4 + i, g + 2).
Value = CInt (X (i) * 1000) / 1000i
'Подсчет суммы элементов
For i
= 1 To nj = 1 To ni <> j Then S = S + M1 (i, j) * X (j)j
'Нахождение приближений
v = X
(i)(i) = (1/M1 (i, i)) * (M2 (i, 1) - S)(list). Cells (n + 4 + i, g + 3). Value
= CInt (X (i) * 1000) / 1000= 0(i) = Abs (X (i) - v)(list). Cells (2 * n + 5 +
i, g + 3). Value = CInt (m (i) * 10000) / 10000
'Выбор наибольшей
разности
f = m (1)
j = 1f
< m (j) Then f = m (j)= j + 1Until j > n(list). Cells (3 * n + 7, g + 3).
Value = CInt (f * 10000) / 10000i= g + 1(list). Cells (n + 3, g + 2). Value =
gUntil f < ei = 1 To n(i) = X (i)iSub
5) Подпрограмма вывода корней СЛАУ
Sub
VIVOD (list As Integer, n As Integer, M3 () As Single)i As Integercol As
Integer= n + 6(list). Cells (1, col). Value = "Корни СЛАУ"i = 1 To n(list). Cells
(1 + i, col). Value = "X" + Str (i)(list). Cells (1 + i, col + 1).
Value = CInt (M3 (i) * 1000) / 1000iSub
Результат
работы программы
Сначала
пользователю необходимо ввести СЛАУ в матричном в виде: выписать матрицу
коэффициентов при неизвестных и матрицу свободных членов (рис.1).
Рис.1.
При запуске
программы появляется диалоговое окно, в котором предлагается ввести число
переменных СЛАУ (рис.2).
Рис.2.
Пользователю
необходимо ввести число переменных (равно числу строк СЛАУ), после чего
программа выдает на лист MS Excel корни уравнения, а также вычисления,
выполняемые в каждой итерации (рис.3).
Самостоятельный
ввод пользователем числа переменных делает программу для решения СЛАУ методом
Зейделя применимой для любого числа переменных.
Рис.3.
Решение СЛАУ
методом Зейделя в MS Excel
Рис.4.
Решение СЛАУ методом Зейделя в MathCad
Проверка сходимости
Начальные приращения
Первая итерация
Третья итерация
Четвертая итерация
,
Решение СЛАУ
методом Зейделя в MatLab
clc; clear all, close all;
%Исходные данные= [7.77, 0.27, - 0.29;
.15 - 6.22, 1.77;
.05, 4.52, 9.544;];= [1.45, 1.05, - 1.31];= [0 0 0;
0 0];=0.001;
%Начальные приближения=b (1,1) /A (1,1);
x2=b (1,2) /A (2,2);=b (1,3) /A (3,3);=max (abs
(x1),abs (x2));=max (m,abs (x3));m<e([x1 x2 x3]);
%Итерацииm>e(1,1) =x1;
X (1,2) =x2;(1,3) =x3;= ( (b (1,1) - A (1,2)
*x2-A (1,3) *x3) /A (1,1));= ( (b (1,2) - A (2,1) *x1-A (2,3) *x3) /A (2,2));=
( (b (1,3) - A (3,1) *x1-A (3,2) *x2) /A (3,3));(2,1) = (x1-X (1,1));(2,2) =
(x2-X (1,2));(2,3) = (x3-X (1,3));=max (abs (X (2,1)), abs (X (2,2)));=max (m,
abs (X (2,3)));;
disp ([x1 x2 x3])
Рис.5.
Заключение
В ходе выполнения работы нами была разработана программа на
языке VBA, позволяющая находить корни СЛАУ методом Зейделя. Правильность работы
программы была проверена аналогичным методом в редакторе MS Excel и математических пакетах
MathCad и MatLab. В результате проверки
корни СЛАУ, вычисленные программой, и корни, найденные с помощью вышеуказанных
средств, совпали. Разработанная программа применима для решения СЛАУ методом
Зейделя с другим числом переменных при условии сходимости матрицы
коэффициентов.
Библиографический
список
1.
Методические указания к курсовой работе Информатика решение систем линейных
алгебраических уравнений итерационными методами. Санкт-Петербург, 2004г.
.
Демидович Б.П., Марон И.А. Основы вычислительной математики. Учебн. пособие для
ВТУЗов. Изд.4-е, испр. М.: Наука, 1970.
.
Зельднер Г.А. Программируем на языке QuickBASIC 4.5 Изд 2-е, исправленное и
дополненное, М.: ABF, 1996.
.
Хэлворсон М. Эффективная работа с Microsoft Office 2000. СПб, М, Харьков,
Минск: Питер, 2001.