АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J...

64
3 Министерство образования Республики Беларусь Учреждение образования «Белорусский государственный педагогический университет имени Максима Танка» А. А. Морозов АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ Учебное пособие Минск 2002 РЕПОЗИТОРИЙ БГПУ

Transcript of АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J...

Page 1: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

3

Министерство образования Республики Беларусь

Учреждение образования

«Белорусский государственный педагогический университет

имени Максима Танка»

А. А. Морозов

АЛГОРИТМЫ

ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ

Учебное пособие

Минск 2002

РЕПОЗИТОРИЙ БГ

ПУ

Page 2: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

4

УДК 518(075.8)

ББК 22.191я73

М801

Печатается по решению редакционно-издательского совета БГПУ

Рецензент : А . К. Синицын, доктор физико-математических наук, профессор

Морозов А. А.

М801 Алгоритмы вычислительной математики: Учеб. пособие.– Мн.: БГПУ, 2002.

– 67 с.

ISBN 985-435-443-I

В пособии рассмотрены методы и алгоритмы вычислительной матаматики,

наиболее часто используемые при первоначальном изучении предмета. Основное вни-

мание уделено алгоритмам.

Пособие предназначено студентам физико-математических специально-

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

также на курсах повышения квалификации и переподготовки учителей инфор-

матики. Часть матариала доступна учащимся средних школ в классах с углуб-

ленным уровнем изучения информатики.

УДК 518(075.8)

ББК 22.19я73

ISBN 985-435-443-I А. А. Морозов, 2002

УИЦ БГПУ, 2002

РЕПОЗИТОРИЙ БГ

ПУ

Page 3: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

5

Предисловие

В учебном пособии изложены простые методы и алгоритмы вычисли-

тельной математики, которые наиболее часто рассматриваются при первона-

чальном изучении предмета. К ним относятся: методы решения нелинейных

уравнений, линейных и нелинейных систем уравнений, интерполирования

функций, численного интегрирования и дифференцирования, минимизации

функций одной переменной, решения задачи Коши для обыкновенных диффе-

ренциальных уравнений. Пособие ориентировано на практическое освоение

численных методов и поэтому основное внимание уделено алгоритмам их реа-

лизации. Для лучшего понимания алгоритмов разобрано большое количество

примеров, результаты которых представлены таблицами и графиками.

Для записи алгоритмов в виде процедур используется формальный язык,

основные конструкции которого имеют тот же смысл, что и в языке програм-

мирования Паскаль. Служебные слова выделены жирным шрифтом. Они обра-

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

указывает на уровень вложенности отдельных конструкций или их частей.

Оператор присваивания обозначается символом и служит для вычисления

выражения. Прописные и строчные буквы в именах переменных различаются.

В одной строке можно расположить несколько операторов, при этом никакие

разделители, кроме пробелов, не используются. Для удобства изложения и со-

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

неформально. Если алгоритм содержит комментарии (для облегчения понима-

ния отдельных шагов), то они помещаются после символов //.

Для представления входных и выходных данных алгоритмов служат па-

раметры процедур. Некоторые параметры могут быть как входными, так и вы-

ходными. Выходные параметры передаются по имени: при вызове процедуры

они заменяются внешними переменными. Входные параметры, если они не ис-

пользуются как выходные, передаются по значению: они рассматриваются как

внутренние (локальные) переменные, которым при вызове процедуры присваи-

ваются некоторые начальные значения.

Пособие предназначено для поддержки курса по численным методам, ко-

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

ситетов. Его можно использовать на курсах повышения квалификации и пере-

подготовки учителей информатики, а также для самостоятельной работы сту-

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

мирования. Часть материала вполне доступна и учащимся средних школ в клас-

сах с углубленным уровнем изучения информатики.

РЕПОЗИТОРИЙ БГ

ПУ

Page 4: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

6

1. Алгоритмы элементарных вычислений

Табулирование функций

Таблицы значений функций широко применяются в практике вычисле-

ний. Построение таблиц обычно называют табулированием.

П о с т а н о в к а з а д а ч и. Пусть необходимо иметь таблицу n значений

функции y = f(x) при изменении аргумента x с постоянным шагом h на некото-

ром отрезке [a, b].

Полагая h = (b–a)/(n–1), получим ряд точек xi = a+ih, i = 0, 1,…, n–1, в ко-

торых надо вычислить значение функции. При этом x0 = a, xn–1 = b.

А л г о р и т м А1.1. (Табулирование функции).

В х о д: f(x), n, a, b, где n – число вычисляемых значений функции

f(x), n > 1, a, b – границы данного отрезка табулирования, a ≠ b.

В ы х о д: h, X[0: n–1], Y[0: n–1]. Здесь h – шаг таблицы, если b > a, то

h > 0, в противном случае h < 0. Массив X хранит значения xi, массив

Y – значения f(xi).

proc Tab(f,n,a,b,h,X,Y)

h (b–a)/(n–1) // шаг изменения аргумента

for i 0 to n–1 do

x a+i*h // очередное значение x

X[i] x Y[i] f(x) // таблица end for

end proc

П р и м е р. Пусть требуется составить таблицу зависимости атмосферно-

го давления P(x), кПа от высоты x, км с расчетом по формуле

P(x) = 101.3(1– 6.5x/288)5.125

для высот от x = 0 до x = 5.

В данном случае n = 6, a = 0, b = 5. В табл. 1.1 показаны результаты, ко-

торые получены после выполнения алгоритма.

Т а б л и ц а 1.1

i 0 1 2 3 4 5

X 0.0 1.0 2.0 3.0 4.0 5.0

Y 101.300 90.116 79.947 70.723 62.376 54.840

З а м е ч а н и е. Если задан шаг h таблицы, то можно определить ее раз-

мер n = trunc((b–a)/h)+1, где trunc(x) – функция, которая дает целую часть ве-

щественного аргумента x.

РЕПОЗИТОРИЙ БГ

ПУ

Page 5: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

7

Полином и его производные

П о с т а н о в к а з а д а ч и. Пусть полином степени n

Pn(x) = a0xn+a1x

n–1+…+ an

задан набором своих коэффициентов ai, i = 0, 1,…, n. Требуется вычислить

Pn(x), а также его первую и вторую производные для данного значения x.

Значение полинома легко получить по способу, называемому схемой Гор-

нера1. Полагаем P0 = a0. Тогда, последовательно вычисляя Pi = Pi–1x+ai для

i = 1, 2, … , n, на последнем шаге получим требуемое значение

Pn(x) = ((…(a0x+an-1)x+…+ an–2)x+an–1)x+an.

Расчетные формулы для производных P1(x) = P′(x), P2(x) = P′′(x) получим, ес-

ли продифференцируем рекуррентные соотношения P0 = a0, Pi = Pi–1x+ai.

А л г о р и т м А1.2. (Полином и его производные).

В х о д: x, n, a[0: n], где n – степень полинома, n ≥ 0. Массив a содержит

коэффициенты Pn(x), a[i] = ai, i = 0, 1, … , n.

В ы х о д: P, P1, P2. Здесь P – значение полинома в точке x, P1, P2 – зна-

чения его первой и второй производных в той же точке.

proc Polynom(n,a,x,P,P1,P2)

P2 P1 0 P a[0]

for i 1 to n do

P2 P2*x+2*P1 // значение второй производной

P1 P1*x+P // значение первой производной

P P*x+a[i] // значение полинома end for

end proc

Сумма сходящегося ряда

Удобный способ вычисления многих функций основан на их разложении

в виде степенного ряда. Если взять сумму нескольких первых членов такого ря-

да, то можно получить приближенное значение функции.

П о с т а н о в к а з а д а ч и. Пусть непрерывная функция f(x) определена с

помощью сходящегося ряда

S = t0(x) + t1(x) + t2(x) + … (1)

1 Уильямс Джордж Горнер (Horner, 1786 – 1837) – английский математик.

РЕПОЗИТОРИЙ БГ

ПУ

Page 6: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

8

Требуется вычислить с погрешностью TOL1 сумму S для данного значе-

ния аргумента x. Предполагается, что зависимость между слагаемыми ряда (1)

задана рекуррентным соотношением

tn = g(tn-1), n = 1, 2, … (2)

Замена суммы бесконечного сходящегося ряда суммой конечного числа

его первых членов приводит к погрешности, которая не превосходит абсолют-

ной величины первого из отброшенных членов. Следовательно, S можно при-

ближенно вычислить с помощью цикла:

n 0 t t0(x) S t // начальные присваивания while abs(t)>TOL do

n n+1 // требуемое число сложений

t g(t)

S S+t // накопление суммы end while

Здесь переменная t используется для хранения значения очередного по-

лученного члена ряда tn(x). Суммирование продолжается до тех пор, пока t по

абсолютной величине больше заданной погрешности TOL.

П р и м е р. Рассмотрим ряд, который определяет функцию синуса:

!7!5!3

)sin(753 xxx

xx

Найдем связь между двумя его последовательными членами в виде зави-

симости (2). Если считать, что t0 = x, то можно записать:

)!12()1(

12

n

xt

nn

n , ,2 ,1 ,)!12(

)1(12

11

nn

xt

nn

n

Из отношения )12(2

2

1

nn

x

t

t

n

n выводим )12(2

2

1

nn

xtt nn .

А л г о р и т м А1.3. (Вычисление синуса).

В х о д: x, TOL, где x – аргумент, TOL – погрешность.

В ы х о д: S – значение синуса от x.

proc Sinus(x,TOL,S)

n 0 t x S t // начальные присваивания

x -x*x/2

while abs(t)>TOL do

n n+1

t t*x/(n*(2*n+1))

1 TOL – от английского tolerance (допустимое отклонение, допуск)

РЕПОЗИТОРИЙ БГ

ПУ

Page 7: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

9

S S+t // накопление суммы end while

end proc

З а м е ч а н и я. Выражение – x2/2 не изменяется при выполнении цикла и

поэтому его можно вычислить один раз (до цикла).

Степенной ряд для sin(x) сходится быстро только при малых x. В общем

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

в пределах 0 ≤ x ≤ π/2.

П р и м е р. В табл. 1.2 с помощью рассмотренного алгоритма получены

значения Sinus(1,TOL) в зависимости от величины погрешности TOL. Для срав-

нения: с точностью до десяти знаков sin(1) = 0.8414709848.

Т а б л и ц а 1.2

TOL 10-1 10

-2 10-3 10

-4

n 2 2 3 4

Sinus(1,TOL) 0.841667 0.841667 0.841468 0.841471

2. Решение нелинейных уравнений

П о с т а н о в к а з а д а ч и. Пусть y = f(x) – функция действительной пе-

ременной. Корнем или решением уравнения

f(x) = 0 (1)

называется значение x*, при котором f(x*) = 0. Задача состоит в приближенном

(с погрешностью TOL) вычислении вещественных корней уравнения (1), распо-

ложенных на некотором заданном отрезке [a, b]. Геометрически корни соответ-

ствуют точкам пересечения (или касания) графика функции y = f(x) с осью Ox.

Например, для функции y = (x – 1)(x – 2)(x2

– 1) = x4

– 3x3

+ x2

+ 3x – 2, график

которой изображен на рис.2.1, уравнение (1) имеет простые корни x1 = -1, x2 = 2

и кратный корень x3 = 1.

Рис. 2.1

x'x*

f(x')

погрешность

Рис. 2.2

РЕПОЗИТОРИЙ БГ

ПУ

Page 8: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

10

Известно много различных методов нахождения вещественных корней.

Обычно задача решается в два этапа. Сначала изучается расположение корней и

проводится их разделение, то есть указываются отрезки, содержащие только

один корень. Затем на каждом таком отрезке выбираются некоторые начальные

приближения, которые используются для уточнения корней.

Если x′ – вычисленное значение корня уравнения (1), то значение f(x′)

называют невязкой. Судить о величине погрешности решения только по значе-

нию невязки нельзя. Если в окрестности корня производная функции f(x) близка

к нулю, то абсолютная величина ошибки '* xx может быть велика при ма-

лой невязке (рис. 2.2).

Отделение корней

В простых случаях хороший результат может дать графический способ

отделения корней.

П р и м е р. Отделим корни уравнения x2 – sin(x) = 1. Для этого запишем

его в виде x2 – 1 = sin(x) и построим графики функций y = x

2 – 1 и y = sin(x).

Геометрически корням исходного урав-

нения соответствуют x-координаты то-

чек пересечения двух графиков

(рис.2.3). Ясно, что корни находятся на

отрезках [-1, 0] и [1, 2].

Для отделения корней также ши-

роко применяется табличный способ,

который основывается на следующей

теореме о существования корня: если

функция f(x) непрерывна на отрезке

[a, b] и принимает на его концах значе-

ния разных знаков, то на этом отрезке

существует, по крайней мере, один корень уравнения (1).

П р и м е р. Чтобы отделить корни уравнения f(x)= x4

– 3x3+ x

2+3x –2 = 0,

составим таблицу значений f(x) (рис. 2.1) на [-1.5, 2.5] с шагом 0.4.

Т а б л и ц а 2.1

x -1.50 -1.10 -0.70 -0.30 0.10 0.50 0.90 1.30 1.70 2.10 2.50

f(x) 10.94 1.37 -2.34 -2.72 -1.69 -0.56 -0.02 -0.14 -0.40 0.38 3.94

Из таблицы видно, что функция меняет знак на концах отрезков

[-1.1, -0.7] и [1.7, 2.1], следовательно, имеет на каждом из них корень

(рис. 2.1). Полученные отрезки можно разделить на более мелкие части, снова

x1 x2

Рис. 2.3РЕПОЗИТОРИЙ БГ

ПУ

Page 9: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

11

уточнить расположение корней и т. д. Кратный корень x = 1 отделить не удает-

ся, т. к. в окрестности такого корня функция f(x) не меняет знак.

Метод деления пополам

Пусть функция f(x) непрерывна на [a, b] и на концах отрезка имеет про-

тивоположные знаки. Для определенности считаем, что f(a) > 0. Для нахожде-

ния корня уравнения f(x) = 0 применяем такую схему:

1. Делим отрезок пополам точкой m = (a+b)/2;

2. Выбираем ту из половин [a, m] или [m, b], на концах которой функция

f(x) имеет разные знаки: если f(m) > 0, то полагаем a = m, в противном случае

берем b = m;

3. Повторяем эти действия, пока длина отрезка [a, b], содержащего ко-

рень, не станет меньше погрешности TOL;

4. За приближенное значение корня принимаем середину получившегося

отрезка [a, b].

А л г о р и т м А2.1. (Метод деления пополам).

В х о д: f(x), a, b, TOL, где a ≤ x ≤ b, f(a) > 0.

В ы х о д: root, iter. Здесь root – приближенное значение корня, iter – фак-

тическое количество итераций.

proc Bisection(f,a,b,TOL,root,iter)

iter 0

while abs(b-a)>TOL do

iter iter+1

m (a+b)/2 // середина отрезка [a, b] if f(m)>0 then

a m // выбираем левую половину отрезка else

b m // выбираем правую половину отрезка end if

end while

root (a+b)/2 // значение корня end proc

З а м е ч а н и я. Алгоритм применим, если функция f(x) положительна на

левом конце исходного отрезка [a, b]. В противном случае необходимо обме-

нять значения a и b.

Метод сходится при любой ширине отрезка [a, b]. На каждом шаге алго-

ритма вычисляется только одно значение функции. Однако количество итера-

ций значительно, и сходимость медленная.

РЕПОЗИТОРИЙ БГ

ПУ

Page 10: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

12

П р и м е р. Применим алгоритм к уравнению f(x)= x2– sin(x)–1 = 0 на от-

резке [1, 2]. Так как f(1) < 0, то полагаем a = 2 и b = 1. Результаты расчета для

TOL = 10-4 даны в табл. 2.2. После 14 итераций получим для корня прибли-

женное значение 1.4096, при этом невязка равна 0.0000.

Т а б л и ц а 2.2

iter a b m f(m) iter a b m f(m)

1 2.0000 1.0000 1.5000 0.2525 8 1.4141 1.4063 1.4102 0.0014

2 1.5000 1.0000 1.2500 -0.3865 9 1.4102 1.4063 1.4082 -0.0038

3 1.5000 1.2500 1.3750 -0.0903 10 1.4102 1.4082 1.4092 -0.0012

4 1.5000 1.3750 1.4375 0.0753 11 1.4102 1.4092 1.4097 0.0001

5 1.4375 1.3750 1.4063 -0.0090 12 1.4097 1.4092 1.4094 -0.0005

6 1.4375 1.4063 1.4219 0.0328 13 1.4097 1.4094 1.4095 -0.0002

7 1.4219 1.4063 1.4141 0.0118 14 1.4097 1.4095 1.4096 -0.0000

Метод простых итераций

Метод простых итераций1 называют также методом последовательных

приближений. Предположим, что уравнение (1) можно записать в виде

x = g(x) (2)

Возьмем произвольное (по возможности близкое к какому-нибудь из ис-

комых корней) начальное приближение x0 и вычислим значение x1 = g(x0). За-

тем вычислим x2 = g(x1) и т. д. При определенных ограничениях на функцию

g(x) последовательность x0, x1, x2, … сходится к корню уравнения (2).

На рис. 2.4 и 2.5 видно, как значения xn+1 = g(xn), n = 0, 1, … могут приближать-

ся к корню x*. На рис. 2.6 показан вариант, когда метод не сходится.

x0 x1 x2 x*

y = g(x)

y = x

Рис. 2.4

x0 x1x2 x*

y = g(x)

y = x

Рис. 2.5 1 Итерация (от латинского iteratio – повторение) – результат неоднократного вычисле-

ния по каким-либо формулам.

РЕПОЗИТОРИЙ БГ

ПУ

Page 11: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

13

Сходимость метода простых итераций основывается на следующей теореме о

существования корня. Если функция g(x) определена и дифференцируема на

отрезке [a, b] и |g´(x)| ≤ q < 1 при всех a < x < b, то последовательность xn, n

= 0, 1, … сходится к корню x* уравнения (2) независимо от начального значе-

ния a ≤ x0 ≤ b. Причем справедлива такая оценка погрешности решения:

*

11

n n n

qx x x x

q

.

Метод удобен для программирования. Очередное приближение находят

по итерационной формуле xn+1 = g(xn). Вы-

числения завершают, если для двух последо-

вательных приближений xn и xn+1 выполнено

условие

TOLxxq

qnn

11

. (3)

Чем ближе к нулю максимальное зна-

чение производной q, тем выше скорость

сходимости. Если известно, что 2

1q , то

применяют условие |xn – xn+1| ≤ TOL. Это

упрощенное условие часто используют на практике, чтобы не вычислять мак-

симальное значение производной.

Если при поиске решения количество итераций превысит некоторое за-

данное значение (например, равное 30), то счет можно прекратить. Это значит,

что метод не сходится или сходится слишком медленно.

А л г о р и т м А2.2. (Метод простых итераций).

В х о д: g(x), TOL, x0, iter, где x0 – начальное приближение для корня,

iter – предельное количество итераций.

В ы х о д: flag, root, iter. Здесь flag – логическая переменная. Если реше-

ние найдено, то flag = TRUE, в противном случае flag = FALSE. Переменная

root содержит вычисленное значение корня, iter – число итераций.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: x1, LIM. Переменная LIM 1

хранит предельное, допустимое при поиске решения, количество итераций. На

каждой итерации x0 содержит текущее, а x1 – последующее приближение к

корню.

1 LIM – от латинского limitis (предельное количество)

x0 x1x*

y = g(x)y = x

Рис. 2.6

РЕПОЗИТОРИЙ БГ

ПУ

Page 12: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

14

proc Iteratio(g,x0,TOL, iter,iter,root,flag)

LIM iter

iter 0

x1 g(x0)

while (abs(x1-x0)>TOL) and (iter≤LIM) do

iter iter+1 // фактическое число итераций

x0 x1

x1 g(x0) // очередное приближение end while

flag iter≤LIM

root x1 // последнее приближение end proc

З а м е ч а н и я. Для метода итераций большое значение имеет выбор

функции g(x). Например, уравнение x3 + x = 1000 можно записать в виде

x = 1000 - x3, или

xxx 11000

2 , или 3 1000 xx . Нужно построить функцию

так, чтобы выполнялось условие сходимости 1)( qxg , желательно с

наименьшим значением q.

Если на отрезке [a, b] имеется несколько корней, то метод итераций схо-

дится к одному из них, но заранее не известно, к какому именно.

Если найден корень x*, то можно рассмотреть функцию *

)()(

xx

xfxt

и

для нее повторить процедуру поиска другого решения.

П р и м е р. Рассмотрим уравнение x = sin(x) + 0.25. Графическим спосо-

бом проверим, что корень находится на отрезке [1.1, 1.3]. Так как |g´(x)| =

cos(x), то |g´(x)| ≤ cos(1.1) = 0.454 = q < ½. Условие сходимости можно запи-

сать в форме |xn – xn+1| ≤ TOL. Положим TOL = 10-4 и выберем x0 = 1.2 (сред-

няя точка отрезка). Результаты выполнения алгоритма после их округления до

четырех значащих цифр даны в табл. 2.3. Корень приближенно равен 1.1713.

Т а б л и ц а 2.3

iter 0 1 2 3 4 5 6

x0 1.2000 1.1820 1.1754 1.1728 1.1719 1.1715 1.1713

x1 1.1820 1.1754 1.1728 1.1719 1.1715 1.1713 1.1713

РЕПОЗИТОРИЙ БГ

ПУ

Page 13: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

15

Метод Ньютона

Метод Ньютона1 (или метод касательных) является одним из лучших

общих способов решения уравнения f(x) = 0. Пусть на [a, b] функция f(x) имеет

корень x*. Предположим, что f(x) всюду на этом отрезке имеет производную f

′(x), отличную от нуля. Последнее условие означает, что функция либо строго

возрастает, либо строго убывает на [a, b]. Метод имеет очень простой геомет-

рический смысл. Если xn – некоторое приближение к решению x*, то за новое

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

(xn, f(xn)) к графику функции f(x), с осью Ox (рис. 2.7).

Алгоритм поиска корня задает итера-

ционная формула

,1 ,0 ,)(

)(1

n

xf

xfxx

n

nnn

Если начальное приближение x0 вы-

брано неудачно, то метод может сходиться

медленно, либо не сходиться вообще. Если

для x0 взят один из концов отрезка [a, b],

для которого f(x0)f´´(x0)>0, то последова-

тельные приближения очень быстро сходят-

ся к решению.

Алгоритм метода Ньютона ничем не отличается от алгоритма решения

уравнения x = g(x) методом итераций, где ( )

( )( )

f xg x x

f x

.

П р и м е р. Решить уравнение f(x) = x-sin(x)-0.25 = 0 на отрезке

[1.1, 1.3]. В данном случае a = 1.1, b = 1.3, f ´(x) = 1- cos(x), так что sin( ) 0.25

( )1 cos( )

x xg x x

x

.

Для x0 надо выбрать значение b = 1.3, поскольку f ´´(1.3) = sin(1.3) > 0

и f(1.3) > 0. При погрешности TOL = 10-6 Алгоритм 2.3 дает решение 1.171230

всего за три итерации (табл. 2.4).

Т а б л и ц а 2.4

iter 0 1 2 3

x0 1.300000 1.181991 1.171316 1.171230

x1 1.181991 1.171316 1.171230 1.171230

1 Исаак Ньютон (Newton, 1643 – 1727) – английский физик и математик, один из со-

здателей дифференциального и интегрального исчисления.

x0x1x2x*

(x0,f(x0))

ba

Рис. 2.7

РЕПОЗИТОРИЙ БГ

ПУ

Page 14: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

16

З а м е ч а н и е. Недостатком метода Ньютона является необходимость

вычисления производной, что может оказаться трудным или невозможным. Ес-

ли значение f´(x) близко к нулю, то новое приближение xn+1 может быть худ-

шим приближением, чем xn.

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

модифицированный метод Ньютона. Он определяется итерационной формулой

)(

)(

01

xf

xfxx nnn

, скорость сходимости которой ниже (по сравнению с первой

формулой).

Метод секущих

Метод секущих не требует вычисле-

ния производных, но по сравнению с мето-

дом Ньютона приводит к некоторому замед-

лению сходимости.

Пусть выбраны два начальных при-

ближения x0 и x1. За новое приближение x2

принимают точку пересечения секущей,

проведенной через точки (x0, f(x0)) и (x1,

f(x1)) графика функции f(x), с осью Ox. Затем

проводят секущую через точки (x1, f(x1)) и

(x2, f(x2)) и т. д. (рис. 2.8).

Последовательные приближения можно найти по формуле

,...2 ,1 ,0 ,)()(

)(1

11

n

xfxf

xxxfxx

nn

nnnnn

При выборе x0, x1 в пределах отрезка [a, b], содержащего корень, метод

секущих гарантированно сходится. Часто удобно взять x0 = a, x1 = b, хотя это и

не обязательно. Вычисления можно прекратить, как только расстояние между xn

и xn+1 станет меньше погрешности TOL.

А л г о р и т м А2.3. (Метод секущих).

В х о д: f(x), x0, x1, TOL, где x0, x1 – начальные приближения.

В ы х о д: root, iter. Здесь root – значение корня. Переменная iter содер-

жит фактическое количество итераций.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: x, fx0 = f(x0), fx1 = f(x1).

x0x1x3 x2x*

(x0,f(x0))

(x1,f(x1))

Рис. 2.8

РЕПОЗИТОРИЙ БГ

ПУ

Page 15: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

17

proc Secant(f,x0,x1,TOL,iter,root)

iter 0

fx0 f(x0)

while abs(x1-x0)>TOL do

iter iter+1 // число итераций

fx1 f(x1)

x x1-fx1*(x1-x0)/(fx1-fx0) // новое приближение

x0 x1 x1 x

fx0 fx1 end while

root x // последнее приближение end proc

П р и м е р. Применим метод секущих к уравнению x2-2 = 0 для вычисле-

ния с погрешностью TOL= 10-5 значения 221 . Возьмем x0 = 1 и x1 = 2

(решение заключено между этими двумя значениями, но к этому стремиться не

обязательно). Результаты выполнения алгоритма даны в табл. 2.5, корень из

двух приближенно равен 1.41421.

Т а б л и ц а 2.5

iter 0 1 2 3 4 5

x0 1.00000 2.00000 1.33333 1.40000 1.41463 1.41421

x1 2.00000 1.33333 1.40000 1.41463 1.41421 1.41421

f(x1) 2.00000 –0.22222 –0.04000 0.00119 –0.00001 –0.00000

Метод хорд

Метод хорд, как и метод касательных, имеет наглядный геометрический

смысл. Будем предполагать, что функция f(x) на отрезке [a, b], на котором

находится корень x*, выпукла вверх или

вниз. Если выбрано начальное приближение

x0, то новое приближение x1 находят как

точку пересечения хорды, проведенной че-

рез точки (a, f(a)) и (b, f(bf)) графика функ-

ции f(x), с осью Ox. Точку x1 принимают за

новую границу отрезка, где содержится ко-

рень

и т. д. Вычисления можно прекратить, как

только расстояние между левым и правым

концами этого отрезка станет меньше заданной погрешности TOL. На рис. 2.9

x0 x1 x2x*

(b,f(b))

ba

(a,f(a))

Рис. 2.9

РЕПОЗИТОРИЙ БГ

ПУ

Page 16: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

18

показан вариант этого метода с подвижным левым концом хорды.

Если подвижен левый конец хорды, то алгоритм определяет формула

, ,)()(

)( 01 axbfxf

bxxfxx

n

nnnn

если подвижен правый конец, то формула

bxafxf

axxfxx

n

nnnn

01 ,

)()()( .

Первую формулу применяют, если f(b)f´´(b) > 0, вторую – если f(a)f´´(a) > 0.

А л г о р и т м А2.4. (Метод хорд c подвижным правым концом).

В х о д: f(x), a, b, TOL, iter – число итераций.

В ы х о д: root – значение корня, iter – фактическое число итераций.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: x1, fa = f(a), fb = f(b).

proc Chord(input(f,a,b,TOL)output(iter,root))

iter 0

fa f(a) fb f(b)

x1 b-fb*(b-a)/(fb-fa) // первое приближение while abs(x1-b)>TOL do

iter iter+1 // количество итераций

b x1 fb f(b)

x1 b-fb*(b-a)/(fb-fa) // новое приближение end while

root x1 // последнее приближение end if

end proc

З а м е ч а н и е. Здесь, как и в схеме метода итераций, значение счетчика

iter можно использовать для контроля сходимости.

П р и м е р. Вычислить на [-1, 0] с погрешностью TOL = 10-4 корень

уравнения x3-0.2x

2+ 0.5x+1.5 = 0. Сначала находим f ´´(x) = 6 x-0.4. На данном

отрезке выполняется неравенство f ´´(x) < 0. Так как f(-1) =- 0.2 < 0, то берем

вторую итерационную формулу. Численный результат работы алгоритма со-

держится в табл. 2.6. Корень приблизительно равен - 0.9464.

Т а б л и ц а 2.6

iter 0 1 2 3 4

b 0.0000 -0.8824 -0.9435 -0.9463 -0.9464

x1 -0.8824 -0.9435 -0.9463 -0.9464 -0.9464

f(x1) 0.2162 0.0105 0.0005 0.0000 0.0000

РЕПОЗИТОРИЙ БГ

ПУ

Page 17: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

19

3. Решение систем линейных уравнений

Решение систем линейных уравнений – одна из наиболее важных задач,

встречающихся в практике научных вычислений.

П о с т а н о в к а з а д а ч и. Имеется система n линейных уравнений с

вещественными коэффициентами и n неизвестными:

11 1 12 2 1 1

21 1 22 2 2 2

1 1 2 2 .

n n

n n

n n nn n n

a x a x a x b

a x a x a x b

a x a x a x b

(1)

Числа x1, x2, … , xn, которые обращают эти равенства в тождества назы-

ваются корнями или решением данной системы. Требуется найти корни или

установить, что их нет.

Систему (1) кратко можно записать в виде матричного уравнения

AX = B, (2)

где A обозначает квадратную матрицу коэффициентов, B – вектор правых ча-

стей, X – вектор неизвестных. Если определитель матрицы A не равен нулю

(матрица неособенная), то решение системы (2) существует и единственно.

Пусть X* – вычисленное решение системы AX = B. Вектор AX*–B, назы-

ваемый невязкой, показывает, насколько отличается левая часть системы от

правой, если подставить в нее найденные значения корней. Если значение

определителя матрицы A не слишком близко к нулю, то и невязка, и погреш-

ность полученного решения будут достаточно малы. В противном случае по

значению невязки нельзя судить о величине погрешности.

Различают прямые и итерационные методы решения систем линейных

уравнений. Первые дают точные корни (если не учитывать ошибки округления

результатов арифметических операций), вторые позволяют получить их при-

ближенные значения с некоторой заданной точностью. Прямые методы преоб-

разуют матрицу коэффициентов A к другому виду, итерационные методы ее не

изменяют.

РЕПОЗИТОРИЙ БГ

ПУ

Page 18: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

20

Метод Гаусса

Метод Гаусса1, или метод исключения неизвестных, является одним из

самых распространенных способов решения линейных систем уравнений. Он

относится к группе точных методов. Вычисления состоят из двух этапов, кото-

рые носят названия прямого и обратного хода. На первом матрица A системы

приводится к треугольному виду, где aij = 0 для всех i > j. На втором решается

эквивалентная система с верхней треугольной матрицей.

П р я м о й х о д состоит из однотипных действий: исключить x1 из всех

уравнений, начиная со второго; исключить x2 из всех уравнений, начиная с тре-

тьего и т. д. В общем случае, чтобы исключить xk, коэффициенты уравнения i,

где i = k+1, k+2, … , n, пересчитываются по формулам

0 , , ,,2,1 , ikkkk

ikiikj

kk

ikijij ab

a

abbnkkja

a

aaa .

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

k, k+1, … , n такое уравнение p, в котором находится наибольший по модулю

коэффициент при xk. При этом если окажется, что все такие коэффициенты рав-

ны нулю, то система вырождена и либо вовсе не имеет решения, либо имеет

бесконечное количество решений. Если ненулевой коэффициент apk выбран, то

переставляют уравнения k и p. Это правило, которое позволяет избежать деле-

ния на нуль (или на очень близкое к нему число), называют методом главного

коэффициента.

О б р а т н ы й х о д последовательно находит корни по формулам:

1 ,,2,1 ,/)( ,/ 1

nniaxabxabx ii

n

ijjijiinnnn .

А л г о р и т м А3.1. (Метод Гаусса для систем линейных уравнений).

В х о д: n, A[1: n, 1: n], B[1: n], где n – количество уравнений исходной

системы. Массив A содержит коэффициенты при неизвестных, массив B – пра-

вые части системы.

В ы х о д: flag, A[1: n, 1: n], B[1: n]. Здесь flag – логическая переменная.

Если единственное решение найдено, то flag = TRUE, в противном случае

flag = FALSE. Массив A содержит коэффициенты системы с треугольной мат-

рицей, массив B – значения неизвестных (решение).

1 Карл Фридрих Гаусс (Gauss, 1777 – 1855) – немецкий математик, работы которого

оказали большое влияние на развитие алгебры, геометрии, теории чисел.

РЕПОЗИТОРИЙ БГ

ПУ

Page 19: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

21

Общая схема алгоритма такова:

proc Gauss(n,A,B,flag,A,B)

flag TRUE // пусть решение существует

// прямой ход:

for k1 to n-1 do // основной цикл

Найти среди уравнений k, k+1,…, n уравнение p,

в котором находится главный коэффициент a[p, k] if A[p,k]=0 then

flag FALSE // система вырождена

exit // закончить работу алгоритма end if

if k<p then

Переставить уравнение k и уравнение p end if

Исключить xk из уравнений k+1, … , n end for

// обратный ход: if A[n,n]=0 then

flag FALSE // система вырождена

exit // закончить работу алгоритма end if

Найти значения неизвестных xn, xn–1 ,…, x1

end proc

Поиск главного коэффициента apk:

t abs(a[k,k]) p k

for m k+1 to n do

if abs(A[m,k])>t then p m end if

end for

Перестановка уравнений k и p, где k < p:

for mk to n do

t A[k,m] A[k,m] A[p,m] A[p,m] t

end for

t B[k] B[k] B[p] B[p] t

Исключение неизвестного xk из уравнений k+1, … , n:

for ik+1 to n do

t A[i,k]/A[k,k] A[i,k] 0

for jk+1 to n do A[i,j]A[i,j]-t*A[k,j] end for

B[i] B[i]-t*B[k]

end for

РЕПОЗИТОРИЙ БГ

ПУ

Page 20: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

22

Обратный ход последовательно находит значения неизвестных

xn, xn–1 ,…, x1, которые записываются на место bn, bn–1 ,…, b1.

B[n] B[n]/A[n,n]

for in-1 downto 1 do

t 0

for jn downto i+1 do t t+A[i,j]*B[j] end for

B[i] (B[i]-t)/A[i,i]

end for

Объединяя все фрагменты вместе, получим полную запись алгоритма ре-

шения системы линейных уравнений по методу Гаусса с выбором главного ко-

эффициента. Вычислительная сложность решения системы n уравнений – коли-

чество выполняемых арифметических операций – пропорциональна n3.

П р и м е р. Для системы трех уравнений

6

4

7

515

62 3

0710

3

2

1

x

x

x

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

решений

1

1

129103830457.2

,

2.60.0 0.0

0.55.2 0.0

0.00.70.10 E

BA

Точное решение (для сравнения): x1 = 0, x2 = -1, x3 = 1.

Метод квадратных корней

Метод квадратных корней пригоден для решения линейных систем

AX = B, где A – симметрическая положительно определенная матрица. Системы

уравнений такого типа встречаются во многих приложениях.

Симметрическую матрицу можно представить в виде произведения

A = T ′ T двух транспонированных между собой матриц, где

11 12 1 11

22 2 12 22

1 2 .

0 0

0 0,

0 0

n

n

nn n n nn

t t t t

t t t tT T

t t t t

РЕПОЗИТОРИЙ БГ

ПУ

Page 21: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

23

После того, как такое разложение выполнено, решение системы

T ′T X = B получается последовательным решением двух систем TX = Y и

T ′ Y = B с верхней и нижней треугольными матрицами.

Элементы матрицы T вычисляют по формулам

njt

atat

jj ,,3,2 , ,

11

111111 .

Для i = 2, 3, … ,n

nijt

tta

tijttatii

i

kkjkiij

ijij

i

kkiiiii ,,1 , ,1,,2,1 ,0 ,

1

11

1

2

.

Затем последовательно находят 1

111 i

11

1

, , 2,3, , ,

, , 1, ,1.

i

i ki k

k

ii

n

i ik k

n k in i

nn ii

b t yb

y y i nt t

y t xy

x x i nt t

Вычислительные затраты метода квадратных корней примерно в два раза

меньше, чем в стандартном методе Гаусса.

А л г о р и т м А3.2. (Метод квадратных корней).

В х о д: n, A[1: n, 1: n], B[1: n]. Здесь n – количество уравнений исходной

системы. Массив A содержит коэффициенты при неизвестных, массив B – пра-

вые части.

В ы х о д: A[1: n, 1: n], B[1: n]. Массив A хранит элементы треугольной

матрицы T, массив B – значения неизвестных (решение).

Решение системы по методу квадратных корней состоит из двух последо-

вательных шагов:

proc SqrtMetod(n,A,B)

Прямой ход

Обратный ход end proc

Прямой ход формирует матрицу T, tij записываются на место aij.

A[1,1]sqrt(A[1,1])

for j2 to n do A[1,j] A[1,j]/A[1,1] end for

for i2 to n do

s 0

РЕПОЗИТОРИЙ БГ

ПУ

Page 22: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

24

for k1 to i-1 do s s+A[k,i]*A[k,i]end for

A[i,i] sqrt(A[i,i]-s)

for j1 to i-1 do A[i,j] 0 end for

for ji+1 to n do

s 0

for k1 to i-1 do s s+A[k,i]*A[k,j] end for

A[i,j] (A[i,j]-s)/A[i,i]

end for

end for

Обратный ход сначала находит неизвестные y1, y2 ,…, yn, которые запи-

сываются на место b1, b2 ,…, bn, а затем xn, xn–1 ,…, x1, которые записываются

на место bn, bn–1 ,…, b1.

B[1] B[1]/A[1,1]

for i2 to n do

s 0

for k1 to i-1 do s s+A[k,i]*B[k] end for

B[i] (B[i]-s)/A[i,i]

end for

B[n] B[n]/A[n,n]

for in-1 downto 1 do

s 0

for ki+1 to n do s s+A[i,k]*B[k] end for

B[i] (B[i]-s)/A[i,i]

end for

П р и м е р. Для системы с симметрической матрицей

24.0

68.8

5.7

6.312.25.0

12.251

5.0125.6

3

2

1

x

x

x

после выполнения алгоритма получим

0.1

0.2

8.0

,

6.10.00.0

0.12.20.0

2.04.05.2

BT .

Метод прогонки

Метод прогонки является частным случаем метода исключения Гаусса.

Он применяется для решения систем линейных уравнений MX = W, где M –

трехдиагональная матрица. Матрица называется трехдиагональной, если она

РЕПОЗИТОРИЙ БГ

ПУ

Page 23: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

25

имеет отличные от нуля элементы только на главной и двух примыкающих к

ней диагоналях:

1 1

2 2 2

3 3

1 1 1

.

0 0 0 0

0 0 0

0 0 0 0

0 0 0

0 0 0 0

n n n

n n

q r

p q r

p qM

p q r

p q

Системы такого типа возникают при решении задач математической фи-

зики и интерполировании сплайнами. В общей форме трехдиагональные систе-

мы записываются в виде равенств

pi xi–1 + qi xi + ri xi+1 = wi, i = 1, 2,…, n, p1 = 0, rn = 0.

Расчетные формулы прямого хода метода Гаусса в этом случае значи-

тельно упрощаются, в результате система преобразуется к виду

xi = ui xi+1 + vi, где

u0 = 0, v0 = 0, .,,2 ,1 , ,1

1

1

niupq

vpwv

upq

ru

iii

iiii

iii

ii

При i = 1 1

11

q

ru

,

1

11q

wv , при i = n un = 0,

1

1

nnn

nnnn

upq

vpwv .

Обратный ход позволяет получить решение по формулам

xn = vn, xi = ui xi+1 + vi, i = n–1, n–2, … ,1.

Если выполняются неравенства iii rpq , ii pq , i = 1, 2,…, n, то

решение системы существует и единственно.

А л г о р и т м А3.3. (Метод прогонки).

В х о д: n, P[1: n], Q[1: n], R[1: n], W[1: n]. Здесь n – количество уравне-

ний исходной системы. Одномерные массивы P, Q, R хранят коэффициенты pi,

qi, ri при неизвестных, массив W – правые части системы.

В ы х о д: X[1: n]. Массив X содержит найденные решения.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: t, U[0: n], V[0: n]. Массивы

U, V служат для хранения величин ui, vi, i = 0, 1, … ,n.

proc A33(n,P,Q,R,W,X)

// Прямой ход:

U[0] V[0] 0

for i1 to n do

t Q[i]+P[i]*U[i-1]

РЕПОЗИТОРИЙ БГ

ПУ

Page 24: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

26

U[i] -R[i]/t

V[i] (W[i]-P[i]*V[i-1])/t

end for

// Обратный ход:

X[n] V[n]

for in-1 downto 1 do

X[i] U[i]*X[i-1]+V[i]

end for

end proc

П р и м е р. Решить по методу прогонки трехдиагональную систему

1 2

1 2 3

2 3 4

3 4

5 2

2x 4 6 3.3

2 3.6 0.8 2.6

4.4 7.2.

x x

. x x

x x x

x x

В данном случае P = (0, 2, 2, 1), Q = (5, 4.6, 3.6, 4.4), R = (–1, –1, –0.8, 0),

S = (2, 3.3, 2.6, 7.2). После выполнения алгоритма получим x1 = 0.5278,

x2 = 0.6391, x3 = 0.6957, x4 = 1.4783.

Метод простых итераций

Метод простых итераций можно применить к решению линейной си-

стемы AX = B, если предварительно преобразовать ее к специальному виду.

Пусть диагональные элементы aii матрицы A не равны нулю. Разрешим первое

уравнение относительно x1, второе – относительно x2 и т. д. В результате полу-

чим эквивалентную систему

1 1 12 2 1 1

2 21 1 2 2 2

1 1 2 2

0

0

0 ,

n n

n n

n n n n n

x x d x d x c

x d x x d x c

x d x d x x c

(3)

где dij = – aij/aii при i ≠ j, dii = 0, ci = bi/aii, i, j = 1,2, … , n.

Систему (3) можно записать в матричной форме

X = DX + C, (4)

где D – матрица с нулевыми диагональными элементами. Возьмем произволь-

ные начальные приближения неизвестных ),,,( )0()0(2

)0(1

)0(nxxxX и подставим

в правые части системы. Из каждого уравнения найдем их новые значения

РЕПОЗИТОРИЙ БГ

ПУ

Page 25: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

27

CDXX )0()1( , которые затем опять подставим в уравнения и найдем

CDXX )1()2( и т. д. Если справедливо одно из условий

nidn

jij ,,2,1 ,1

1

или 1

1, 1,2, ,n

ij

i

d j n

(то есть элементы матрицы D достаточно малы по абсолютной величине), то

последовательность ,,, )2()1()0( XXX сходится к решению системы (3). Ины-

ми словами, если диагональные элементы матрицы A системы AX = B доста-

точно велики по абсолютной величине по сравнению с абсолютными значени-

ями всех остальных элементов этой матрицы, то систему можно решить по ме-

тоду итераций. Очередные приближения вычисляют по формулам

)(1

1

)()()1(i

n

j

kjij

ii

ki

ki bxa

axx

. (5)

Для начальных приближений X(0)

можно взять вектор B правых частей си-

стемы. Если получится, что для двух последовательных итераций k и k+1

TOLbxaa

xx i

n

j

kjij

ii

ki

ki

)(

1

1

)()()1(, то счет можно остановить.

Метод итераций обычно применяют для решения систем большого раз-

мера, в которых велика доля нулевых коэффициентов при неизвестных.

А л г о р и т м А3.4. (Метод итераций для линейных систем).

В х о д: n, A[1: n, 1: n], B[1: n], TOL, где n – количество уравнений исход-

ной системы. Массив A хранит коэффициенты при неизвестных, массив

B – правые части системы.

В ы х о д: iter, X[1: n]. Переменная iter хранит фактическое количество

итераций. Массив X содержит приближения корней на шаге iter.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: m, s, Y[1: n]. Здесь m – ко-

личество неизвестных, для которых на шаге iter выполнены условия сходимо-

сти. Массив Y содержит очередные приближения корней. Переменная s исполь-

зуется для хранения значения выражения nibxaa

i

n

jjij

ii

,,2,1 ),(1

1

.

proc Iteratio(n,A,B,TOL,X,iter)

X B // начальные приближения

iter 0

repeat

iter iter+1

m 0

for i1 to n do

РЕПОЗИТОРИЙ БГ

ПУ

Page 26: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

28

s 0

for j1 to n do s s+A[i,j]*X[j] end for

s (s-B[i])/A[i,i]

Y[i] X[i]–s // очередное приближение для xi

if abs(s)<TOL then

m m+1 // выполнено условие сходимости для xi end if

end for

X Y // приближения на шаге iter until m = n

end proc

З а м е ч а н и я. Внешний цикл алгоритма повторяется до тех пор, пока не

получится, что условия сходимости выполнены для всех n неизвестных. Для

дополнительного контроля сходимости по числу итераций можно использовать

значение счетчика iter.

П р и м е р. Рассмотрим систему трех уравнений, в которой диагональные

коэффициенты значительно преобладают над остальными коэффициентами при

неизвестных: 1

2

3 .

4 0.24 0.08 8

0.09 3 0.15 9

0.04 0.08 4 20

x

x

x

Если TOL = 10-4, то после пяти итераций алгоритма получим

x1 = 1.90920, x2 = 3.19497, x3 = 5.04481. Для сравнения: алгоритм метода

Гаусса дает x1 = 1.90920, x2 = 3.19496, x3 = 5.04481.

Метод Зейделя

Метод Зейделя1 можно рассматривать как модификацию метода простых

итераций. Он заключается в том, что при вычислении по формулам (5) очеред-

ного (k+1)-го приближения xi, i > 1 берут не k-е приближения неизвестных x1,

x2,…, xi–1, а уже полученные их (k+1)-е приближения. То есть при вычислении )1(

2k

x используется найденное ранее значение )1(

1k

x , при вычислении )1(

3k

x –

значения )1(

1k

x , )1(

2k

x и т. д. Для метода Зейделя остаются верными условия

сходимости метода итераций.

Алгоритм метода Зейделя легко получить из алгоритма А3.4 простой за-

меной переменной Y, которая содержит последовательно вычисляемые при-

ближения неизвестных, на X.

1 Людвиг Зейдель (Seidel, 1821 – 1896) – немецкий астроном и математик.

РЕПОЗИТОРИЙ БГ

ПУ

Page 27: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

29

А л г о р и т м А3.5. (Метод Зейделя для линейных систем).

В х о д: n, A[1: n, 1: n], B[1: n], TOL, iter, где n – количество уравнений

исходной системы. Массив A хранит коэффициенты при неизвестных, массив B

– правые части системы, переменная iter содержит предельное количество ите-

раций.

В ы х о д: flag, iter, X[1: n]. Здесь flag – логическая переменная: если ре-

шение найдено и количество итераций не превышает некоторое заданное зна-

чение, то flag = TRUE, в противном случае flag = FALSE. Переменная iter со-

держит фактическое количество итераций, массив X – приближенные значения

неизвестных на шаге iter.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: m, s, LIM. Константа LIM

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

m – количество неизвестных, для которых на шаге iter выполнены условия схо-

димости. Переменная s хранит значение выражения

nibxaa

i

n

jjij

ii

,,2,1 ),(1

1

.

proc Zeid(n,A,B,TOL,iter,X,iter,flag)

LIM iter // предельное количество итераций

X B // начальные приближения

iter 0

repeat

iter iter+1

m 0

for i1 to n do

s 0

for j1 to n do s s+A[i,j]*X[j] end for

s (s-B[i])/A[i,i]

X[i] X[i]–s // очередное приближение на шаге iter if abs(s)<TOL then

m m+1 // выполнено условие сходимости для xi end if

end for

until (m=n) or (iter>LIM)

flag iter≤LIM

end proc

З а м е ч а н и е. Метод Зейделя и метод простых итераций могут иметь

разные области сходимости. Первый, как правило, быстрее сходится, хотя это

бывает не всегда.

РЕПОЗИТОРИЙ БГ

ПУ

Page 28: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

30

П р и м е р. Применим оба алгоритма к системе трех уравнений

1

2

3 .

6 1 1 11.33

1 6 1 32

1 1 6 42

x

x

x

Для TOL = 10-5 первый алгоритм за 9 итераций дает решение

x1 = 4.66607, x2 = 7.61893, x3 = 9.04750, второй за 14 итераций – решение

x1 = 4.66607, x2 = 7.61893, x3 = 9.04750. По алгоритму метода Гаусса (для

сравнения) получим x1 = 4.66607, x2 = 7.61893, x3 = 9.04750.

4. Решение систем нелинейных уравнений

Метод итераций и метод Зейделя, используемые при решении линейных

систем, можно применить к системам нелинейных уравнений.

Метод простых итераций

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

1 1 1 2

2 2 1 2

1 2

( , , , )

( , , , )

( , , , ).

n

n

n n n

x f x x x

x f x x x

x f x x x

(1)

Возьмем некоторые начальные приближения неизвестных

),,,( )0()0(2

)0(1

)0(nxxxX и подставим в правые части системы (1). Из каждого

уравнения найдем их новые значения ),,,( )1()1(2

)1(1

)1(nxxxX , которые затем

опять подставим в уравнения и найдем ),,,( )2()2(2

)2(1

)2(nxxxX и т. д. Если

справедливо одно из условий

nix

fn

j j

i ,,2,1 ,11

или njx

fn

i j

i ,,2,1 ,11

,

то последовательность )2()1()0( ,, XXX сходится к решению системы (1).

Очередные приближения вычисляют по итерационным формулам

nixxxfx kn

kki

ki ,,2,1 ),,,,( )()(

2)(

1)1(

. (2)

Начальные приближения выбирают из области сходимости метода. Если

получится, что для двух последовательных итераций TOLxxki

ki

)()1(

, то

счет можно остановить.

РЕПОЗИТОРИЙ БГ

ПУ

Page 29: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

31

А л г о р и т м А4.1. (Метод итераций для нелинейных систем).

В х о д: n, X[1: n], TOL, iter, где n – количество уравнений исходной си-

стемы, iter – предельное количество итераций. Массив X содержит начальные

приближения.

В ы х о д: flag, iter, X[1: n]. Здесь flag – логическая переменная. Если ре-

шение найдено и количество итераций не превышает некоторого заданного

значения, то flag = TRUE, в противном случае flag = FALSE. Переменная iter

содержит фактическое количество итераций, массив X – приближенные значе-

ния неизвестных (решение).

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: m, Y[1: n], LIM. Здесь m –

количество неизвестных, для которых выполнены условия сходимости. Кон-

станта LIM хранит предельное допустимое при поиске решения количество

итераций. Массив Y содержит приближения неизвестных на шаге iter. proc Iterac(n,X,TOL,iter,X,iter,flag)

LIM iter // предельное количество итераций

iter 0

repeat

iter iter+1

// очередные приближения неизвестных на шаге iter

Y[1] f1(X)

Y[2] f2(X)

Y[n] fn(X)

m 0

for i 1 to n do

if abs(Y[i]-X[i])<TOL then

m m+1 // выполнено условие сходимости для xi end if

end for

X Y // приближения на шаге iter until (m=n) or (iter>LIM)

flag iter≤LIM

end proc

З а м е ч а н и я. Заменой переменной Y на X из этого алгоритма можно

получить алгоритм метода Зейделя для систем нелинейных уравнений.

Если размерность системы невелика (n = 2 или n = 3), то вполне можно

обойтись без массивов, заменив в тексте алгоритма все переменные с индекса-

ми простыми переменными.

РЕПОЗИТОРИЙ БГ

ПУ

Page 30: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

32

П р и м е р. Решить по методу итераций систему нелинейных уравнений 3 3

1 2 1

3 3

1 2 2

6 3 0

6 2 0.

x x x

x x x

Сначала запишем данную систему в таком виде: 3 3 3 3

1 2 1 21 1 1 2 2 2 1 2

( ) ( )1 1( , ) ( , ).

6 2 6 3

x x x xx f x x x f x x

Проверим, что в пределах области 0 ≤ x < 1, 0 ≤ y < 1 выполнены усло-

вия сходимости: 2 2 2 2

1 1 1 2 2 2 1 2

1 2 1 2

1 1 1 11 1.

2 2 2 2 2 2 2 2

f f x x f f x x

x x x x

Следовательно, в рассматриваемой области может быть найдено реше-

ние. Полагая TOL = 10–5

, 5.0 ,5.0)0(

2)0(

1 xx , в результате выполнения алгорит-

ма получим iter = 6, x1 = 0.532371, x2 = 0.351258.

5. Интерполирование функций

П о с т а н о в к а з а д а ч и. Пусть в точках (узлах) x0 < x1 < … < xn функ-

ция y = f(x) задана таблицей своих значений

y0 = f(x0), y1 = f(x1), …, yn = f(xn). (1)

Задача интерполирования заключается в построении функции g(x), которо-

рую можно вычислить для любого x0 ≤ x ≤ xn, такой, что g(xi) = yi, где

i = 0, 1,…, n. Геометрически это означает, что надо провести гладкую кривую,

проходящую через систему данных точек. На практике при интерполировании

удобны полиномы. Можно доказать, что для табличной функции (1) существует

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

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

Лагранжа1 и Ньютона.

Полином Лагранжа

Интерполяционный полином Лагранжа записывают в таком виде:

Ln(x) = y0R0(x)+ y1R1(x)+ …+ ynRn(x),

где функциональные коэффициенты

n

ijj ji

ji ni

xx

xxxR

,0

. ,1 ,0 ,)( (2)

1 Жозеф Луи Лагранж (Lagrange,1736 – 1813) – французский математик и механик

РЕПОЗИТОРИЙ БГ

ПУ

Page 31: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

33

Здесь Ri(xi) = 1, Rj(xi) = 0, ij , поэтому Ln(xi) = yi. Шаг таблицы может быть

неравномерным. При n = 1 (линейная интерполяция) формула (2) представляет

уравнение прямой, проходящей через две данные точки (x0, y0), (x1, y1):

01

01

10

101 )(

xx

xxy

xx

xxyxL

.

При n = 2 (квадратичная интерполяция) формула (2) дает уравнение параболы,

проходящей через три данные точки (x0, y0), (x1, y1), (x2, y2):

))((

))((

))((

))((

))((

))(()(

1202

102

2101

201

2010

2102

xxxx

xxxxy

xxxx

xxxxy

xxxx

xxxxyxL

П р и м е р. Имеются табличные данные для функции y = sin(x):

x 0 6

1

2

1

y 0 2

1 1

Для приближенного вычисления 30902.0)10

sin(

построить полином,

который интерполирует sin(x) по трем точкам. В данном случае

0 1

2

1 1 1( )( ) ( 0)( )

1 1 16 2 2( ) 12( )( ) ( ) 18 ( )1 1 1 1 16 2 2

(0 )(0 ) ( 0)( )6 2 6 6 2

1( 0)( )

16( ) 6 ( ).1 1 1 6

( 0)( )2 2 6

x x x x

R x x x R x x x

x x

R x x x

2

2 0 1 2

1 7( ) 0 ( ) ( ) ( ) 3

2 2L x R x R x R x x .

Отсюда 2

1( ) 0.3210

L . Погрешность решения 2

1( ) sin( ) 0.0109810 10

L

.

Из рис. 5.1 видно, что за пределами отрезка [x0, xn] полученный полином

второй степени (жирная линия) заметно отличается от интерполируемой им

функции.

РЕПОЗИТОРИЙ БГ

ПУ

Page 32: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

34

Формула (2) достаточно проста и удобна для программирования. Алго-

ритм вычисления Ln(x) определяют рекуррентные соотношения

1 1 1

1

( ) 0, ( ) 1, ( ) ( ) ( ) ,

( ) ( )( ) /( ), , 0, 1, , , .

i i i i

i i j i j

L x R x L x L x R x y

R x R x x x x x i j n j i

А л г о р и т м А5.1. (Полином Лагранжа).

В х о д: n, X[0: n], Y[0: n], x. Здесь x – аргумент, n – степень полинома

Лагранжа. Массив X содержит таблицу значений xi, массив Y – таблицу значе-

ний f(xi), i = 0, … , n.

В ы х о д: L – значение полинома Лагранжа Ln(x), x0 ≤ x ≤ xn.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: R. Переменная R хра-

нит значения Ri(x).

proc Lagr(n,X,Y,x,L)

L 0 P 1

for i 0 to n do

R 1

for j 0 to n do

if j<>i then

R R*(x-X[j])/(X[i]-X[j])

end if

end for

L L+R*Y[i]

end for

end proc

Рис. 5.1

L2(x)

sin( )x

РЕПОЗИТОРИЙ БГ

ПУ

Page 33: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

35

З а м е ч а н и я. Погрешность интерпо-

лирования зависит от числа узлов, а также от

их расположения на отрезке. Известно, что

при увеличении количества узлов модуль

разности между значением функции и зна-

чением приближающего ее полинома не все-

гда уменьшается. Если, например, интерпо-

лировать простую функцию R(x)=1/(1+25x2)

в равноотстоящих точках отрезка [–1, 1], то

будет получен полином, который неограни-

ченно растет вблизи концов данного отрезка

с ростом числа узлов n. В то же время, ин-

терполяция хорошо работает в средней части

указанного отрезка.

Рассмотренный пример принадлежит

Рунге1. На рис. 5.2 показан график полинома Лагранжа для функции Рунге, по-

строенный по таблице из 11 узлов.

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

Если надо найти с помощью интерполирования значение табличной

функции, а общее выражение полинома Лагранжа для нее не требуется, то

удобна более экономная вычислительная схема Эйткена2.

Определим полиномы первой степени:

nixx

yxxyxx

yxx

yxx

xxxxxL

ii

iiii

ii

ii

iiii ,0 ,

)()(1),,(

1

11

1111

.

Например,

11

00

0110

1),,(

yxx

yxx

xxxxxL

,

22

11

1221

1),,(

yxx

yxx

xxxxxL

и т. д.

Полиномы k-й степени получают из полиномов (k–1)-й степени с помо-

щью рекуррентной формулы

),,,,(

),,,,(1),,,,(

21

111

kiiiki

kiiii

ikikiii

xxxxLxx

xxxxLxx

xxxxxxL

,

где k = 1, 2,…, n, i = 0, 1,…, n – k.

1 Карл Давид Рунге (1856 – 1927) – немецкий математик.

2 Александр Крэг Эйткен (1895 – 1967) – английский математик.

Рис. 5.2

РЕПОЗИТОРИЙ БГ

ПУ

Page 34: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

36

Например, ),,(

),,(1),,,(

212

100

02210

xxxLxx

xxxLxx

xxxxxxL

и т. д. Можно пока-

зать, что в этих обозначениях справедливо равенство

Ln(x) = L(x, x0, x1, … , xn ).

Последовательно вычисляемые значения L(x, xi, xi+1, … , xi+k ) располага-

ют в виде таблицы:

x y 1 2 … n

x0 x – x0 y0 L(x, x0, x1) L(x, x0, x1, x2) … L(x, x0, x1, …, xn)

x1 x – x1 y1 L(x, x1, x2) L(x, x1, x2, x3)

… … … … …

… … … L(x, xn-1, xn)

xn x – xn yn

Формулы и таблица определяют алгоритм вычисления Ln(x).

А л г о р и т м А5.2. (Интерполяция по схеме Эйткена).

В х о д: n, X[0: n], Y[0: n], x. Массив X содержит таблицу значений xi,

массив Y – таблицу значений f(xi), i = 0, … , n.

В ы х о д: L – значение полинома Ln(x), x0 ≤ x ≤ xn.

Значения полиномов L(x, xi, xi+1, … , xi+k ) записываются на место Y[i],

i = 0, 1,…, n – k.

proc Lagr2(n,X,Y,x,L)

for k1 to n do

for i0 to n-k do

Y[i] (x-X[i])*Y[i+1]-(x-X[i+k])*Y[i]

Y[i] Y[i]/(X[i+k]-X[i])

end for

end for

L Y[0] // здесь Y[0] = L(x, x0, x1, … , xn ) end proc

З а м е ч а н и е. Этод метод позволяет контролировать погрешность ре-

зультата. Cчет можно остановить, как только значения L(x, x0, x1, … , xm ) и L(x,

x0, x1, … , xm+1), где m < n, сравняются в пределах заданной точности TOL.

Полином Ньютона с разделенными разностями

Пусть функция f(x) задана таблицей значений yi = f(xi) в узлах xi, которые

все различны. Разделенными разностями первого порядка называют отношения

РЕПОЗИТОРИЙ БГ

ПУ

Page 35: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

37

nixx

yyxx

ii

iiii ,,1 ,0 ,];[

1

11

.

Например, 12

1221

01

0110 ];[ ,];[

xx

yyxx

xx

yyxx

и т. д. Разности k-го порядка

получают из разностей (k–1)-го порядка по рекуррентной формуле

.,,1 ,0 ,,,1 ,];;[];;[

];;;[ 111 knink

xx

xxxxxxx

iki

kiikiikiii

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

x y 1 2 … n

x0 y0 [ x0, x1] [x0, x1, x2] … [x0, x1, x2, … ,xn]

x1 y1 [x1, x2] [x1, x2, x3]

… … … …

… … [xn-1, xn]

xn yn

Интерполяционный полином Ньютона с разделенными разностями запи-

сывают в таком виде:

N(x)=y0+[x0; x1](x-x0)+ [x0; x1;x2](x-x0)(x-x1)+…+ [x0;…;xn](x-x0)(x-x1)… (x-xn-1).

Обозначим произведение (x–x0)(x–x1)… (x–xk–1) через Pk(x). Тогда алго-

ритм вычисления полинома N(x) определяют рекуррентные соотношения

)(];...;[)()( ,)( ),)(()( ,1)( 0100110 xPxxxNxNyxNxxxPxPxP kkkkkkk

)()( xNxN n , k = 1, 2,…, n.

А л г о р и т м А5.3. (Полином Ньютона).

В х о д: n, X[0: n], Y[0: n], x. Массив X содержит таблицу значений xi,

массив Y – таблицу значений f(xi), i = 0, … , n.

В ы х о д: N – значение полинома Ньютона N(x), x0 ≤ x ≤ xn.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: P. Переменная P хра-

нит значения Pk(x).

Разности [xi; xi+1; … ; xi+k] записываются на место Y[i], i = 0, 1,…, n – k.

proc Newton(n,X,Y,x,N)

P 1 N Y[0]

for k1 to n do

for i 0 to n-k do

Y[i] (Y[i+1]-Y[i])/(X[i+k]-X[i])

end for

P P*(x-X[k-1])

РЕПОЗИТОРИЙ БГ

ПУ

Page 36: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

38

N N+Y[0]*P // здесь Y[0] = [x0, x1, … , xk ] end for

end proc

З а м е ч а н и я. По сравнению с полиномом Лагранжа полином Ньютона

имеет более сложное строение. Однако он имеет и ряд преимуществ. При до-

бавлении к x0,…, xn нового узла n+1 все ранее найденные члены суммы сохра-

няются и к ней присоединяется еще одно слагаемое

[x0; … xn; xn+1](x–x0)(x–x1)… (x–xn).

Это позволяет, например, определять нужное число узлов, добавляя их по од-

ному, и постепенно увеличивая точность результата.

На небольших отрезках интерполирование по Ньютону обеспечивает хо-

рошую точность результата. На практике обычно бывает достаточно выбрать из

данной таблицы три или четыре узла (n = 2 или n = 3). При этом точка x должна

находиться в пределах отрезка [x0, xn].

П р и м е р. Функция y = f(x) задана таблицей:

x 0 2.5069 5.0154 7.5227

y 0.3989423 0.3988169 0.3984408 0.3978138

Найти значение f(x) при x = 3.7608. В данном случае n = 3. После выпол-

нения алгоритма получим N = 0.3986603. Разделенные разности указаны в

табл.5.1.

Таблица 5.1.

x y 1 2 3

0.0000 0.3989423 -0.0000500 -0.0000199 -0.0000000

2.5069 0.3988169 -0.0001499 -0.0000200

5.0154 0.3984408 -0.0002501

7.5227 0.3978138

Вторые разности здесь практически равны. Поэтому в формуле Ньютона

достаточно взять три слагаемые (n = 2).

Полином Ньютона для случая равноотстоящих узлов

Пусть функция y = f(x) задана таблицей в равноотстоящих узлах xi, где

xi+1– xi = h, i = 0, 1, …, n–1. Величины iii yyy 11 называют конечными раз-

ностями первого порядка функции f(x) в точке xi. Конечные разности k-го по-

рядка получают из разностей (k–1)-го порядка по рекуррентной формуле

ik

ik

ik yyy 1

11

, где k = 1, …, n и ii yy 0 .

РЕПОЗИТОРИЙ БГ

ПУ

Page 37: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

39

Полином Ньютона с конечными разностями записывают в таком виде:

, где ,!

)1)...(1(

!2

)1()( 0

002

01

0h

xxqy

n

nqqqy

qqyqyxN n

или так:

1 2

1 2 0

( 1) ( 1)...( 1)( ) ,

2! !

n nn n n

x xq q q q q nN x y q y y y q

n h

.

Последовательно вычисляемые разности располагают в таблице:

x y ∆1y ∆

2y ∆

ny

x0 y0 ∆1y0 ∆

2y0 … ∆

ny0

x1 y1 ∆1y1 ∆

2y1 …

… … … …

xn-1 yn-1 ∆1yn-1

xn yn

В первой формуле Ньютона используются разности верхней строки таб-

лицы конечных разностей. Формулу применяют для интерполирования вблизи

первого узла x0. Вторая формула, в которой используются диагональные разно-

сти, больше подходит для интерполирования вблизи последнего узла xn.

Обозначим!

)1)...(1()(

k

kqqqxPk

. Тогда алгоритм вычисления поли-

нома N(x) по первой формуле определяют рекуррентные соотношения

.,...,2 ,1 ),()(

,)()( ,)( ,1

)()( ,1)( 010010

nkxNxN

yxPNxNyxNk

kqxPxPxP

n

kkkkkk

А л г о р и т м А5.4. (Полином Ньютона для равноотстоящих узлов).

В х о д: n, X[0: n], Y[0: n], x. Массив X содержит таблицу значений xi,

массив Y – таблицу значений f(xi), i = 0, … , n.

В ы х о д: N – значение полинома Ньютона, x0 ≤ x ≤ xn.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: P, h, q. Переменная P

хранит значения коэффициентов Pk(x), h – шаг таблицы.

Последовательные значения конечных разностей ∆kyi записываются на

место Y[i], i = 0, 1,…, n – k.

proc Newton2(n,X,Y,x,N)

h (X[n]-X[0])/n // шаг таблицы

q (x-X[0])/h

N Y[0] P 1

РЕПОЗИТОРИЙ БГ

ПУ

Page 38: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

40

for k 1 to n do

for i 0 to n-k do Y[i] Y[i+1]-Y[i] end for

P P*(q-k+1)/k

N N+P*Y[0] // здесь Y[0] = ∆ky0

end for

end proc

З а м е ч а н и е. Отсюда легко получить алгоритм интерполирования по

второй формуле Ньютона. Достаточно заменить x-X[0] на x-X[n],

N Y[0] на N Y[n] и N N+P*Y[0] на N N+P*Y[n-k].

Интерполирование кубическими сплайнами

Основной недостаток интерполирования полиномом – большие колеба-

ния, которые может иметь кривая в точках между двумя соседними узлами.

f(x)L(x)

Рис. 5.3 Например, на рис. 5.3 приведен график полинома Лагранжа по таблице

значений функции f(x) = 3 x на достаточно большом отрезке. Значения поли-

нома в этом случае сильно отличаются от значений интерполируемой функции.

В действительности многие кривые нельзя представить простыми функциями.

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

простых кривых. При этом в точках стыковки полученная составная кривая бу-

дет гладкой. В теории приближения функций такие кривые называются сплай-

нами1. Сплайн можно наглядно представить как линию, которую образует

упругая линейка, закрепленная в ряде точек. Ограничимся здесь случаем куби-

ческих сплайнов, наиболее широко используемых на практике.

1 Сплайн (splain) в переводе с английского означает «гибкая линейка».

РЕПОЗИТОРИЙ БГ

ПУ

Page 39: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

41

П о с т а н о в к а з а д а ч и. Пусть функция f(x) задана таблицей yi = f(xi),

i = 0, 1, … , n, узлы которой x0 < x1 < … < xn не обязательно расположены рав-

номерно. Требуется построить функцию S(x), такую, что

а) график S(x) проходит через каждую данную точку, то есть

S(xi) = yi, i = 0, 1, … , n;

б) на каждом из отрезков [xi–1, xi], i = 1, 2, … , n функция S(x) является

полиномом третьей степени

Si(x) = ai+bi(x– xi)+ci(x– xi)2+ di(x– xi)

3, xi ≤ x ≤ xi+1, i = 0, 1,…, n–1;

в) на всем отрезке [x0, xn] S(x) имеет две непрерывные производные

)(xSi = bi + 2ci(x– xi) + 3 di(x– xi)

2,

)(xSi = 2ci + 6 di(x– xi) , i = 0, 1,…, n–1.

Так как на каждом из n отрезков между узлами сплайн S(x) определяется

четырьмя коэффициентами, то для его полного построения необходимо найти

4n чисел. По определению сплайна значения S(x) и функции f(x) равны для всех

узлов:

Si(xi) = yi, Si(xi+1) = yi+1, i = 0, 1, … , n – 1. (1)

Для внутренних узлов равны значения первой и второй производных со-

седних отрезков сплайна:

),()( ),()( 111111 iiiiiiii xSxSxSxS i = 0, 1, … , n – 2. (2)

Для концевых узлов x0, xn обычно полагают

0)( ,0)( или 0)( ,0)( 100100 nnnn xSxSxSxS (3)

(существуют граничные условия и других типов).

Условий (1) – (3) достаточно для получения расчетных формул для вы-

числения всех коэффициентов кубического сплайна.

Для сокращения записи обозначим hi = xi–xi–1, i = 1, 2, …, n. Условия (1)

позволяют записать следующие равенства:

ai = yi, i = 0, 1, …, n – 1, (4)

31

211 iiiiiii hdhchba = yi+1, i = 0, 1, …, n – 1, (5)

а условия (2) – равенства

РЕПОЗИТОРИЙ БГ

ПУ

Page 40: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

42

211 32 iiiii hdhcb = bi+1, i = 0, 1, …, n – 2, (6)

13 iii hdc = ci+1, i = 0, 1, …, n – 2. (7)

Из условий (3) для второй производной следуют равенства:

c0 = 0, cn–1 + 3dn–1hn = 0 (8)

Полученные соотношения образуют полную систему линейных уравне-

ний относительно коэффициентов ai, bi, ci, di. Ее выгодно записать так, чтобы

неизвестными были только коэффициенты ci.

Доопределим cn = 0. Коэффициенты di получим из равенств (7):

1

1

3

i

iii

h

ccd , i = 0, 1, …, n – 1. (9)

Подстановка ai и di в (5) дает представление для bi:

1 1 1

1

( 2 )

3

i i i i ii

i

y y h c cb

h

, i = 1, 2, …, n – 1. (10)

После подстановки bi и di в (6) и уменьшения значения индекса i на еди-

ницу (для симметрии записи) приходим к уравнениям, которые содержат толь-

ко неизвестные коэффициенты ci:

)(3)(2 1

1

11111

i

ii

i

iiiiiiiii

h

yy

h

yychchhch

, (11)

где i = 1, 2,…, n–1. Тем самым n – 1 уравнений (11) вместе с равенствами

c1 = 0, cn = 0 образуют линейную систему для определения коэффициентов ci.

Легко заметить, что в каждое уравнение входят только три неизвестных коэф-

фициента с последовательными значениями индексов. Решение этой трехдиа-

гональной системы всегда существует и единственно. После определения ко-

эффициентов ci по методу прогонки (Алгоритм А3.3) другие коэффициенты

сплайна вычисляются по формулам (4), (9), (10).

Запишем уравнения (11) в виде, удобном для применения метода

прогонки:

pi ci–1 + qi ci + ri ci+1 = wi, i = 1, 2, …, n, где

)(3 , ),(2 , 1

1

111

i

ii

i

iiiiiiiiii

h

yy

h

yywhrhhqhp

.

А л г о р и т м А5.5. (Кубический сплайн).

В х о д: n, X[0: n], Y[0: n], x, где x – аргумент сплайна S(x), x0 ≤ x ≤ xn.

Массив X содержит значения xi, массив Y – значения f(xi), i = 0, 1, … , n.

В ы х о д: S, P1, P2. Здесь S – значение сплайна S(x), P1, P2 – его первая

и вторая производные.

РЕПОЗИТОРИЙ БГ

ПУ

Page 41: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

43

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: C, h1, h2, w. Массив

C[0: n] содержит коэффициенты ci. Переменные h1, h2, w служат для хранения

величин hi, hi+1, wi.

proc Splain(input(n,X,Y,x)output(S,P1,P2)

Найти методом прогонки коэффициенты ci

k 0

while x > X[k] do // поиск отрезка xk–1 ≤ x ≤ xk, 1≤ k ≤ n

k k+1 end while

// Вычислить значение сплайна Sk–1(x) и его производных

h X[k]-X[k-1]

a Y[k-1]

b (Y[k]-Y[k-1])/h-(C[k]+2*C[k-1])*h/3

c C[k-1]

d (C[k]-C[k-1])/(3*h)

x x-X[k-1]

S a+(b+(c+d*x)*x)*x // значение сплайна

P1 b+(2*c+3*d*x)*x // первая производная

P2 2*c+6*d*x // вторая производная end proc

Вспомогательный алгоритм для вычисления коэффициентов ci:

// Прямой ход:

С[0] V[0] 0

for i1 to n-1 do

h1 X[i]-X[i-1]

h2 X[i+1]-X[i]

t 2*(h2+h1)+h1*C[i-1]

C[i] -h2/t

w 3*((Y[i+1]-Y[i])/h2-(Y[i]-Y[i-1])/h1)

V[i] (w-h1*V[i-1])/t

end for

// Обратный ход:

C[n] 0 C[n-1] V[n-1]

for in-2 downto 1 do

C[i] C[i]*C[i+1]+V[i]

end for

РЕПОЗИТОРИЙ БГ

ПУ

Page 42: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

44

П р и м е р. Имеется следующая таблица функции y = ln(x)+3

sin2

x

:

x 1 1.6 2.8 4.5 6.1 6.6 7.4 7.8

y 0.997 1.145 0.158 1.954 2.08 1.43 1.007 1.292

Найти значения y(x) при x = 1.5, x = 4.5, x = 5.0, x = 7.9. В данном случае

n = 7. Результаты выполнения алгоритма представлены в табл. 5.2. В ней также

приводятся значения функции y(x), вычисленные по точной формуле.

Таблица 5.2

x 1.5 4.5 5 7.9

S(x) 1.162 1.954 2.382 1.428

y 1.184 1.954 2.547 1.410

На рис 5.4 показан график сплайна (жирная линия) вместе с рассматрива-

емой функцией и табличными значениями.

Рис. 5.4

Метод наименьших квадратов

Интерполяционный полином не всегда удобен для приближения функ-

ций. Если таблица содержит результаты какого-то эксперимента, полученные с

погрешностью (ошибкой), то не целесообразно проводить кривую точно через

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

приближенного представления (аппроксимации) функций, заданных таблицей,

который называется методом наименьших квадратов1.

П о с т а н о в к а з а д а ч и. Пусть функция y = f(x) задана таблицей при-

ближенных значений yi = f(xi), i = 0,1, … , n. Метод наименьших квадратов за-

1 Он был впервые опубликован французским математиком А. Лежандром и вскоре,

независимо от него, немецким математиком К. Гауссом.

РЕПОЗИТОРИЙ БГ

ПУ

Page 43: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

45

ключается в построении такой функции g(x), для которой сумма

n

iii yxg

0

2))((

квадратов отклонений ее значений в узлах xi от значений yi была бы минималь-

ной. Геометрически это означает, что надо провести вблизи данных точек кри-

вую, которая нигде не должна сильно от них отклоняться.

Метод наименьших квадратов применяется, если надо найти в явном виде

функциональную зависимость между величинами x и y, которые получены в ре-

зультате измерений или наблюдений.

Ограничимся здесь случаем линейной функции a + bx. Требуется подо-

брать такие a и b, чтобы значение выражения 2

0

( )n

i i

i

S a bx y

было

минимальным.

Приравняем к нулю частные производные по переменным a и b:

0)(2 0)(200

i

n

iii

n

iii xybxa

b

Sybxa

a

S.

Перепишем эти равенства в виде системы уравнений:

n

iii

n

ii

n

ii

n

ii

n

ii yxxbxayxbna

00

2

000

)1(

и обозначим

i

ii

iii

ii

ii

i ySYYyxSXYxSXXySYxSX 22 , , , , .

Непосредственно решая систему, получим формулы для a и b:

SXSXSXXn

SYSXSXYnb

SXSXSXXn

SXYSXSXXSYa

)1(

)1( ,

)1(.

Для оценки степени отклонения функциональной связи между x и y от

линейной зависимости используется коэффициент парной корреляции R,

1 R , вычисляемый по формуле

SYSYSYYnSXSXSXXn

SYSXSXYnR

)1()1(

)1(.

Если R = 0, то линейной зависимости между величинами x и y нет. Чем

ближе R к единице, тем сильнее линейная зависимость. При 1R зависимость

– строго линейная.

А л г о р и т м А5.6. (Метод наименьших квадратов).

В х о д: n, X[0: n], Y[0: n], где n – размер таблицы, n > 0. Массив X хранит

значения xi , массив Y – значения f(xi).

РЕПОЗИТОРИЙ БГ

ПУ

Page 44: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

46

В ы х о д: a, b, R. Здесь a, b – коэффициенты линейной зависимости

y = a+bx, R – коэффициент парной корреляции.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е SX, SY, SXX, SYY, SXY ис-

пользуются для накопления сумм.

proc MHK(n,X,Y,a,b,R)

SX SY SXX SYY SXY 0

for i0 to n do // цикл для подсчета сумм

SX SX+X[i] SY SY+Y[i]

SXX SXX+X[i]*X[i]

SXY SXY+X[i]*Y[i]

SYY SYY+Y[i]*Y[i]

end for

c1 (n+1)*SXX-SX*SX

c2 (n+1)*SXY-SX*SY

c3 (n+1)*SYY-SY*SY

a (SY*SXX-SX*SXY)/c1 b c2/c1

R c2/sqrt(c1*c3)

end proc

П р и м е р. В «Основах химии» Д. И. Менделеева приведены данные о

растворимости азотнокислого натрия NaNO3 в зависимости от температуры во-

ды. Измерения показывают, что в 100 частях воды растворяется y условных ча-

стей NaNO3 при указанных температурах x (в градусах):

x 0 4 10 15 21 29 36 51 68

y 66.7 71.0 76.3 80.6 85.7 92.9 99.4 111.6 125.1

Можно сделать вывод, что зависимость y от x – линейная. Расчеты по ме-

тоду наименьших квадратов дают формулу y = 0.86+67.61x, при этом коэффи-

циент парной корреляции R = 0.9996. График прямой вместе с табличными зна-

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

вания является хорошим приближением к исходным данным.

РЕПОЗИТОРИЙ БГ

ПУ

Page 45: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

47

Рис. 5.5 Рис. 5.6

Функциональную нелинейную зависимость между x и y в ряде случаев можно

свести к линейной. Рассмотрим, например, экспоненциальную функцию y =

aebx

. После логарифмирования имеем ln(y) = ln(a)+ bx. Полагая u = ln(y), c =

ln(a), получим линейную по отношению к переменным u и x зависимость u =

c+bx. Если теперь преобразовать исходную таблицу по правилу yi = ln(yi) и по-

добрать по методу наименьших квадратов значения коэффициентов b и c, то

легко найти a = ec. В общем случае формулы зависимости могут быть самыми

различными.

П р и м е р. Имеется следующая таблица:

x 10 20 30 40 50 60 70 80

y 15.3 20.5 27.4 36.6 49.1 65.6 87.8 117.6

Необходимо представить зависимость величин x и y в виде функции

y(x) = aebx

. После логарифмирования получим новую таблицу:

x 10 20 30 40 50 60 70 80

y 2.73 3.02 3.31 3.60 3.89 4.18 4.48 4.77

В результате выполнения алгоритма b = 0.029, с = 2.44, R = 1.0000. От-

сюда a = e2.44

= 11.437 и y(x) = 11.437 e0.029x

. Проверка показывает, что значе-

ния, вычисленные по этой формуле, хорошо отвечают табличным данным.

График кривой показан на рис. 5.6.

РЕПОЗИТОРИЙ БГ

ПУ

Page 46: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

48

6. Численное интегрирование

П о с т а н о в к а з а д а ч и. В прикладных задачах часто необходимо вы-

числить определенный интеграл

)(b

a

dxxfI . (1)

Если подынтегральная функция f(x) достаточно сложна или задана табли-

цей, то найти точное его значение невозможно. В этом случае используются

приближенные формулы, которые позволяют подсчитать интеграл (1) прямо по

значениям f(x) в отдельно взятых точках (узлах) отрезка [a, b]:

)()(0

n

iii

b

a

xfpdxxf . (2)

Определенный интеграл имеет наглядный геометрический смысл: он ра-

вен площади криволинейной фигуры, ограниченной графиком функции f(x)

(при f(x) > 0), осью Ox и прямыми x = a, x = b. Поэтому формулы (2) называют

квадратурными1.

Формула прямоугольников

Метод прямоугольников – простейший прием численного интегрирова-

ния. Разделим отрезок [a, b] на n частей одинаковой длины h = (b – a)/n. На

каждом из полученных отрезков [xi-1, xi], i = 1, 2, …, n, где x0 = a, xn = b, заме-

ним функцию f(x) ее значением в средней точке mk, где m1 = a + h/2, mk+1 = mk +

h, k = 1, …, n–1. Площадь криволинейной фигуры приближенно равна сумме

площадей прямоугольников высотой f(mk) и основанием h (рис. 6.1). Значение

определенного интеграла можно вычислить по формуле

1

1

)( n

kkR mfhI .

Чем больше точек разбиения n отрезка

[a, b], тем точнее эта формула. Погреш-

ность формулы прямоугольников пропор-

циональна h2.

1 От латинского quadratura – площадь.

x0 x3x1 x2 ...

y = f(x)

Рис. 6.1

РЕПОЗИТОРИЙ БГ

ПУ

Page 47: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

49

А л г о р и т м А6.1. (Формула прямоугольников).

В х о д: f(x), a, b, n. Здесь a, b – пределы интегрирования, b > a, n – число

разбиений отрезка.

В ы х о д: Int – значение определенного интеграла.

proc Rectangle(f,a,b,n,Int)

h (b-a)/n // шаг по x

x a+h/2 // середина первого отрезка

Int f(x)

for k1 to n-1 do

x x+h // середина отрезка mk+1

Int Int+f(x) // накопление суммы end for

Int h*Int // значение интеграла end proc

Формула трапеций

Метод трапеций заменяет функцию f(x) на каждом из отрезков [xi-1, xi], i

= 1, 2, …, n, где x0 = a, xn = b, линейной функцией. В этом случае площадь кри-

волинейной фигуры приближенно равна сумме площадей трапеций с основани-

ями f(xi-1), f(xi) и высотой h (рис. 6.2). Полу-

ченная площадь дает значение интеграла:

)2

)()(

2

)((

1

1

bfxf

afhI

n

iiT

.

Погрешность формулы трапеций про-

порциональна h2. Обе формулы (прямо-

угольников и трапеций) имеют низкую точ-

ность и поэтому редко применяются на

практике.

А л г о р и т м А6.2. (Формула трапеций).

В х о д: f(x), a, b, n. Здесь a, b – пределы интегрирования, b > a, n – число

разбиений отрезка.

В ы х о д: Int – значение интеграла.

proc Trapezium(f,a,b,n,Int)

h (b-a)/n // шаг по x

Int (f(a)+f(b))/2

x0 x3x1 x2 ...

y = f(x)

Рис.6.2

РЕПОЗИТОРИЙ БГ

ПУ

Page 48: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

50

x a

for i1 to n-1 do

x x+h

Int Int+f(x) // накопление суммы end for

Int h*Int // значение интеграла end proc

Формула Симпсона

Формула Симпсона1 (или формула парабол) получается при замене f(x) на

каждом отрезке [xi-1, xi], i = 1, 2, …, n интерполяционным полиномом второй

степени (параболой) с узлами xi-1, (xi-1+ xi)/2, xi. Площадь криволинейной фигу-

ры приближенно равна сумме площадей фигур, расположенных под каждой из

этих парабол (рис. 6.3). В случае, когда n – четно (n = 2m), интеграл вычисляют

по формуле:

)2

)()()( 2

2

)((

3

2 1

12

112

bfxfxf

afhI

m

kk

m

kkS

.

Погрешность R формулы Симпсона пропор-

циональна h4. При этом 4

180

)(h

abR

, где

)(max )( xf n для a ≤ x ≤ b. Формула поз-

воляет получить высокую точность резуль-

тата при сравнительно небольшом n (если

четвертая производная подынтегральной

функции не слишком велика). Она точна для

полиномов до третьей степени включитель-

но (в этом случае f (4)

(x) = 0).

А л г о р и т м А6.3. (Формула Симпсона).

В х о д: f(x), a, b, n. Здесь a, b – пределы интегрирования, b > a, n – четное

число разбиений отрезка.

В ы х о д: Int – значение интеграла.

proc Simp(input(f,a,b,n)output(Int))

Int (f(a)+f(b))/2

h (b-a)/n // шаг по x

x a m n div 2

1 Томас Симпсон (Simpson, 1710 – 1761) – английский математик.

x0 x2 ...

y = f(x)

m1

Рис. 6.3РЕПОЗИТОРИЙ БГ

ПУ

Page 49: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

51

for k1 to m-1 do

x x+h

Int Int+2*f(x) // накопление суммы

x x+h

Int Int+f(x) // накопление суммы end for

Int Int+2*f(x+h) // накопление суммы

Int 2*Int*h/3 // значение интеграла end proc

П р и м е р. Найти интеграл ,1

0

2

dxe x используя квадратурные формулы

прямоугольников, трапеций и парабол. Значение этого интеграла с точностью

до пяти знаков равно 0.74682. Результаты выполнения алгоритма для n = 10,

20, 40, 80 приведены в табл. 6.1. При их сравнении видно, что формула парабол

дает ответ с большим числом верных знаков.

Т а б л и ц а 6.1

Метод n = 10 n = 20 n = 40 n = 80

Прямоугольников 0.74713 0.74690 0.74684 0.74683

Трапеций 0.74621 0.74667 0.74679 0.74682

Парабол 0.74683 0.74682

Вычисление интеграла с заданной точностью

Численная оценка погрешности квадратурных формул требует вычисле-

ния высших производных, что не всегда просто сделать. Чтобы найти интеграл

с пределами изменения x от a до b с некоторой заданной точностью TOL, на

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

смотренных методов. Интеграл вычисляют при делении отрезка [a, b] на n ча-

стей и на 2n частей. Если абсолютная величина разности между двумя полу-

ченными значениями In и I2n меньше TOL, то счет можно остановить. В против-

ном случае после замены In на I2n и уменьшения шага вдвое снова вычисляют

интеграл и т. д. При этом для формулы трапеций и парабол можно указать бо-

лее точные оценки погрешности. В первом случае ее получают из неравенства

2 3n nI I TOL , во втором – из неравенства 2 15n nI I TOL .

Рассмотрим для примера алгоритм вычисления интеграла по методу тра-

пеций. При каждом удвоении n заново вычисляем и суммируем значения функ-

ции f(x) лишь в новых точках разбиения отрезка [a, b], которые не совпадают с

точками предыдущего разбиения.

РЕПОЗИТОРИЙ БГ

ПУ

Page 50: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

52

А л г о р и т м А6.4. (Формула трапеций c оценкой погрешности).

В х о д: f(x), a, b, TOL. Здесь a, b – пределы интегрирования, b > a.

В ы х о д: Int, n; Int – значение интеграла, n – число отрезков.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: S1, S2, IN, I2N, x, h. Пере-

менные S1, S2 обозначают частичные суммы, переменные IN, I2N – значения

интегралов In, I2n, h – шаг по x.

proc Trapezium(f,a,b,TOL,Int,n)

TOL 3*TOL

n 2 h (b-a)/2

S1 (f(a)+f(b))/2+f(a+h) repeat

n 2*n

x a+h/2 S2 0

while x < b do

S2 S2+f(x) // накопление суммы

x x+h

end while

IN h*S1 // значение интеграла In

S1 S1+S2 h h/2

I2N h*S1 // значение интеграла I2n

until abs(I2N-IN)<TOL

Int I2N end proc

П р и м е р. Найти интеграл .1)cos(2

0

dxx Положим TOL = 10–4

. В ре-

зультате выполнения алгоритма получим Int = 0.99995, n = 64.

Формула Гаусса

Квадратурную формулу Гаусса записывают в таком виде:

n

iiiG t

ababfp

abI

1

)22

(2

. (3)

Точки (узлы) ti, а также коэффициенты pi выбирают из справочных таб-

лиц. Формула обеспечивает наивысшую точность в том смысле, что для

полиномов степени не выше 2n – 1 она точна. В табл. 6.2 даны узлы и коэффи-

циенты для интегрирования с числом узлов от 2 до 5. В книге [12] приведены

их значения для1 ≤ n ≤ 16 с пятнадцатью десятичными знаками.

РЕПОЗИТОРИЙ БГ

ПУ

Page 51: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

53

Т а б л и ц а 6.2

n ti pi

2 t1 = – 0.5773502692

t2 = – t1

p1 = 1

p2 = p1

3

t1 = – 0.7745966692

t2 = 0

t3 = – t1

p1 = 0.5555555556

p2 = 0.8888888888

p3 = p1

4

t1 = – 0.8611363115

t2 = – 0.3399810436

t3 = – t2, t4 = – t1

p1 = 0.3478548451

p2 = 0.6521451549

p3 = p2, p4 = p1

5

t1 = – 0.9061798459

t2 = – 0.5384693101

t3 = 0

t4 = – t2, t5 = – t1

p1 = 0.2369268851

p2 = 0.4786286705

p3 = 0.5688888888

p4 = p2, p5 = p1

Для узлов и коэффициентов формулы Гаусса справедливы соотношения –

1 < ti < 1, tn-i+1 = – ti, 0 < pi ≤ 1, pn-i+1 = pi для i = 1, 2,…, m, где m = n div 2. По-

этому, если n – четно, интеграл можно приближенно вычислить по формуле

)),22

()22

((2 1

i

m

iiiG t

ababft

ababfp

abI

а если нечетно, то по формуле

))22

())22

()22

(((2

111

mmi

m

iiiG t

ababfpt

ababft

ababfp

abI

.

А л г о р и т м А6.5. (Квадратурная формула Гаусса).

В х о д: f(x), a, b, n, T[1: m], P[1: m]. Здесь n – число узлов, m = n div 2.

Массив T содержит значения ti, массив P – значения pi,.

В ы х о д: Int – значение определенного интеграла.

proc FGauss(f,a,b,T,P,n,Int)

с (b+a)/2 d (b-a)/2

m n div 2 Int 0

for i1 to m do

Int Int+P[i]*(f(c+d*T[i])+f(c-d*T[i]))

end for

if n mod 2 = 1 then // n – нечетно

Int Int+P[m+1]*f(c+d*T[m+1])

end if

Int d*Int // значение интеграла end proc

РЕПОЗИТОРИЙ БГ

ПУ

Page 52: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

54

П р и м е р. Найдем интеграл ,1)cos(2

0

dxx используя квадратурную фор-

мулу Гаусса с четырьмя узлами. В данном случае a = 0, 2

b , f(x) = cos(x).

Сначала формируем массивы T и P, взяв из табл. 3.2 при n = 4 все необхо-

димые значения: T[1] = –0.8611363115, T[2] = –0.3399810436, P[1] =

0.3478548451, P[2] = 0.6521451549. В результате выполнения алгоритма полу-

чим значение 0.9999999772.

З а м е ч а н и я. Погрешность этого метода нельзя оценить двойным сче-

том из-за неравномерного шага по t. Чем меньше отрезок интегрирования, тем

меньше погрешность вычисления интеграла. Большой отрезок всегда можно

разбить на несколько участков, на каждом из которых легко применить форму-

лу Гаусса, а затем сложить результаты. В этом случае можно взять большое

общее количество узлов.

Поскольку концы отрезка [a, b] не входят в число узлов формулы (3), то

интегрирование по методу Гаусса удобно для вычисления несобственных

интегралов.

Узлы ti можно определить как корни полиномов Лежандра

n

nn

nndt

td

ntP

)1(

!2

1)(

2 , тогда коэффициенты pi вычисляются по формуле

22 )()1(

2

ini

itPt

a

, i = 1, 2,…, n.

7. Численное дифференцирование

Когда приходится вычислять производные от функций, заданных таблич-

но, прибегают к численному дифференцированию.

П о с т а н о в к а з а д а ч и. Пусть функция y = f(x) определена таблицей

значений yi = f(xi) в точках (узлах) xi, i = 0, 1, …, n. Требуется найти производ-

ную f ′(x) в некоторой точке отрезка [x0, xn].

При численном дифференцировании функцию f(x) заменяют той или

иной интерполирующей функцией g(x) и приближенно полагают f ′(x) = g′(x).

Полином Лагранжа и его производные

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

гранжа n

n i i

i 0

L (x) y R (x)

получают дифференцированием рекуррентных

РЕПОЗИТОРИЙ БГ

ПУ

Page 53: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

55

формул, которые используются в Алгоритме А5.1. Следующий алгоритм вы-

числяет первую и вторую производные полинома Лагранжа.

А л г о р и т м А7.1 (Полином Лагранжа и его производные).

В х о д: X[0: n], Y[0: n], x, где x – аргумент полинома Лагранжа. Массивы

X, Y хранят таблицу функции f(x): X[i] = xi, Y[i] = f(xi), i = 0, 1,… , n.

В ы х о д: L, L1, L2. Здесь L – значение Ln(x) в точке x0 ≤ x ≤ xn, L1,

L2 – значения его первой и второй производных в той же точке.

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: R, R1, R2, q, s. Пере-

менная R хранит значения Ri(x), переменные R1, R2 – значения R′(x), R′′(x).

proc Diff1(n,X,Y,x,L,L1,L2)

L L1 L2 0

for i 0 to n do

R 1 R1 R2 0

for j 0 to n do

if j<>i then

q X[i]-X[j]

s x–X[j]

R2 (R2*s+2*R1)/q

R1 (R1*s+R)/q

R R*s/q

end if

end for

L2 L2+R2*Y[i] // вторая производная

L1 L1+R1*Y[i] // первая производная

L L+R*Y[i] // значение полинома Ln(x) end for

end proc

П р и м е р. Функция y = ln(x) задана таблицей

x 1.0 1.1 1.2 1.3

y 0.00000 0.09531 0.18232 0.26236

Вычислить y(x), y′(x), y′′(x), при x = 1.17. В данном случае n = 3. После

выполнения алгоритма получим L = 0.15701, L1 = 0.85454, L2 = – 0.73690. Для

сравнения: точные значения логарифма и его производных в рассматриваемой

точке равны, соответственно, 0.15700, 0.85470, – 0.73051.

РЕПОЗИТОРИЙ БГ

ПУ

Page 54: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

56

Полином Ньютона и его производные

Продифференцируем интерполяционный полином Ньютона:

N(x) = y0 + [x0; x1](x – x0)+ [x0; x1; x2](x – x0)(x – x1) + …

N′(x) = [x0; x1] + [x0; x1; x2](2x – x0 – x1) + …

N′′(x) = 2[x0; x1; x2] + …

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

женные выражения для производных. Наиболее простые расчетные формулы

дают первые слагаемые:

1 0 1 02 10 1 0 1 2

1 0 2 0 2 1 1 0

2( ) [ ; ] , ( ) 2[ ; ; ]

y y y yy yy x x x y x x x x

x x x x x x x x

.

Они годятся для любого (переменного) шага таблицы функции. Если шаг

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

членов ряда. Для случая равноотстоящих узлов будем иметь:

, где ,!2

)1()( 0

02

01

0h

xxqy

qqyqyxN

),6

263

2

12(

1)( 0

32

02

01

y

qqy

qy

hxN

))1((1

)( 03

02

2 yqy

hxN .

Отбрасывая все члены ряда, кроме первого, и выражая конечные разности

через узловые значения функции, получим такие выражения для

производных:

2

012

2

01

11

2

02

0101 2

)( ,)(h

yyy

h

yy

h

yxy

h

yy

h

yxy

.

Эти несложные формулы обычно применяют для определения производ-

ных в узловых точках xi. Выберем x0 и занумеруем узлы в порядке:

… x–2, x–1, x0, x1, x2, …

Если возьмем три соседних узла x–1, x0, x1 , то получим выражения первой

и второй производных для центрального узла x0:

2

1010

110

2)( ,

2)(

h

yyyxy

h

yyxy

.

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

определения производной в средней точке отрезка [xi, xi+1]:

РЕПОЗИТОРИЙ БГ

ПУ

Page 55: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

57

h

yyxy

hxx iii

1** )(,

2.

Аналогично выводят формулы для большего числа смежных узлов (реко-

мендуется использовать не более 3 – 5 узлов). Например, для пяти узлов полу-

чим выражения:

2

210120

21120

12

163016)( ,

12

88)(

h

yyyyyxy

h

yyyyxy

.

А л г о р и т м А7.2. (Производные в узлах табличной функции).

В х о д: n ≥ 2, X[0: n], Y[0: n]. Массив X содержит значения xi, массив

Y – значения f(xi), i = 0, 1, … , n.

В ы х о д: P1[0: n], P2[1: n–1]. Массивы P1, P2 содержат значения пер-

вой и второй производных в узловых точках xi, полученные по формулам для

трех смежных узлов. На концах отрезка [x0, xn] положим

h

yyxy

h

yyxy nn

n101

0 )( ,)(

.

proc Diff2(n,X,Y,P1,P2)

h (X[n]-X[0])/n // шаг таблицы

P1[0] (Y[1]-Y[0])/h // для узла x0

for i 1 to n-1 do

P1[i] (Y[i+1]-Y[i-1])/(2*h)

P2[i] (Y[i+1]-2*Y[i]+Y[i-1])/(h*h)

end for

P1[n] (Y[n]-Y[n-1])/h // для узла xn

end proc

П р и м е р. Функция 3 xy задана в равноотстоящих узлах таблицей

x 1.0 1.2 1.4 1.6 1.8 2.0

y 1.00000 1.06266 1.11869 1.16961 1.21644 1.25992

Найти первую и вторую производные в узловых точках. Результаты вы-

полнения алгоритма даны в табл. 7.1. Для сравнения там же приведены

(с точностью до трех знаков) значения производных

3 53 2 9

2)( ,

3

1)(

xxy

xxy .

Таблица 7.1

x 1.0 1.2 1.4 1.6 1.8 2.0

P1 0.313 0.297 0.267 0.244 0.226 0.217

РЕПОЗИТОРИЙ БГ

ПУ

Page 56: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

58

y′(x) 0.333 0.295 0.266 0.244 0.225 0.210

P2 –0.166 –0.128 –0.102 –0.084

y′′(x) –0.164 –0.127 –0.102 –0.083

8. Поиск максимума функции одной переменной

П о с т а н о в к а з а д а ч и. Для заданной функции y = f(x), a ≤ x ≤ b

требуется найти точку ее локального максимума. В общем случае f(x) может

иметь несколько таких точек. В дальнейшем считаем, что в пределах отрезка

[a, b] у f(x) есть только один максимум.

Метод деления пополам

Для нахождения максимума f(x) на [a, b] применим такую схему:

5. Берем две симметрично расположенные относительно середины от-

резка [a, b] точки 2

1TOLba

x

,2

2TOLba

x

, где 02

b aTOL

;

6. Выбираем ту часть отрезка, где находится максимум: если

f(x1)≤ f(x2), то в пределах [a, x1] точка максимума находиться не может, и по-

этому полагаем a = x1, в противном случае она не может находиться на

[x2, b], и поэтому берем b = x2;

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

симума, не станет меньше 2TOL;

8. За точку локального максимума приближенно принимаем середину

полученного отрезка [a, b].

А л г о р и т м А8.1. (Метод деления пополам).

В х о д: f(x), a, b, TOL, где a, b – границы отрезка, a < b, TOL – требуемая

точность.

В ы х о д: m, fmax, iter. Здесь m – точка локального максимума функции

f(x), fmax = f(m), iter – количество итераций.

proc Bisect(f,a,b,TOL,m,fmax,iter)

iter 0

while abs(b-a)>2*TOL do

iter iter+1 // количество итераций

x1 (a+b-TOL)/2 x2 (a+b+TOL)/2

if f(x1)≤f(x2) then

a x1 // выбираем отрезок [x1, b] else

b x2 // выбираем отрезок [a, x2] end if

РЕПОЗИТОРИЙ БГ

ПУ

Page 57: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

59

end while

m (a+b)/2 fmax f(m)

end proc

З а м е ч а н и я. Поиск максимума де-

лением пополам сходится при любой

ширине отрезка [a, b]. В общем случае

f(x) может быть как непрерывной, так и

разрывной.

Если требуется найти минимум

f(x), то применяем этот же метод к

функции – f(x).

П р и м е р. Применим алгоритм

для поиска с точностью 10–3

локального

максимума функции y = –x3+x/3–e

–x на

[0, 1]. В данном случае TOL = 0.001, a

= 0, b = 1. После 10 итераций получим

m = 0.550, fmax = – 0.55. Для

a = – 4, b = – 3 найдем вторую точку m = – 3.716, при этом fmax = 8.975. Гра-

фик функции f(x) показан на рис. 8.1.

Метод золотого сечения

Золотым сечением называется деление отрезка [a, b] на две неравные ча-

сти так, что отношение длины всего отрезка к длине большей части равно от-

ношению длины большей части к длине меньшей части отрезка. Рассмотрим

две симметрично расположенные относительно середины [a, b] точки

21 ( ) 0.382( ),

3 5

22 ( ) 0.618( ).

1 5

x a b a a b a

x a b a a b a

(1)

Нетрудно проверить, что каждая из них делит отрезок по правилу золото-

го сечения. При этом x1 дает золотое сечение не только отрезка [a, b], но и [a,

x2]. Точно так же x2 дает золотое сечение не только [a, b], но и [x1, b].

В отличие от алгоритма метода деления пополам, в алгоритме метода зо-

лотого сечения x1, x2 вычисляются по формулам (1). На каждой итерации до-

статочно вычислить только одно значение функции f(x).

А л г о р и т м 8.2. (Метод золотого сечения).

В х о д: f(x), a, b, TOL, где a, b – границы отрезка, a < b.

В ы х о д: m, fmax, iter. Здесь m – точка локального максимума функции

Рис. 8.1

РЕПОЗИТОРИЙ БГ

ПУ

Page 58: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

60

f(x), fmax = f(m), iter – количество итераций.

В с п о м о г а т е л ь ы е п е р е м е н н ы е: x1, x2, f1 = f(x1), f2 = f(x2). proc GoldSect(Input(f,a,b,TOL)Output(m,fmax,iter))

iter 0

x1 a+0.382*abs(b-a) f1 f(x1)

x2 a+0.618*abs(b-a) f2 f(x2) while abs(b-a)>2*TOL do

iter iter+1 // количество итераций if f1≤f2 then

a x1 x1 x2 f1 f2

x2 a+0.618*abs(b-a)

f2 f(x2) else

b x2 x2 x1 f2 f1

x1 a+0.382*abs(b-a)

f1 f(x1) end if

end while

m (a+b)/2 fmax f(m)

end proc

П р и м е р. Определить на [0, 1] максимум функции y = –x3+x/3–e

–x, если

TOL = 0.001. В данном случае a = 0, b = 1. После 13 итераций алгоритма полу-

чим m = 0.551, fmax = – 0.56. Для a = – 4, b = – 3 найдем вторую точку m = –

3.715, при этом fmax = 8.975 (рис. 8.1).

9. Задача Коши для обыкновенных дифференциальных

уравнений

П о с т а н о в к а з а д а ч и. К обыкновенным дифференциальным урав-

нениям относятся уравнения, которые содержат неизвестную функцию и ее

производные. Рассмотрим простейшее такое уравнение первого порядка

y′ = f(x, y). (1)

В общем случае уравнение будет иметь семейство решений. Задача

Коши1 заключается в отыскании функции y(x), которая удовлетворяет

1 Огюстен Луи Коши (Cauchy, 1789 – 1857) – французский математик, работы которо-

го относятся к математическому анализу и математической физике.

РЕПОЗИТОРИЙ БГ

ПУ

Page 59: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

61

уравнению (1) и начальному условию y(x0) = y0. График решения дифференци-

ального уравнения называется интегральной кривой. Задача Коши геометриче-

ски определяет интегральную кривую, которая проходит через заданную точку

(x0, y0). Решить задачу численно – значит найти приближенные значения функ-

ции y(x) на некотором множестве точек (узлов) x0 < x1 < …< xn. Ответ получает-

ся в виде таблицы yi = y(xi), i = 0, 1, … , n–1.

Метод Эйлера

Метод Эйлера1 является одним из самых простых приемов численного

решения дифференциальных уравнений. Однако он имеет сравнительно низкую

точность.

Приближенно заменим производную в левой части уравнения (1) на от-

ношение h

xyhxy )()( при малых значениях h. Для x = x0 получим разност-

ное уравнение ),()()(

0000 yxf

h

xyhxy

. Отсюда y(x1) = y(x0) + hf(x0, y0), где

x1 = x0 + h. Теперь приближенное решение в точке x1 можно вновь рассматри-

вать как начальное условие и найти значение функции y(x) в следующей точке

x2 = x1 + h и т. д. В общем случае последовательные значения yi вычисляются

по рекуррентной формуле

yi+1 = yi + hf(xi, yi), i = 0, 1, … , n–1.

А л г о р и т м 9.1. (Метод Эйлера).

В х о д: f(x, y), x0, y0, n, h. Здесь h – шаг по x, y0 – значение неизвестной

функции y(x) в точке x0.

В ы х о д: X[0: n], Y[0: n]. Массив X содержит значения xi, массив

Y – значения yi = y(xi). proc Euler1(f,x0,y0,n,h,X,Y)

X[0] x0 Y[0] y0

for i 0 to n-1 do

X[i+1] X[i]+h

Y[i+1] Y[i]+h*f(X[i],Y[i])

end for

end proc

1 Леонард Эйлер (Euler, 1707 – 1783) – математик, физик, астроном. Родился в Швей-

царии, с 1726 г. работал в России.

РЕПОЗИТОРИЙ БГ

ПУ

Page 60: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

62

П р и м е р. Применяя метод Эйлера, найти решение уравнения y′ = xy с

начальным условием y(0) = 1, выбрав h = 0.1, n = 8. Результаты выполнения ал-

горитма приведены в табл. 9.1, в нижней строке которой для сравнения даны

значения точного решения 2

2x

e . График функции y(x) вместе с табличными

значениями показан на рис. 9.1. Таблица 9.1

i 0 1 2 3 4 5 6 7

x 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7

y 1.00 1.00 1.01 1.03 1.06 1.10 1.16 1.23

y(x) 1.00 1.01 1.02 1.05 1.08 1.13 1.20 1.28

Рис. 9.1 Метод Эйлера распространяется на системы обыкновенных дифферен-

циальных уравнений и на дифференциальные уравнения высших порядков.

Рассмотрим систему уравнений первого порядка:

),,,(

),,,(

),,,(

1

122

111

mmm

m

m

yyxfy

yyxfy

yyxfy

с начальными условиями y1(x0) = y10, y2(x0) = y20, … ym(x0) = ym0. Приближенные

решения вычисляются последовательно по формулам:

y1,i+1 = y1,i+hf1(xi, y1,i, … ,ym,i), … , ym,i+1 = ym,i+hfm(xi, y1,i, … ,ym,i).

Дифференциальные уравнения более высокого порядка

y(m)

= f(x, y, y’, … ,y(m–1)

)

с помощью замены y = y1, y′ = y2, y′′ = y3, … , y(m–1)

= ym можно записать в виде

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

),,,,( ,,, , 2113221 mmmm yyyxfyyyyyyy .

П р и м е р. Применяя метод Эйлера, найти решение уравнения

0

yx

yy с начальными условиями y(1) = 0.77, y′(1) = – 0.44. В данном

РЕПОЗИТОРИЙ БГ

ПУ

Page 61: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

63

случае после замены y = y1, y′ = y2 имеем систему 12

221 , yx

yyyy с

начальными условиями y1(1) = 0.77, y2(1) = – 0.44. Полагая, что h = 0.1, n = 5,

получим следующую таблицу значений функций y1 = y(x) и y2 = y′(x):

Таблица 9.2

i 0 1 2 3 4 5

x 1.0 1.1 1.2 1.3 1.4 1.5

y1 0.77 0.73 0.68 0.63 0.58 0.52

y2 -0.44 -0.47 -0.50 -0.53 -0.55 -0.57

Неявная схема метода Эйлера

Приближенно заменим производную в уравнении y′ = f(x, y) отношением

h

hxyxy )()( при малых h. Для x = x1 получим разностное уравнение

),()()(

1111 yxf

h

hxyxy

. Отсюда y(x1) = y(x0) + hf(x1, y1), где x0 = x1 – h.

В общем случае последовательные значения y(x) связаны отношением

yi+1 = yi + hf(xi+1, yi+1), i = 0, 1, … , n–1.

Чтобы определить yi+1 как неявную функцию, приходится использовать

один из итерационных методов решения нелинейных уравнений (например, ме-

тод простых итераций)

),()1(

11)(1

siii

si yxhfyy , s = 1, 2… .

Обычно достаточно сделать две-три итерации для достижения заданной

погрешности TOLyysi

si

)1(1

)(1 . За начальное приближение берется значение

ii yy )0(1 с предыдущего шага.

Еще одна, более точная неявная схема метода определяется формулой

)),(),((2

)1(11

)(1

siiiii

si yxfyxf

hyy , s = 1, 2… .

А л г о р и т м 9.2. (Неявная схема метода Эйлера).

В х о д: f(x, y), x0, y0, n, h, TOL. Здесь h – шаг по x, y0 – значение неиз-

вестной функции y(x) в точке x0.

В ы х о д: X[0: n], Y[0: n]. Массив X содержит значения xi, массив

Y – значения yi = y(xi).

В с п о м о г а т е л ь н ы е п е р е м е н н ы е: y, ys, yss. Переменная ys

хранит значения )(s

iy , переменная yss – значения )1( s

iy .

РЕПОЗИТОРИЙ БГ

ПУ

Page 62: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

64

proc Euler1(f,x0,y0,n,h,X,Y)

X[0] x0 Y[0] y0

x x0 ys y0

for i 0 to n-1 do

// метод простых итераций для нахождения yi+1

yss ys

y ys+h*f(x+h,yss)

while abs(y-yss)>TOL do

yss y

y ys+h*f(x+h,yss)

end while

x x+h

X[i] x Y[i] y ys y

end for

end proc

П р и м е р. Для дифференциального уравнения y = –2y – 3 sin(x) с

начальным условием y(0) = 3 составить таблицу значений функции y(x) на от-

резке [0, 0.8] с шагом h = 0.1. Результаты применения алгоритма к этой задаче

представлены в табл. 9.3. Таблица 9.3

i 0 1 2 3 4 5 6 7 8

x 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8

y 3.000 2.441 1.956 1.533 1.161 0.832 0.538 0.275 0.040

Метод Рунге–Кутты

Наиболее известным, широко применяемым на практике методом реше-

ния задачи Коши, является метод Рунге–Кутты1. Он более точен, чем метод

Эйлера. Однако для перехода от точки xi к xi+1 требуется четыре раза вычислить

значение функции f(x, y):

1 1 2 3 4

11 2

23 4 3

1( 2 2 ), где

6

( , ), ( , ),2 2

( , ), ( , ).2 2

i i

i i i i

i i i i

y y k k k k

khk hf x y k hf x y

khk hf x y k hf x h y k

1 Карл Давид Рунге (Runge, 1856 – 1927) – немецкий физик и математик.

Вильгельм Кутта (Kutta, 1867 – 1944) – немецкий математик.

РЕПОЗИТОРИЙ БГ

ПУ

Page 63: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

65

А л г о р и т м 9.3. (Метод Рунге–Кутты)

В х о д: f(x, y), x0, y0, n, h; Здесь n – количество узлов, h – шаг по x, y0 –

значение неизвестной функции y(x) в точке x0.

В ы х о д: X[0: n], Y[0: n]. Массив X содержит значения xi, массив

Y – значения yi = y(xi).

proc RKMetod(f,x0,y0,n,h,X,Y)

X[0] x0 Y[0] y0

for i 0 to n-1 do

K1 h*f(X[i],Y[i])

K2 h*f(X[i]+h/2,Y[i]+K1/2)

K3 h*f(X[i]+h/2,Y[i]+K2/2)

K4 h*f(X[i]+h,Y[i]+K3)

X[i+1] X[i]+h

Y[i+1] Y[i]+(K1+2*K2+2*K3+K4)/6

end for

end proc

П р и м е р. Применяя метод Рунге–Кутты, найти решение уравнения

y′ = xy

с начальным условием y(0) = 1, выбрав h = 0.1, n = 6. Результаты вы-

полнения алгоритма приведены в табл. 9.4. Полученное решение очень хорошо

согласуется с точным решением 2

2x

e , которое содержатся в табл. 9.1. График

функции y(x) – на рис. 9.2. Таблица 9.4

i 0 1 2 3 4 5

x 0 0.1 0.2 0.3 0.4 0.5

y 1.000000 1.005013 1.020201 1.046028 1.083287 1.133148

Рис. 9.2

РЕПОЗИТОРИЙ БГ

ПУ

Page 64: АЛГОРИТМЫ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ B C B L H J …elib.bspu.by/bitstream/doc/7450/1/Алгоритмы вычислительной... · Если

66

Литература

1. Амосов А. А., Дубинский Ю. А., Копченова Н. В. Вычислительные

методы для инженеров: Учеб. пособие. М., 1994.

2. Бахвалов Н., Жидков Н., Кобельков Г. Численные методы.

М.,СПб, 2001.

3. Быкадоров Ю. А., Кузнецов А. Т., Шербаф А. И. Информатика и вы-

числительная математика: Учеб. пособие для 10–11-х кл. общеобразоват. шк. с

повыш. уровнем изуч. информатики. Мн., 1997.

4. Васильков Ю. В., Василькова Н. Н. Компьютерные технологии

вычислений в математическом моделировании. М., 2001.

5. Воробьева Г. Н., Данилова А. Н. Практикум по вычислительной

математике. М., 1990.

6. Голуб Дж., Ван Лоун И. Матричные вычисления. М., 1999.

7. Гринчишин Я. Т., Ефимов В. И, Ломакович А. Н. Алгоритмы и про-

граммы на Бейсике: Учеб. пособие для студ. пед. ин-тов по физ.-мат. спец. М.,

1988.

8. Дьяконов В. П. Справочник по алгоритмам и программам на языке

бейсик для персональных ЭВМ. М., 1989.

9. Калиткин Н. Н. Численные методы. М., 1978.

10. Каханер Д., Моулер К., Нэш С. Численные методы и программное

обеспечение. М., 1998.

11. Копченова Н. А., Марон И. А. Вычислительная математика в приме-

рах и задачах. М., 1972.

12. Крылов В. И. Приближенное вычисление интегралов. М., 1967.

13. Мудров А. Е. Численные методы для ПЭВМ на языках Бейсик, Форт-

ран и Паскаль. Томск, 1991.

14. Мулярчик С. Г. Численные методы: Конспект лекций. Мн., 2001.

15. Мэтьюз Д., Финк К. Д. Численные методы. Использование MATLAB.

М., 2001.

16. Самарский А. А., Вабищевич П. Н., Самарская Е. А. Задачи

и упражнения по численным методам: Учеб. пособие. М., 2000.

17. Сборник задач по методам вычислений / Под ред. П. И. Монастырно-

го. Мн., 1983.

18. Синицын А. К, Навроцкий А. А. Практикум по курсу «Алгоритмы

вычислительной математики» для студентов 1–2-го курсов всех специально-

стей. Мн., 2000.

19. Тихонов А. Н., Костомаров Д. П. Рассказы о прикладной математике.

М., 1979.

20. Шэрбаф А. I., Марозаý А. А, Нашкевiч А. У. Праграмна-метадычны

комплекс па курсу «Вылiчальныя метады». Мн., 1998.

РЕПОЗИТОРИЙ БГ

ПУ