Prozorov_Vych_math_SLAU
.pdfФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Федеральное государственное
образовательное учреждение
высшего профессионального образования
ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ
О.А. Прозоров
Вычислительная математика
в примерах и задачах
Часть I. Решение систем линейных уравнений
Методическое пособие для студентов вечернего отделения факультета математики, механики и компьютерных наук
г. Ростов-на-Дону 2007 г.
Содержание |
|
Введение |
3 |
§ 0.1.Система программирования GNU octave - консольный |
|
режим . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
3 |
п.0.1.1. Gnu Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
п.0.1.2. Краткое введение в среду программирования . . . . . . . . . . . . . 4
п. 0.1.3. |
Заполнение матриц . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
6 |
п. 0.1.4. |
Простейшие операции над матрицами . . . . . . . . . . . . . . . . . |
7 |
§0.2. Элементы программирования . . . . . . . . . . . . . . . . . . . . 9
§0.3. GNU OCTAVE - работа с функциями . . . . . . . . . . . . . 11
§0.4. Машинная арифметика . . . . . . . . . . . . . . . . . . . . . . . . 12
п.0.4.1. Погрешность вычислений . . . . . . . . . . . . . . . . . . . . . . . . . 14
Глава 1. Прямые методы решения СЛАУ |
15 |
§1.1. Метод Гаусса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
§1.2. Норма векторов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
§1.3. Обусловленность СЛАУ . . . . . . . . . . . . . . . . . . . . . . . . 21
Глава 2. Итерационные методы решения СЛАУ |
25 |
§ 2.1. Метод простых итераций . . . . . . . . . . . . . . . . . . . . . . . |
25 |
§2.2. Метод Якоби . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
§2.3. Метод Зейделя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
§2.4. Сходимость итерационных методов. . . . . . . . . . . . . . . . 31
§2.5. Лабораторные задания . . . . . . . . . . . . . . . . . . . . . . . . . 33
3
Введение
Данное пособие предназначено, в первую очередь, для студентов вечернего и дневного отделения специальности "Информационные системы и технологии". В отличие от стандартных курсов, упор, в основном, делается на простую реализацию известных вычислительных алгоритмов, а не на их обоснование. При этом в качестве программной среды используется программа GNU Octave, которая является бесплатным аналогом пакета MatLab. Пособие содержит ряд задач линейной алгебры, а также простейшее решение этих задач. Используя методическое пособие, студенты изучают методы линейной вычислительной алгебры и овладевают основами математического программирования.
§ 0.1. Система программирования GNU octave - консольный режим
п. 0.1.1. Gnu Octave. GNU Octave язык высокого уровня, предназначенный для выполнения математических вычислений, совместимый с Matlab. В каком-то смысле, это бесплатная альтернатива Matlab. Octave можно использовать для пакетной обработки, в программе поддерживаются основные математические задачи: линейная алгебра, обработка сигналов, этот список можно легко расширить, используя язык Octave (или используя динамически загружаемые модули, созданные на языках C, С++, Фортран и др.). Octave свободно распространяемое программное обеспечение, по условиям GPL (General Public License). Условия распространения можно найти на странице http://www.gnu.org/copyleft/gpl.html. Прочесть о программе, а также загрузить ее последнюю версию можно с сайта http://www.octave.org/.
4
п. 0.1.2. Краткое введение в среду программирования. Рассмотрим основные матричные операции в среде Octave. Зададим матрицу
octave:1> a = [2 3 1; -1 3 5; 9 1 2] a=
2 3 1
1 3 5
9 1 2
Если в конце строки стоит ";", то результат не отображается на экране. Столбцы в матрице разделяются ";", а строки запятой или пробелом, поэтому команда
octave:2> b = [1,3,4] b = 1 3 4
задает вектор-строку, а команда
octave:3> b = [1; 3; 4] b =
1
3
4
задает вектор-столбец. Можно задать диапазон индексов, например, i=1:3 или ":", что понадобится в следующем подпункте.
Работа с частью матрицы
octave:4> A=[2, 3, 1, 2; 9, 7, 2, 4;-1, 3, 2, 1] A =
2 3 1 2
9 7 2 4 -1 3 2 1
5
octave:5>A(:,1) ans =
2
9 -1
Последняя команда выделяет первый столбец матрицы. Двоеточие показывает, что мы обращаемся ко всем строкам. Следующая команда
octave:6> B=A([1 2], 2:3) B =
3 1
7 2
выделяет из матрицы следующий фрагмент: первую и вторую строчки и столбцы со второго по третий, из полученных элементов формирует матрицу B. Обратите внимание на то, что индексация матриц относительная, например, матрица B теперь имеет независимую от A индексацию
octave:7> B(2,:) = 7 2
Процедура перемены строк или столбцов матрицы в Octave осуществляется одной строкой:
octave:8>A([1 2],:)=A([2 1],:) A =
9 7 2 4
2 3 1 2 -1 3 2 1
6
п.0.1.3. Заполнение матриц.
ВOctave реализован ряд команд для создания стандартных матриц. Можно создать единичную матрицу
octave:1>E=eye(3) E =
1 0 0
0 1 0
0 0 1
и после этого обращаться к ней, используя идентификатор E. Нулевая матрица
octave:2>
O=zeros(2,3)
O =
0 0 0
0 0 0
Случайно заданная матрица
octave:3> rand(2,4) ans =
0.16722 0.88236 0.95124 0.25761
0.88373 0.98208 0.89763 0.70596
7
п. 0.1.4. Простейшие операции над матрицами.
Транспонирование
octave:1>A’ ans =
9 2 -1
7 3 3
2 1 2
4 2 1
Умножение матриц или матрицы на вектор
octave:2>B=[2;3;1;2] B =
2
3
1
2
octave:3> A*B ans = 49 18 11
Сложение
octave:4>C=[1,3,0,1; 1,7,1,4;-1,1,2,1] C =
1 3 0 1
1 7 1 4 -1 1 2 1
octave:5>2*A-3*C ans =
8
15 5 4 5
1 -15 -1 -8
1 3 -2 -1
Можно получить размеры матрицы.
Определение размера матрицы
octave:6>[m,n]=size(A) m = 3 n = 4
Норма матрицы или вектора
octave:7>norm(A) ans = 13.018
octave:8>norm(B,2) ans = 4.2426
Решение систем линейных уравнений и LU разложение
octave:9> A=[2,3,1; 9,7,2;-1,3,2] A =
2 3 1
9 7 2 -1 3 2
octave:10> b=[1;2;1] b =
1
2
1
Команда A\b решает систему Ax=b по методу Гаусса
9
octave:11> A \ b ans =
-0.10000 0.50000 -0.30000
Команда inv(A) находит обратную матрицу
octave:12>inv(A) ans =
0.80000 0.30000 0.10000
2.00000 -0.50000 -0.50000 -3.40000 0.90000 1.30000
§ 0.2. Элементы программирования
Условный оператор if
if (условие) if-body
endif
Условие считается истинным, если его значение не равно нулю, и ложно в противном случае. В качестве условия можно задавать вектор или матрицу, тогда условие будет истинным, если все элементы ненулевые.
if (условие) if-body
else else-body
endif
Следующий пример определение четности числа
10
if (rem (x, 2) == 0) printf ("x is even \ n"); else
printf ("x is odd \n");
endif
Еще одна форма
if (условие) then-body elseif (условие)
elseif-body else
else-body
endif
Выражение elseif может встречаться любое число раз. Каждое условие проверяется и если одно из них истина, выполняется его тело. Если все они ложны, и в конце есть ветвь else, она и выполняется. Ветвь else может быть только одна.
Циклы
Цикл while
while (condition) body
endwhile
Цикл do-until
do
body
until (condition)