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

Prozorov_Vych_math_SLAU

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

11

Цикл 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

 

 

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