Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Prozorov_Vych_math_SLAU

.pdf
Скачиваний:
26
Добавлен:
13.02.2015
Размер:
497.57 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Федеральное государственное

образовательное учреждение

высшего профессионального образования

ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ

О.А. Прозоров

Вычислительная математика

в примерах и задачах

Часть 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)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]