Вы находитесь на странице: 1из 8

Лекция 2

ЛИНЕЙНЫЕ АЛГОРИТМЫ. ЦИКЛЫ. ПРИБЛИЖЁННОЕ


ИНТЕГРИРОВАНИЕ. ЭФФЕКТИВНОСТЬ ФОРМУЛ ИНТЕГРИРОВАНИЯ.
УМНОЖЕНИЕ МАТРИЦ. ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЕЙ

Эффективность программных способов решения прикладных задач


особенно явно проявляется в случаях, когда сталкиваемся с многократным
выполнением однотипных операций. Для иллюстрации и сравнения обычных
и программных методов решения задач представим себе процесс достижения
десятого этажа по ступенькам и на лифте. Тот, кто испытал эти два способа,
естественно выберет лифт. Аналогично, тот, кто освоил программные
методы решения задачи, повсеместно будет стремиться добавиться, именно
программного способа решения задачи. Для этого необходимо освоить
навыки проектирования алгоритмов, представление их на алгоритмических
языках программирования и процесс отладки программ на ВМ. Структура и
тематика данного курса сформирована исходя именно из этой цели.

Вычислительные процессы условно можно разбить на линейные и


разветвляющиеся типы. Под линейными процессами подразумеваются
вычислительные процессы, в которых вычисления производятся по строго
установленной последовательности без исключений. К таким процессам
можно отнести циклические процессы с заранее установленным числом
повторений. Приведем ряд примеров такого типа:
20
1
Пример 1. Вычислить значение суммы S   .
n 1 n  1
2

Как видно из постановки, процесс вычисления этой суммы не имеет


никакой сложности, но связан с многократным повторением однотипных
операций. В настоящее время, даже незнакомого с навыками
программирования человека трудно заставить произвести эти вычисления.
Сейчас, каждый более или менее образованный человек, интуитивно
осознает существование таких средств, которые мгновенно могут
предоставить ответы подобных задач. Как в случае с вышеизложенной
задачи с лифтом: зачем в поте лица добираться на десятого этажа по
ступенькам, когда существует лифт? Именно такая психология должна
развиваться у студентов, повсеместно, при сталкивании с любой более или
менее сложной проблемой. Он должен искать программные пути решения
проблемы и уметь составлять такие программы. Для иллюстрации процесса

1
программирования циклических вычислений изобразим блок-схему
вычисления вышеизложенной суммы

Рисунок 2.1

Ввод N

S=0 ; k=1

S=S+1/( +1)

k=k+1
нет

k>N
да

да

Вывод S

Конец

По представленной блок-схеме без труда можно представить программу


решения задачи на алгоритмическом языке. Причем по этой программе
можно вычислить сумму любого числа слагаемых. Для этого достаточно при
вводе указать именно это значение N .

Рассмотрим еще одну задачу, связанную с вычислением сумм.


15
xn
Пример 2. Вычислить значения суммы Y   в точках
n 0 n !

x  0; 0,1; 0,2;  ;0,9.

Решение. Представим блок-схему решения

2
Рисунок 2.2

X=0

S=1 ; n=1 ; Z=1

Z=Z*x/n;S=S+Z

n=n+1
нет

n>15
да

Вывод x,S

x=x+0,1

нет
x>0.9 2

Конец

Отметим, что вышеуказанная сумма представляет собой конечную сумму


ряда Маклорена для функции y  e x и может быть использовано для
вычисления значений этой функции.

Аналогичные методы используются для вычисления значений для всех


часто встречающихся стандартных функций. Соответствующие программы
заложены в операционную систему ВМ и мы можем при необходимости
просто записать вид функции в соответствии с грамматикой выбранного
языка программирования. При этом мы должны помнить, что за каждой
такой функцией стоит какая-то блок-схема и программа вычислений.
3
Напомним ещё одно утверждение: сумма любого сходящегося
функционального ряда представляет какую – то функцию. Так что, алгоритм
вычисления сумм, представленный в виде блок-схемы, является достаточно
общим и универсальным. При необходимости изменения вида слагаемых или
числа слагаемых достаточно внести эти изменения в блок-схему и
программу. При этом общая структура сохраняется.

Среди циклических алгоритмов можно выделить алгоритм вычисления


произведения матриц. Если заданы две матрицы A  n  k  и B  k  m  то
можно определить произведение этих матриц. При этом произведением этих
матриц будет матрица C  n  m  . Необходимым условием возможности
умножения является равенство числа столбцов первой матрицы A числу
строк второй матрицы B. При этом можем написать : C  A  B. Причем
элементы матрицы C вычисляются по формуле
k
Cij   ail  blj ;1  i  n;1  j  m. (2.1)
l 1

Процесс вычисления по формуле (2.1) представляет собой тройной


вложенный друг в друга цикл. Блок-схему данного процесса можно
представить в виде

Рисунок 2.3
Ввод элементов A,B и их размерностей N,M,K

i=1

j=1

R=1;S=0

S=S+

l=l+1
нет

l>k
4
нет

=S

j=j+1

нет
j>M
да

i=i+1

нет

i>N 3

Вывод C
да

Конец

Примечание: При составлении программы по данной блок-схеме работу


блоков (2), (11), (12); (3), (9), (10) и (4), (6), (7) можно представить
соответствующими операторами циклов по переменным i, j и k . Иначе
говоря программа будет выражена достаточно компактно, но включит в себя
инструкцию по выполнению большого объёма вычислений. К примеру, если
A  8  10  B  10  9  то матрица C будем иметь размерность [ 8×9] из 72
элементов, каждый из которых будет представлять собой сумму из десяти
слагаемых.

Одной из достаточно часто встречающихся в приложениях задач,


является задача вычисления определителей. По определению определителем
квадратной матрицы порядка A  n  n  называется сумма все возможных
произведений из n элементов матрицы A, причем в этих произведениях из
каждой строки и столбца должен участвовать быть только один элемент.
Формулу для вычисления определителя можно представить в виде:

det A    1 a1k1  a2 k2  a3k3    ankn


r
(2.2)

5
При этом каждая комбинация k1 , k2 , k3 , , kn представляет собой одну
перестановку чисел 1, 2,..., n. Число перестановок равно n! следовательно,
число слагаемых в формуле (2.2) будет равно n! Легко подсчитать число
необходимых операций для вычисления определителя порядка n:  n  1  n!
умножений и n! сложений.

Имеются различные способы вычисления определителей. Наиболее


прозрачным, из которых, является метод разложения по элементам строки
или столбца определителя. При этом определитель n-ого порядка
представляется в виде суммы n определителей (n−1)-ого порядка. Методом
математической индукции задачу можно свести к вычислению
определителей 2-ого или 3-его порядка, для которых известны формулы:

a11 a12
Случай A  2  2  ; det A   a11  a22  a12  a21.
a21 a22

a11 a12 a13


Случай A  3  3 ; det A  a21 a22 a23  a11  a22  a33  a12  a23  a31 
a31 a32 a33

a13  a21  a32  a11  a23  a32  a12  a21  a33  a13  a22  a31.

Формула разложения по элементам k  той строки


n
det A   akj   1
k j
 Akj ,
j 1

где Akj алгебраическое дополнение элемента аkj , является определителем


 n  1  ого порядка полученным из A вычеркиванием k-той строки и j-того
столбца.

 В качестве самостоятельной работы составьте программу


вычисления определителя 4-того порядка, разложением по элементам
второй строки.

Одним из примеров циклических алгоритмов является формулы


приближенного интегрирования. Формула Ньютона-Лейбница для
определенных интегралов

6
b

 f  x  dx  F  b   F  a 
a
(2.3)

применима в случае когда удается найти первообразную подынтегральной


функции, то есть такую функцию F  x  , для которой справедлива формула
F   x   f  x  . В случаях, когда это не удается, а таких случаев несравнимо
больше, прибегают к приближенным методам интегрирования. При этом
отрезок интегрирования  a; b  разбивают на N равных частей с шагом
h   b  a  / N и применяют одну из приближенных формул интегрирования:

1. Формула прямоугольников
b N

 f  x  dx   f  xi   h; xi  a  i  h (2.4)
a i 1

2. Формула трапеций
b
h  N 1 
a f  x  dx  
2  i 1
2 f  xi   f  x0   f  x N  

(2.5)

3. Формула Симпсона
b
h m m 1

 f  x  dx   f  x0   f  x N   4   f  x2i 1   2   f  x2i   (2.6)
a
3 i 1 i 1 

Примечание: N  2m.

Объем вычислений определяется по числу точек, в которых


необходимо вычислить значения функции. С этой точки зрения эти формулы
одного порядка. Точность формул определяется по порядку погрешности.
Погрешности формул (2.4), (2.5), (2.6) соответственно будут порядка
O  h  , O  h2  и O  h4  . Следовательно, эффективность формулы (2.6)
очевидна. Составить программы для формул (2.4), (2.5) и (2.6).

7
8