Prozorov_Vych_math_SLAU
.pdf11
Цикл for
for var = expression body
endfor
Примечание. Более подробное описание этих команд, а также многих других, можно посмотреть в Octave Manual, которое запускается через пункт
Пуск\Программы\GnuOctave
§0.3. GNU OCTAVE - работа с функциями
1.Команда pwd - показывает рабочую директорию (Working Directory)
2.Функции можно писать в файлах с расширением .m (для совместимости
сMatlab).
Функция загружается по имени, например, функция реализующая метод Гаусса может быть выглядеть так:
function x=Gauss(A,b) . . . .
Тело функции . . . .
endfunction
Здесь A, b - это входные параметры, x - вектор неизвестных, то есть то, что данная функция возвращает. Вызов этой функции из командной строки осуществляется командой Gauss(A,b), при условии то, что эта функция сохранена в файле WorkingDirectory \ Gauss.m. Для того, чтобы сменить рабочую директорию, нужно набрать команду
cd G:\users\Ivanova
после этого программа будет искать файл с функцией в этой папке.
Пример 0.3.1. Пример. Программа умножения матриц a и b .
12
function c=mult(a,b)
#с - результат умножения, A и B перемножаемые матрицы
# Получаем размеры матриц [rowsA,colsA] = size (a); [rowsB,colsB] = size (b);
s=0;
if (colsA!=rowsB) error ("can’t multiply these matrixes"); else
# Pascal type procedure for i=1:rowsA
for j=1:colsB s=0;
for k=1:colsA s=s+a(i,k)*b(k,j);
endfor c(i,j)=s;
endfor endfor
endif endfunction
Можно используя матричные операции Octave type procedure c1(:,:)=a(:,:)*b(:,:);
§ 0.4. Машинная арифметика
Арифметика действительных чисел, реализована в вычислительной математике с помощью системы машинной арифметики с плавающей запятой, которая характеризуется тем, что вычисления проводятся с конечной системой чисел, с конечной точностью.
13 |
|
Вещественные числа представляются в виде |
|
x = §(1 + f)pe |
(0.4.1) |
где f мантисса (fraction), e экспонента (показатель), p (порядок).
В двоичной системе (p = 2) мантисса представима числом b1b2:::bt
f = |
b1 |
+ |
|
b2 |
+ ::: + |
bt |
: |
(0.4.2) |
||
|
2 |
|
2 |
2 |
t |
|||||
|
|
2 |
|
|
|
|
Показатель системы число e удовлетворяет следующему неравенству
emin < e < emax. Число f ограничивает точность, число e диапазон. Параметр t это число бит для хранения мантиссы. Параметры t,emin,
emax определяются типом данных, используемых в программе.
Отметим, что стандарт двойной точности (IEEE double presision) характеризуется следующими параметрами: t = 52 бита отводится на мантиссу, 11 бит на показатель, и 1 бит нужен для хранения знака вещественного числа.
Типичная ошибка, которая проистекает из представления (0.4.1), состоит
в следующем: число 0:5 представляется в виде
0:5 = (1 + 02 + ::)2¡1:
Все остальные слагаемые в мантиссе нули. Число 0:1 представляется в
виде
0:1 = (1 + 214 + 215 + 206 + 207 + 218 + 219 + :::)2¡4:
Видно, что в двоичной записи (которой пользуется машина), 0:1 представляется бесконечной периодической дробью, (мантисса имеет вид 000110011001100::) поэтому, когда мы оставляем первые t бит, что требует формат, мы допускаем ошибку, отбрасывая бесконечную последовательность из нулей и единиц.
При малых значениях параметров системы ее элементы можно выписать вручную. Рассмотрим, например, систему, которая задана параметрами
t = 3; emin = ¡2; emax = 1:
14
Всего одно число занимает один байт. Выпишем некоторые числа этой систе-
мы e = ¡2: |
|
|
|
|
|
|
|
|
|
|||
0 |
0 |
0 |
|
1 |
1 |
|
|
|||||
µ1 + |
|
+ |
|
+ |
|
¶ |
|
|
= |
|
, |
|
2 |
22 |
23 |
22 |
4 |
||||||||
µ1 + 2 |
+ 22 |
+ 23 |
¶ |
22 |
= 32, |
|||||||
0 |
0 |
1 |
|
1 |
9 |
|
||||||
µ1 + 2 |
+ 22 |
+ 23 ¶ |
22 |
= 16, |
||||||||
0 |
1 |
0 |
|
1 |
5 |
|
||||||
µ1 + 2 |
+ 22 |
+ 23 ¶ |
22 |
= 32, |
||||||||
0 |
1 |
1 |
|
1 |
11 |
|||||||
µ1 + 2 |
+ 22 |
+ 23 ¶ |
22 |
= 8, |
|
|||||||
1 |
0 |
0 |
|
1 |
3 |
|
|
|||||
µ1 + 2 |
+ 22 |
+ 23 ¶ |
22 |
= 32, |
||||||||
1 |
0 |
1 |
|
1 |
13 |
|||||||
1 |
1 |
0 |
|
1 |
7 |
|
||||||
µ1 + |
|
+ |
|
+ |
|
¶ |
|
|
= |
|
. |
|
2 |
22 |
23 |
22 |
16 |
||||||||
µ1 + 2 |
+ 22 |
+ 23 |
¶ |
22 |
= 32. |
|||||||
1 |
1 |
1 |
|
1 |
15 |
Перебирая всевозможные комбинации 0 и 1, можно выписать всю систему. Наименьшее число (realmin) данной системы равно 14, наибольшее (realmax) равно 154 . Для сравнения используемый в Octave формат имеет
octave:1> eps
eps = 2.2204e-16
octave:2>realmin
realmin = 2.2251e-308
octave:3>realmax
realmax = 1.7977e+308
п. 0.4.1. Погрешность вычислений. Пусть ba точное значение величи-
ны a, a~ приближенное, тогда число
¢a = jba ¡ a~j
15
называется абсолютной погрешностью величины a, а число
±a = jba ¡ a~j jbaj
называется относительной погрешностью величины a. Первое число показывает на сколько отклоняется приближенное значение от истинного, второекакую долю составляет это отклонение от истинного.
Глава 1. Прямые методы решения СЛАУ
§ 1.1. Метод Гаусса
Метод Гаусса состоит в приведении исходной матрицы системы к верхнетреугольной (диагональной) форме некоторыми эквивалентными преобразованиями. Решение полученной системы будет таким же, как и исходной. Сам алгоритм метода Гаусса хорошо известен из курса высшей алгебры, а мы рассмотрим лишь численную реализацию этого метода. Напомним, что преобразования метода Гаусса это умножение строки матрицы на ненулевое число, а также сложение с другой строкой. Рассмотрим метод Гаусса на примере.
Пример 1.1.1. Решить систему линейных алгебраических уравнений
Ax = b, где матрица системы
octave:1> A=[2 3 1 -3; 1 4 -3 2; -1 3 6 2; 2 3 -1 2] A =
2 |
3 |
1 |
-3 |
1 |
4 |
-3 |
2 |
-1 |
3 |
6 |
2 |
2 |
3 |
-1 |
2 |
вектор правых частей
16
octave:2> b=[3;4;10;6]
b=
3
4
10
6
Составим расширенную матрицу системы, добавив последним столбцом вектор b.
octave:3> a=A |
|
||||
a = |
|
|
|
|
|
2 |
3 |
1 |
-3 |
|
|
1 |
4 |
-3 |
|
2 |
|
-1 |
3 |
6 |
|
2 |
|
2 |
3 |
-1 |
|
2 |
|
octave:4> a(:,5)=b |
|||||
a = |
|
|
|
|
|
2 |
3 |
|
1 |
-3 |
3 |
1 |
4 |
|
-3 |
2 |
4 |
-1 |
3 |
|
6 |
2 |
10 |
2 |
3 |
|
-1 |
2 |
6 |
То же самое можно было сделать командой
octave:5> a=[A b];
Теперь последовательно будем исключать элементы, лежащие под диагональю. Начнем с первого. Элемент, стоящий на диагонали, в данном случаеэто a(1; 1) называется ведущим.
17
Для того, чтобы занулить элемент a(2; 1), нужно первую строку умножить на 1=2 и вычесть из второй. Число 1=2 это на первом шаге отношение зануляемого элемента к ведущему s = a(2; 1)=a(1; 1) = 1=2.
octave:6> s=a(2,1)/a(1,1) s = 0.50000
octave:7> a(2,:)=a(2,:)-s*a(1,:) a =
2.00000 3.00000 1.00000 -3.00000 3.00000
0.00000 2.50000 -3.50000 3.50000 2.50000 -1.00000 3.00000 6.00000 2.00000 10.00000 2.00000 3.00000 -1.00000 2.00000 6.00000
Проделаем то же самое с элементом a(3; 1).
octave:8> s=a(3,1)/a(1,1) s = -0.50000
octave:9> a(3,:)=a(3,:)-s*a(1,:) |
|
|
||
a = |
|
|
|
|
2.00000 |
3.00000 |
1.00000 |
-3.00000 |
3.00000 |
0.00000 |
2.50000 |
-3.50000 |
3.50000 |
2.50000 |
0.00000 |
4.50000 |
6.50000 |
0.50000 |
11.50000 |
2.00000 |
3.00000 |
-1.00000 |
2.00000 |
6.00000 |
и, наконец, последний элемент первого столбца
octave:10> s=a(4,1)/a(1,1) s = 1
octave:11> a(4,:)=a(4,:)-s*a(1,:) a =
|
|
18 |
|
|
2.00000 |
3.00000 |
1.00000 |
-3.00000 |
3.00000 |
0.00000 |
2.50000 |
-3.50000 |
3.50000 |
2.50000 |
0.00000 |
4.50000 |
6.50000 |
0.50000 |
11.50000 |
0.00000 |
0.00000 |
-2.00000 |
5.00000 |
3.00000 |
Возьмемся теперь за второй столбец: в нем (под диагональю) один ненулевой элемент (a(3; 2) = 4:5). Теперь ведущим будет элемент a(2; 2) = 2:5. Как и ранее
octave:12> s=a(3,2)/a(2,2) s = 1.8000
octave:13> a(3,:)=a(3,:)-s*a(2,:) |
|
|||
a = |
|
|
|
|
2.00000 |
3.00000 |
1.00000 |
-3.00000 |
3.00000 |
0.00000 |
2.50000 |
-3.50000 |
3.50000 |
2.50000 |
0.00000 |
0.00000 |
12.80000 |
-5.80000 |
7.00000 |
0.00000 |
0.00000 |
-2.00000 |
5.00000 |
3.00000 |
До верхнетреугольной формы остался всего лишь один элемент a(4; 3) = ¡2:
octave:14> s=a(4,3)/a(3,3) s = -0.15625
octave:15> a(4,:)=a(4,:)-s*a(3,:) |
|
|||
a = |
|
|
|
|
2.00000 |
3.00000 |
1.00000 |
-3.00000 |
3.00000 |
0.00000 |
2.50000 |
-3.50000 |
3.50000 |
2.50000 |
0.00000 |
0.00000 |
12.80000 |
-5.80000 |
7.00000 |
0.00000 |
0.00000 |
0.00000 |
4.09375 |
4.09375 |
19
Тем самым закончен прямой ход метод Гаусса, можно продолжать так же и прийти к диагональной матрице (обратный ход метода Гаусса). Обратный ход это нахождение неизвестных его можно реализовать непосредственно. А именно: последнее уравнение системы записано сейчас в виде
a(4; 4)x(4) = b(4): |
(1.1.1) |
Отсюда легко можно найти x(4):
octave:16> x=zeros(4,1);
octave:17> x(4)=a(4,5)/a(4,4) x =
0
0
0
1
Далее замечаем, что в третьей строке матрицы a сейчас два ненулевых элемента, они соответствуют x3 и x4. Значение x4 уже найдено, теперь из уравнения
a3;3x3 + a3;4x4 = a3;5
находим x3
octave:18> x(3)=(a(3,5)-a(3,4)*x(4))/a(3,3) x =
0
0
1
1
Аналогично из второго уравнения системы находим x2, а затем из первого x1.
20
octave:19> x(2)=(a(2,5)-a(2,3)*x(3)-a(2,4)*x(4))/a(2,2) x =
0
1
1
1
octave:20> x(1)=(a(1,5)-a(1,2)*x(2)-a(1,3)*x(3)-a(1,4)*x(4))/a(1,1) x =
1
1
1
1
В случае, если элемент на диагонали окажется равным нулю, нужно в качестве ведущего взять ненулевой элемет, лежащий в столбце под ведущим, например, наибольший по абсолютной величине.
§ 1.2. Норма векторов
Понятие нормы обобщает понятие модуля числа на векторные величины. В задачах численной математики, фигурируют погрешности, например, от-
носительная погрешность правой части СЛАУ - это
k ¢b k
±b = k b k ;
~
где ¢b = b ¡ b абсолютная погрешность правой части. Две черточки озна-
чают, что используется не модуль, а именно, норма. Норму можно вводить по-разному. Например: евклидова норма норма вектора a = (a1; a2; a3)
k a k2= q |
|
: |
|
||||
a12 + a22 + a32 |
(1.2.1) |
||||||
Равномерная (Чебышева) |
|
|
|
|
|
|
|
k a k1= |
max a |
jj |
: |
|
(1.2.2) |
||
j |
j |
|
|