close

Вход

Забыли?

вход по аккаунту

?

Shaporev 05A7B321B2

код для вставкиСкачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное
образовательное учреждение высшего образования
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ
С. Д. Шапорев
ЧИСЛЕННЫЕ МЕТОДЫ
ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ
Учебное пособие
Санкт-Петербург
2017
УДК 519.61
ББК 22.193
Ш24
Рецензенты:
доктор технических наук, профессор О. С. Ипатов;
кандидат физико-математических наук, профессор Б. П. Родин
Утверждено
редакционно-издательским советом университета
в качестве учебного пособия
Шапорев, С. Д.
Ш24 Численные методы вычислительной математики: учеб.
пособие / С. Д. Шапорев. – СПб.: ГУАП, 2017. – 278 с., ил.
ISBN 978-5-8088-1179-9
В пособии рассматриваются основные вычислительные методы,
наиболее часто используемые в практике инженерных расчетов по
специальностям выпускающих кафедр ГУАП: методы теории приближения функций, численное дифференцирование и интегрирование, методы решения задач линейной алгебры и нелинейных систем
уравнений, решение обыкновенных дифференциальных уравнений и
систем дифференциальных уравнений.
Большое внимание уделяется практической работе с описанными алгоритмами, предлагаются лабораторные работы по всем изучаемым темам, написанные в математических пакетах Mathcad и
Matlab. Каждая лабораторная работа включает серию индивидуальных заданий.
Пособие предназначено для студентов дневного, вечернего и заочного отделений. Его использование поможет активизировать самостоятельную работу студентов по курсу «Вычислительная математика»
и даст возможность преподавателям контролировать индивидуальную работу студентов в течение всего семестра.
УДК 519.61
ББК 22.193
ISBN 978-5-8088-1179-9
©
©
Шапорев С. Д., 2017
Санкт-Петербургский государственный
университет аэрокосмического
приборостроения, 2017
1. ЭЛЕМЕНТАРНАЯ ТЕОРИЯ ПОГРЕШНОСТЕЙ;
ВЫЧИСЛИТЕЛЬНЫЕ ЗАДАЧИ, МЕТОДЫ И АЛГОРИТМЫ
Инженерные вычислительные задачи в настоящее время решаются с помощью ЭВМ и имеют некоторые характерные особенности:
1) ярко выраженная практическая направленность: необходимость доведения результатов до конкретных чисел;
2) большой объем вычислительных работ;
3) сложность математических моделей процессов;
4) широкое использование готовых вычислительных методов.
При решении задач пункт три имеет определяющее значение.
Математическая модель – это приближенное описание исследуемого процесса на языке математики. Для любой задачи математическая модель никогда не бывает полностью адекватной. Сам процесс построения моделей всегда протекает итеративно, модель при
исследовании непрерывно усложняется, происходит ее подгонка и
адаптация, улучшение качества. Решение инженерной задачи с помощью ЭВМ обычно содержит следующие этапы [1]:
1) постановка задачи;
2) выбор математической модели;
3) постановка вычислительной задачи;
4) анализ вычислительных свойств вычислительной задачи;
5) выбор или создание нужного численного метода;
6) алгоритмизация и программирование;
7) обработка и интерпретация результата;
8) использование результата и коррекция математической модели.
§ 1.1. Источники и классификация погрешностей
результата численного эксперимента
Точный результат решения получить численно невозможно, он
всегда содержит погрешность, то есть является приближенным. Наличие погрешности решения обусловлено следующими причинами
[1, 2].
1. Математическая модель всегда приближенна. Характеристики истинного процесса всегда отличаются от модельных характеристик.
2. Исходные данные всегда содержат погрешность, ибо результат
эксперимента неизбежно получается с ошибкой.
3. Теоретические и численные методы решения задач являются
приближенными. Лишь решение тривиальной задачи можно получить в виде конечной формулы.
3
4. При вводе и выводе с ЭВМ производятся округления. Такие же
округления производятся и при вычислениях.
Если y – точное значение вычисляемой величины, то это значение содержит следующие погрешности: δнy неустранимая погрешность (пункты 1 и 2), δмy – погрешность метода (пункт 3),
δвy – вычислительная погрешность (пункт 4). Таким образом,
δy = y–y* = δнy + δвy + δвy. Не следует думать, что δнy совершенно неизвестна. Конечно, она не известна точно, но ее можно оценить приближенно, адаптируя модель к изучаемому процессу, δмy должна
быть примерно на порядок меньше δнy, а δвy на порядок меньше δвy.
В этом случае достигается разумный компромисс и повышается достоверность конечного результата.
§ 1.2. Погрешности чисел
Пусть a – точное и неизвестное значение некоторой величины, а
a* – ее известное приближенное значение.
Ошибкой (или погрешностью) приближенного значения числа a*
называется разность a–a*. Количественной мерой ошибки является
абсолютная погрешность
( )
∆ a∗ =
a − a∗ . (1.2.1)
По ней не всегда можно сделать правильное заключение о качестве приближения. Для этого вводится понятие относительной погрешности.
Относительной погрешностью приближенного значения числа a*
называется
( )
a − a∗ ∆ a∗
=
ä=
a
.
a
a
( )
∗
(1.2.2)
Эта погрешность не зависит от масштаба величины единицы
измерения. Непосредственное вычисление по формулам (1.2.1) и
(1.2.2) невозможно, так как a неизвестно. Часто задают величины
a − a∗
∆ a ∗ ≥ a − a∗ , δ a ∗ ≥
− верхние границы погрешностей и
a
полагают
( )
( )
( )≈
ä a
4
∗
( ),
∆ a∗
a∗
( )
( )
∆ a∗ ≈ a∗ ⋅ ä a∗ . (1.2.3)
При записи приближенных чисел руководствуются следующими правилами. Пусть a* задано в виде конечной десятичной дроби
a∗ =α n α n −1...α 0 .β 1β 2 ...β m .
Значащими цифрами числа a* называются все цифры в его записи, начиная с первой ненулевой слева. Например,
 a1∗ = 2.173,

∗
 a2 = 0.0103, все значащие цифры подчеркнуты.
 ∗
a3 = 0.01035600.
Значащую цифру числа a* называют верной, если абсолютная
погрешность числа не превосходит единицы разряда, соответствующего этой цифре.
2 ⋅ 10−5. Тогда a* имеет три верные
Пусть a∗ = 0.032105 и ∆ a∗ =
значащие цифры (они подчеркнуты). Если бы ∆ a∗ < 1 ⋅ 10−5 , было
бы четыре верные значащие цифры. Число верных значащих цифр
тесно связано с величиной относительной погрешности числа. Имеют место следующие результаты.
Теорема 1.1. Если a* содержит N верных значащих цифр, то
( )
( )
( ) (
δ a∗ ≤ 10N −1 − 1
)
−1
≈ 10− N +1.
Теорема 1.2. Для того чтобы число a* содержало
зна−1 N верных
≈ 10− N.
чащих цифр, достаточно, чтобы δ a∗ ≤ 10N + 1
Если a* имеет ровно N значащих цифр, то
Теорема 1.3.
( ) (
( )
)
( )
10− N −1 ≤ δ a∗ ≤ 10− N +1, т. е. δ a∗ ≈ 10− N.
Эти теоремы позволяют оценивать δ(a*) по числу значащих цифр
и наоборот. Например, если дано a∗ = 0.364001, то есть a* имеет
( )
шесть значащих цифр, то ε =δ a∗ ≈ 10−6.
При округлении возникает погрешность, называемая погрешностью округления. Существуют два способа округления.
1. Усечение – отбрасывание всех цифр, расположенных правее
n-й значащей цифры. При этом погрешность ε не превышает (достигает) единицы того же разряда.
2. Округление по дополнению. Это следующее правило: если первая цифра слева от отбрасываемых меньше пяти, то лишнее просто
отбрасывается, как при усечении; если же первая цифра слева от
5
отбрасываемых больше или равна пяти, то в младший сохраняемый
разряд добавляется единица. Абсолютная величина погрешности
по дополнению не превышает половины единицы последней оставляемой значащей цифры.
§ 1.3. Погрешности арифметических операций
Теорема 1.4. Абсолютная погрешность алгебраической суммы
не превосходит суммы абсолютных погрешностей слагаемых, то
есть
(
) ( ) ( )
∆ a∗ ± b∗ ≤ ∆ a∗ + ∆ b∗ .
Доказательство
Запишем формулу для абсолютной погрешности алгебраической
суммы двух величин по определению и воспользуемся свойствами
модуля. Получим сразу необходимый результат
(
)
∆ a∗ ± b∗ =
( a ± b ) − ( a∗ ± b∗ ) =
( a − a∗ ) ± ( b − b∗ ) ≤ a − a∗ + + b − b∗ = ∆ ( a∗ ) + ∆ ( b∗ ).
(1.3.1)
Теорема 1.5. Пусть a и b – ненулевые числа одного знака. Тогда
(
)
δ a∗ + b∗ ≤ δ
max ,
(
)
δ a∗ − b∗ ≤ ϑ⋅ δ
{ ( ) ( )}
∗
∗
δ=
=
, ϑ
max max δ a , δ b
max ,
a+b
.
a−b
(1.3.2)
Доказательство|
Поступим так же, как и в предыдущей теореме. Выразим абсолютную погрешность через относительную:
(
)
(
) ( ) ( )
∆ a∗ ± b∗ = a ± b δ a∗ ± b∗ ≤ ∆ a∗ + ∆ b∗ =
( )
( )
max = a + b δ max .
∆ ( a∗ + b∗ ) a + b δ
max
.
=
=
=
δ
= a δ a∗ + b δ b∗ ≤ ( a + b ) δ
(
δ a∗ + b∗
(
)
δ a∗ − b∗ =
6
)
(
a+b
∆ a∗ − b∗
a−b
)=
a+b
a+b δ
max
a−b
=
max
(1.3.3)
a+b
a−b
δ
max .
Из последних двух равенств видно, что при вычитании двух
близких чисел может произойти катастрофическая потеря точности, так как при |a-b|→0 в последней формуле δ(a*-b*)→∝.
Теорема 1.6. Для относительных погрешностей произведения и
частного приближенных чисел верны следующие оценки:
(
) ( ) ( ) ( ) ( )
 a  δ (a ) + δ (b )
δ  ≤
.
b 
1 − δ (b )
 
δ a∗ ⋅ b∗ ≤ δ a∗ + δ b∗ + δ a∗ ⋅ δ b∗ , ∗
∗
(1.3.4)
∗
∗
∗
Доказательство
Первая требуемая формула получается традиционным путем:
(
) ( )
=( a − a∗ ) b + ( b − b∗ ) a − ( a − a∗ )( b − b∗ ) ≤ b ∆ ( a∗ ) + a ∆ ( b∗ ) + ∆ ( a∗ ) ∆ ( b∗ ) =
 b ∆ a∗
a ∆ ( b∗ ) ∆ ( a∗ ) ∆ ( b∗ ) 
(
)

=
a⋅b
+
+
⋅
=
ab δ a∗b∗ =
∆ a∗b∗ =
ab − a∗b∗ =


a⋅b
a
b 
 a⋅b


∗
∗
∗
∗
= a ⋅ b δ a + δ b + δ a ⋅ δ b  .


( ) ( ) ( ) ( )
Для вывода второй оценки предварительно получим, используя
свойства модуля, следующую формулу:
(
)
( )
( )
b∗ = b + b∗ − b ≥ b − ∆ b∗ = b ⋅ 1 − δ b∗  .


Тогда
a a∗
−
b b∗
 a∗ 
δ  ∗ =
b 
 
a
b
≤
=
ab∗ − ba∗
ab∗
=
(
) (
a b∗ − b + b a − a∗
ab∗
)≤
( )
δ ( a∗ ) + δ ( b∗ )
( )=
.
1 − δ ( b∗ )
ab ⋅ 1 − δ ( b∗ ) 


a ∆ b∗ + b ∆ a∗
7
Если δ(b*)<<1, а δ(a*)≤1, то для оценки границ относительных погрешностей можно использовать следующие приближенные равен a∗ 
ства δ a∗b∗ ≈ δ  ∗  ≈ δ a∗ + δ b∗ . Чаще всего на практике делаb 
 
ют именно так.
(
)
( ) ( )
§ 1.4. Погрешности функций [3]
( )
Пусть f x = f ( x1, x2 ,..., xn ) – функция n – переменных, дифференцируемая в рассматриваемой области (например, на отрезке [x,
x*]).
Теорема 1.7. Для абсолютной погрешности значения y∗ = f x∗
справедлива следующая формула:
( )
( )
n
( )
∆ y∗ ≤ ∑ max fx/ ⋅ ∆ x∗j . ∗
j =1  x,x 
j
(1.4.1)
Доказательство
Вспомним сначала формулу Тейлора1 для функции нескольких переменных. Для функции одного переменного разложение
в окрестности точки x* будет иметь вид
( ) x − x∗ + f // ( x∗ ) x − x∗ 2 + ...
( ) 2! ( )
1!
f / x∗
( )
n −1
f ( ) ( x∗ )
n −1
+
+ Rn ( θ ), θ ∈ ( x, x∗ ).
x − x∗ )
(
( n − 1) !
f ( x )= f x∗ +
Для функции n переменных форма записи формулы Тейлора
остается точно такой же, если вместо производных записать дифференциалы соответствующих порядков:
( )
∆=
f x
( )
( )
( )
где
n
 ∂

∂
∂
dn=
f x 
dx1 +
dx2 + ... +
dxn  f x .
∂
∂
∂
x
x
x
n
2
 1

( )
1
8
()
1
1
1
df x∗ + d2 f x∗ + ... +
dn −1f x∗ + Rn θ .
n
−
1!
2!
1
!
(
)
Брук Тейлор (1685–1731) – английский математик.
( )
Например, для функции двух переменных
(
)
f=
( x1, x2 ) f x1∗, x2∗ +
n −1
(
)
(
(
)(
k
)
(
)
1
∂ 
∗ ∂
∗ ∗
+ x2 − x2∗
 x1 − x1
 f x1 , x2 + Rn θ =
!
∂
∂
k
x
x
1
2
k =1 
+∑
(
)
= f x1∗ , x2∗ +
)
(
()
)(
)
1 ∂
1 ∂
f x1∗ , x2∗ x1 − x1∗ +
f x1∗ , x2∗ x2 − x2∗ +
1! ∂x1
1! ∂x2
1 ∂2
f x1∗ , x2∗ x1 − x1∗
2 ! ∂x12
(
)(
+
)
2
+
1 ∂2
f x1∗ , x2∗ x1 − x1∗ x2 − x2∗ +
2 ! ∂x1∂x2
(
1 ∂2
f x1∗ , x2∗ x2 − x2∗
2 ! ∂x22
(
)(
)(
)
2
)(
)
+ ...
Отбрасывая все члены второго порядка и выше, получим
(
) ( )
(
)(
)
(
)(
)
f ( x1, x2 ) − f x1∗ , x2∗ =
∆ y∗ ≈ fx/ x1∗ , x2∗ x1 − x1∗ + fx/ x1∗ , x2∗ x2 − x2∗ .
1
2
Таким образом, искомая формула сразу вытекает из формулы
Лагранжа1. Если x − x∗ достаточно мало, то для предельных значений погрешностей можно положить
( )
∆=
y∗
n
y )
( x ) ∆ ( x ) èëè ∆ (=
n
∗
∗
fx/
j
j
j 1=j 1
∑ fx/j
∗
∑
( x ) ∆ ( x∗j ) .
Для относительных погрешностей тогда имеем следующие формулы:
nn
( )( )
( )
nn
( ) ( )
( )
∗ /
∗
∑ xx∗jj ffxx/jj xx∗ ∆∆ xx∗j∗j
∗∗
∗∗
∆
y
∆
y
j
∆
y
∆
y
=
=
∗=
jj 11=
jj 11
δδ yy∗ ==
==
==
==
⋅⋅
==
∗∗
y
∗
∗
∗
∗
y
∗
∗
∗
∗
x
x
jj
ff xx
ff xx ⋅⋅ xxjj
ff xx
( ) ( )
( )
( )
==
nn
/
∗
∗
∗
∑ ffxx/ j xx∗ ∆∆ xx∗jj ⋅⋅ xx∗jj
nn
ãäå ϑϑj=j=
∑ϑϑ ∗j∗jδδ (xx∗j∗j ) ,, δδ (yy∗∗ =)= ∑ϑϑjjδδ (xx∗j∗j ),, ãäå
=
=
jj 11=
jj 11
=
/
xxjj ffxx/ j ((xx))
j
ff((xx))
.. (1.4.2)
1 Жозеф Луи де Лагранж (1736–1813) – французский математик, механик и
астроном.
9
I частный случай. Функция y = f(x) – функция одного переменного. Здесь следует положить n = 1, тогда ∆ y∗ ≈ f / x∗ ∆ x∗ или
∆ y∗ ≈ f / ( x ) ∆ x∗ . Для относительных погрешностей все аналогично:
( )
( )
( )
( )
( )
x∗ f / x∗
ϑ =
, δ y∗ =ϑ ∗ δ x∗ ∗
f x
∗
( ) ( )
или ϑ =
x f/ (x)
f (x)
( )
( )
( )
( )
, δ y∗ = ϑ δ x∗ .
(1.4.3)
( )
II частный случай. Функция F x, y = 0 – неявная. Этот случай
отличается от исходного только формулой для нахождения частных
производных:
fx/
j
(x) =
( )
( x,y=
) y f=
x , j 1,2,...n.
− Fx/ x, y
j
Fy/
( )
Пример 1. Пусть корни квадратного уравнения x2 + bx + c = 0 вычисляются при коэффициентах b≈103, c≈1. Каково влияние погрешностей задания коэффициентов на точность вычисляемых значений?
Решение
Договоримся сразу, чтобы избежать путаницы, в обозначениях.
* в формулах 1.4.1 и 1.4.2) играют x
Здесь роль двух функций ( y1,2
1
и x2 – корни квадратного уравнения. Роль переменных x1, x2,…, xn
играют b и с – коэффициенты квадратного уравнения. Их всего два.
В этих обозначениях x1≡y1(b, c) = f1(b, c), x2≡y2(b, c) = f2(b, c). Однако,
этих явных уравнений нет, они лишь предполагаются, задана же
неявная функция x2 +=
bx + c F =
x, b, c 0.
Найдем
выражения
для
частных
производных
Fx/ =
2x + b, Fb/ =
x, Fc/ =
1.
Отсюда
(
=
fb/
Fb/
=
, fc/
/
Fx
Тогда по формуле (1.4.2) получим
10
)
Fc/
Fx/
.
( )
( )
( ) ( )
( )
( )
δ x1∗ = ϑ1,1 δ b∗ + ϑ2,1 δ c∗ , δ x2∗ = ϑ1,2 δ b∗ + ϑ2,2 δ c∗ ,
где
(
)
(
b∗ fb/ b∗ , c∗
=
ϑ1,1
=
, ϑ2,1
x1
c∗ fc/ b∗ , c∗
b∗ fb/ b∗ , c∗
=
ϑ1,2
=
, ϑ2,2
x2
c∗ fc/ b∗ , c∗
(
)
x1
(
x2
),
).
Здесь первый индекс у коэффициента ϑ – номер переменного, а
второй индекс соответствует номеру функции, то есть номеру корня квадратного уравнения. Решим исходное квадратное уравнение.
x2 + bx + c = 0 ⇒ x1 ≈ −103 , x2 ≈ −10−3. Тогда
b∗
=
ϑ1,1
Fb/
103
Fx/
−103
−2 ⋅ 103 + 103
=
≈
1.
−103
x1
3 ∗
∗
,c 1
x x=
=
1 , b 10=
Аналогично,
−6
ϑ2=
,1 10 , ϑ1=
,2 1, ϑ2,2 = 1.
Итак,
( ) ( )
( )
( ) ( ) ( )
δ x∗ = δ b∗ + 10−6 ⋅ δ c∗ ,
1


 δ x2∗ = δ b∗ + δ c∗ .

§ 1.5. Определение абсолютной
и относительной погрешностей приближенных чисел.
Оценка погрешностей результата
При проведении расчетов необходимо уметь практически оценивать погрешности результата. Разумная оценка погрешности позволяет удерживать оптимальное число знаков при вычислениях,
оптимизируя трудоемкость расчетов. Абсолютная и относительная
погрешности вычисляются непосредственно по формулам (1.2.1) и
11
∗
(1.2.2). Число верных знаков определяется в соответствии с теоремами 1–3 параграфа 1.2.
Пример 1. Округляя заданное число a до трех значащих цифр,
определить абсолютную ∆ и относительную δ погрешности полученных приближенных чисел.
Если, например, a = 2.1514, то a* = 2.15 и ∆(a*) = 0.0014. Тогда
( )
δ a∗ =
)
( )=
∆ a∗
a
0.0014
= 0.00065= 0.07%.
2.1514
( )
Аналогично, если a = –0.0015281, то a* = –0.00153, ∆ a∗ =a − a ∗ =0.0000019
=a − a =0.0000019, δ a∗ =0.00124 =0.12%. Здесь при округлении числа
a использовано обычное правило округления по дополнению.
Погрешности арифметических операций вычисляются по формулам параграфа 1.3. При этом, например, погрешность суммы
большого числа слагаемых, вычисленная по формуле (1.3.1), оказывается сильно завышенной. Поэтому часто применяют статистическую оценку погрешности суммы:
( )
∗
(1.5.1)
∆ ( S ) = 3n ⋅ 0.5 ⋅ 10−m ,
где n – число слагаемых в сумме S, то есть S = a1 + a2 + … + an, m –
номер десятичного разряда, до которого произведено округление.
Формулу (1.6.1) используют при n>10.
Относительная погрешность разности двух положительных чисел, определяемая по формуле (1.3.3), может быть очень большой,
особенно когда эти числа близки между собой. Чтобы избежать
потери точности, в этом случае часто используют преобразования
типа преобразований суммы в произведение.
Пример 2. Найти алгебраическую сумму приближенных чисел и
указать ее погрешность: S = a + b + c = 398.5–72.28 + 0.34567 (все знаки верные).
Начнем со слагаемых a, b и c. Будем считать, что абсолютная
погрешность каждого из них не превосходит половины единицы младшего оставленного разряда, т. е. ∆(a*) = 0.05, ∆(b*) = 0.005,
∆(c*) = 0.000005. Тогда δ(a*) = 0.00013 = 0.01%, δ(b*) = 0.00007 = 0.01%,
δ(c*) = 0.00001 = 0.001%, По формуле (1.3.1) ∆(S*) = ∆(a*) + ∆(b*) + ∆(c*) = = 0.05, т. е. абсолютная погрешность суммы не превосходит абсолютной погрешности наименее точного из слагаемых. Сохраним в расчетах только один запасной знак и будем округлять все слагаемые до
0.01. Тогда S = 398.5–72.28 + 0.35 = 326.57. Окончательный результат
12
округляем до 0.1. S = 326.6. При этом к вычисленной ранее абсолютной погрешности 0.05 добавляется погрешность округления, также
равная 0.05. Таким образом, окончательно ∆(S*) = 0.05 + 0.05 = 0.1.
Отсюда
0.01
δ S∗ =
= 0.0003= 0.03%.
326.6
( )
Для оценки относительных погрешностей результата при умножении и делении формулы (1.3.4) используются редко. Обычно на
практике выполняются условия δ(a*)≤1, δ(b*)<<1 и используется
приближенное равенство
 a∗ 
δ a∗ ⋅ b∗ ≈ δ  ∗  ≈ δ a∗ + δ b∗ . b 
 
(
)
( ) ( )
(1.5.2)
Таким образом, практически при умножении и делении приближенных чисел их относительные погрешности складываются.
Пример 3. Высота h и радиус основания R цилиндра измерены
с точностью до 0.5% и оказались равными 2.06 и 6.5 см. Какова предельная относительная и абсолютная погрешности при вычислении
объема цилиндра?
V = Sосн∙h = πR2h. Число π может быть записано с произвольно высокой точностью. Для R и h имеем δ(R*) = 0.5% = 0.005,
δ(h*) = 0.5% = 0.005, δ(V*)≈δ(R*) + δ(R*) + δ(h*) = 2 δ(R*) + + δ(h*) = 0.015 = 1.5%. Таким образом, результат содержит не более двух верных знаков. При вычислении V сохраним один запасной
знак, округляя все числа до трех знаков: V = 3.142∙2.06∙6.52 = 273.464.
Тогда V = 273.0, ∆(V*) = |V|∙δ(V*) = 4.0.
Погрешности вычисления значений функций подсчитываются по
формулам (1.4.1) и (1.4.2). Если значения функций положительны, то
для относительной погрешности можно использовать формулу
n
n
1 ∂f
∂ ln f
∗
∆ ( xi∗ ). (
)
∑ f ∂x ∆ ( x=
i ) ∑
∂
x
i
i
i 1
=i 1=
∗
δ y=
(1.5.3)
Для функции одной переменной легко можно определить допустимую погрешность аргумента по допустимой погрешности функции
( )
∆ x∗ =
1
f
/
(x)
( )
∆ y∗ . (1.5.4)
13
Для функции нескольких аргументов эта задача решается при
введении дополнительного предположения – так называемого принципа равных влияний. При этом полагают, что в формуле (1.4.1) все
слагаемые fx/ ∆ xi∗ равны между собой, тогда
( )
i
( )
∗
∆ x=
i
( )=
,i
∆ y∗
∂f
n
∂xi
1,n. (1.5.5)
Пример 4. С каким числом верных знаков должен быть известен
свободный член уравнения x2–2x + lg2 = 0, чтобы получить корни
с четырьмя верными знаками?
Будем считать, что коэффициент p в квадратном уравнении известен абсолютно точно. Для вычисления корней используем выражение
2
p
 p
x1,2 =
− ±   − q.
2
2
По условию δ(x1*) = δ(x2*) = 10–4 = 0.01%. По формуле (1.4.2)
( )
∗
δ x=
∗
∗
∂x p
∂x q
∗
δ p +
δ q∗ .
∂p x∗
∂q x∗
( )
( )
Если бы оба коэффициента влияли на точность корней, то можно
было бы воспользоваться для вычисления δ(q*) принципом равных
влияний. Однако в нашем случае p известен точно, то есть δ(p*) = 0 и
( )
δ q
∗
( )
δ x∗
=
.
∂x q∗
∂q x∗
Вычислим
∂x
=
∂q
14
∂x
q∗
и ∗.
∂q
x
q∗
ln 2
1
= 0.59805, min
= = 0.16396.
∗
2
.
1
8360
x
 p
2   −q
2
Тогда
( )
max δ q∗=
0.0001
= 0.0010
= 0.1%.
0.59805 ⋅ 0.16396
Таким образом, для того чтобы получить корни с четырьмя верными знаками, необходимо в исходном уравнении задать ln2 не менее чем с тремя верными знаками.
Пример 5. Для определения модуля Юнга по прогибу стержня
прямоугольного сечения применяется формула
E=
1 l3 P
,
4 d3bS
где l – длина стержня, b и d – основание и высота поперечного сечения, S – стрела прогиба, P – нагрузка. С какой точностью следует
измерить длину l и стрелу S, чтобы погрешность E не превышала
5.5% при условии, что P известна с точностью до 0.1%, величины b
и d известны с точностью до 1%, l≈50 см, S≈2.5 см?
Применение формулы (1.4.2) для относительной погрешности E
дает δ(E*) = 3 δ(l*) + δ(P*) + 3δ(d*) + δ(b*) + δ(S*). По условию задачи известно, что δ(E*) = 5.5% = 0.055, δ(P*) = 0.1% = 0.001, δ(b*) = 1% = 0.01,
δ(d*) = 1% = 0.01. Тогда 3δ(l*) + δ(S*) = 1.4%. По принципу равных влияний на долю 3δ(l*) и δ(S*) приходится по 0.7%. Тогда δ(S*) равно
0.7%, то есть S надо измерять с точностью 0.7% = 0.007, l необходимо
измерять точнее, δ(l*) = 0.2% = 0.002. Отсюда ∆(S*) = |S|∙δ(S*) = 2.5∙0.00
7 = 0.02, а ∆(l*) = |l|∙δ(l*) = 50∙0.002 = 0.1, то есть
=
S 2.50 ÷ 0.02,

=
 l 50.0 ÷ 0.1.
Задание № 1 Найти абсолютную погрешность вычисления функции при заданных значениях аргументов. Номер варианта – это номер Вашей фамилии в журнале преподавателя.
1. S = 1 2 ab sin C
1
2
3
a
17.25÷0.01
2.1÷0.05
6.089÷0.003
b
34.725÷0.005
18.4÷0.03
0.121÷0.001
S
18.3÷0.01
2.06÷0.005
167.18÷0.01
15
(
2.
=
V 1 3 h S1 + S2 + S1S2
)
1
2
3
h
21.7÷0.02
3.45÷0.01
0.956÷0.004
S1
9.272÷0.001
17.654÷0.0005
5.322÷0.0005
S2
11.01÷0.005
2.19÷0.02
1.315÷0.0004
(
)
3. V = 1 6 π h3 + 1 2 π r12 + r22 h
1
2
3
h
1.5÷0.005
0.21÷0.03
3.78÷0.002
r1
6.28÷0.02
11.615÷0.001
139.96÷0.006
r2
5.137÷0.0003
11.09÷0.005
125.3÷0.01
1
2
3
a
3.456÷0.001
2.5÷0.03
86.2÷0.05
b
7.12÷0.004
0.854÷0.0005
44.831÷0.001
c
9.7÷0.1
1.16÷0.004
67.18÷0.006
4. A = arccos
b2 + c2 − a2
2bc
5. y Ae−ax sin ( ω x + ϕ0 )
=
1
2
3
A
49.83÷0.01
0.85÷0.003
4.523÷0.003
a
2.35÷0.001
0.536÷0.002
0.014÷0.0005
ω
ϕ0
11.7÷0.1
3.7÷0.02
1.76÷0.002
3.147÷0.0001
0.7071÷0.00005
54÷0.5
x
1.78÷0.001
0.0465÷0.0001
3.14÷0.005
a+x
6. y2 = x2 

a−x
16
1
2
3
a
2.435÷0.005
72÷0.3
1.84÷0.006
x
1.27÷0.01
3.374÷0.002
0.8345÷0.0004
7. y= a ⋅ tgϕ + l sin ϕ
1
2
3
a
3.889÷0.001
145.5÷0.08
27.3÷0.04
l
0.8454÷0.0002
28.6÷0.1
0.93÷0.001
ϕ
0.643÷0.0005
0.1736÷0.00005
1.73÷0.03
1
2
3
a
1.245÷0.001
15.8÷0.03
3.45÷0.001
ϕ
0.3746÷0.0001
0.9848÷0.0003
1.8387÷0.00005
8. r =
2

a  1+ ϕ
ϕ
ϕ





3
9.=
L a 1 + λ2 − 2λ cos t
1
2
3
a
9.14÷0.005
3.6÷0.04
23.76÷0.003
λ
1.2÷0.05
0.2518÷0.0001
0.85÷0.006
t
0.56÷0.01
0.34÷0.005
1.8÷0.01
1
2
3
a
5.93÷0.005
2.786÷0.0006
0.75÷0.003
x
3.1415÷0.0001
0.734÷0.004
0.0761÷0.0001
S
11.=
π a2
+ π l2
2
1
2
3
a
52.34÷0.01
0.0545÷0.00005
0.65÷0.02
l
2.0435÷0.0001
0.82÷0.01
6.3÷0.02
1
2
3
h
0.285÷0.0002
0.2731÷0.0002
5.843÷0.001
R
0.64÷0.004
10.8÷0.02
4.17÷0.001
10. y = a ln
12. V =
a + a2 − x 2
x
2π R 2 h
3
17
13. H= h +
hr
R −r
1
2
3
h
8.23÷0.005
0.5324÷0.0001
2.5÷0.03
r
0.281÷0.001
0.032÷0.003
1.7÷0.01
R
11.7÷0.05
1.81÷0.005
31.456÷0.002
2
3
2
 a2 − b2 − h2 
14. R= a + 



2h


2
2
1
a
23.76÷0.003
3.236÷0.002
17.3÷0.03
b
5.8÷0.02
1.315÷0.0004
4.431÷0.001
h
3.45÷0.001
1.57÷0.006
0.28÷0.006
1
2
3
x1
7.751÷0.0005
29.72÷0.01
3.14÷0.005
x2
0.12÷0.01
78÷0.3
0.6384÷0.0002
λ
1.0÷0.05
0.512÷0.0005
2.1951÷0.0001
1
2
3
a
2.4÷0.02
0.121÷0.0002
10.536÷0.001
b
3.35÷0.005
5.8÷0.02
7.18÷0.006
15. y =
16. S =
ae − bd
a2 + b2
e
8.235÷0.001
21.1÷0.1
0.8÷0.1
d
0.258÷0.0002
0.1756÷0.0001
0.4834÷0.0001
1
2
3
a
0.3575÷0.0002
5.12÷0.01
3.6÷0.04
ϕ
28.6÷0.1
1.27÷0.002
7.221÷0.003
17. K =
18
x1 + λ x2
1+ λ
1 ϕ2 + 2
3
a
2
2
ϕ +1
(
)
18. F =
ln v + arcsin u
u2 + 5ev
1
2
3
u
0.184÷0.006
0.357÷0.0005
0.63÷0.02
v
0.3575÷0.0002
0.25÷0.003
0.0562÷0.0001
19. =
y 3k ⋅ arctg
1
x
2 +3
1
3
k
81.26÷0.01
341.17÷0.03
4.2÷0.05
x
0.142÷0.0003
0.642÷0.0005
0.28÷0.006
1
2
3
k
4.218÷0.001
10.5÷0.1
1.0397÷0.00005
x
0.15÷0.005
0.0545÷0.0001
81.26÷0.02
1
2
3
a
3.0567÷0.0001
0.678÷0.003
5.72÷0.02
b
28.3÷0.02
7.45÷0.01
3.2817÷0.0001
x
6.3÷0.02
0.82÷0.01
4.2÷0.05


2
20. y k  cos
=
− 1
3x


y
21. =
22. r
3
( a − b )2 ch ( x )
( p − a )( p − b )( p − c )
a+b+c
=
, p
p
2
1
2
3
a
4.16÷0.005
7.27÷0.01
12.163÷0.002
b
5.205÷0.001
6.3÷0.04
3.244÷0.001
c
2.39÷0.01
4.198÷0.0005
9.3÷0.1
19
2a2ρ3
23. r =
c4 − a4 + 3ρ4
a
1
2
3
4.22÷0.004
3.4÷0.1
5.82÷0.005
c
7.5÷0.05
8.13÷0.002
8.632÷0.003
ρ
5.205÷0.001
1.315÷0.0005
0.14÷0.01
1 − 2a − 3
24. y =
b −2
1
2
a
0.28÷0.006
0.156÷0.0005
0.08÷0.01
b
10.536÷0.002
7.18÷0.01
31.110÷0.0005
( )
25. v = sin a3 sin
b +1
b
1
2
3
a
0.235÷0.0003
0.318÷0.0002
1.8÷0.01
b
48.39÷0.001
0.46÷0.002
3.108÷0.0003
1
2
3
a
0.44÷0.03
0.772÷0.0005
1.49÷0.01
b
9.542÷0.001
4.218÷0.001
29.725÷0.0005
1
2
3
x1
3.35÷0.01
6.17÷0.02
5.441÷0.0005
x2
0.383÷0.0002
0.891÷0.0005
1.3÷0.01
=
S
28.
π 2
D − d2
4
1
2
3
d
17.29÷0.005
28.3÷0.1
32.14÷0.02
D
72÷0.3
42.08÷0.005
116.929÷0.0005
26. R =
27. v =
20
3
lnsin ( 3a )
( 6b − π )2
cos ( 3x1 ) − cos x2
tg2 ( 2x2 )
(
)
h +h
29. V = π R 2 1 2
2
1
2
3
h1
1.29÷0.005
11.3461÷0.0001
1.84÷0.006
h2
2.316÷0.001
6.83÷0.03
0.8345÷0.0004
R
3.274÷0.0005
9.1÷0.1
32.7÷0.04
1
2
3
a
2.45÷0.01
7.834÷0.001
0.15÷0.01
b
0.6294÷0.0001
0.1113÷0.00005
1.29÷0.005
c
17.3÷0.03
11.99÷0.005
2.4÷0.02
30. K =
a sin b
c − a cos b
Образец выполнения задания № 1
x3
Дано y2 =
a−x
1
a
1.1753÷0.0003
x
0.318÷0.0005
Абсолютные
погрешности
аргументов
∆(a*) = 0.0003,
∆(x*) = 0.0005. Относительные погрешности будут равны:
( )=
0.0003= 0.03%,
( )=
0.0016= 0.16%.
∆ a∗
( )
∗
δ a =
a∗
∆ x∗
( )
∗
δ x =
x∗
По формуле (1.4.2) получим
( )
δ y∗ =
2
∑ vj δ ( xj ) = v1δ ( x1 ) +v2δ ( x2 ),
j =1
21
где
∂y
a∗
3a∗ − 2x∗
a∗
∂a
=
=
v1 =
, v2
.
y∗
2 a∗ − x ∗
2 a∗ − x ∗
(
)
(
)
δ(y*) = 0.6855∙0.0003 + 1.6855∙0.0016 = 0.0029 = 0.29%.
Само значение функции равно
( )
( )
∗
y=
0.1937. ∆ y∗= y∗ ⋅ δ y∗= 0.0006.
Следует округлить значение функции до трех значащих цифр.
∗
0.194, δ y∗= 0.29%, ∆ y∗= 0.0006.
Итак, y=
( )
( )
§ 1.6. Лабораторная работа № 1.
Вычисление абсолютной и относительной погрешности функции
при заданных значениях аргумента в пакетах Mathcad и Matlab
а) пакет Mathcad.
Рассмотрим все формулы на примере функции трёх переменных
u = f(x,y,z). Функция задана в явном виде. Пусть заданы ∆(x), ∆(y),
∆(z). Тогда
( )
3
( )
( )
( )
( )
δ u∗ = ∑ v∗j δ x∗j = v1∗δ x∗ + v2∗ δ y∗ + v3∗ δ z∗ ,
где
v∗j
=
xj ⋅ fx/
j
f
j =1
.
В нашем случае
v1∗
x ⋅ fx/
y ⋅ fy/
xj ⋅ fz/
∗
∗
, v3 =
.
=
, v2 =
f
f
f
( )
( )
Тогда, если эти величины известны, то ∆ u∗= u∗ ⋅ δ u∗ .
Вычислим вариант № 29. Здесь
h +h
πR 2 1 2 =
u=
u ( R, h1, h2 ),
2
22
тогда
∂u 1 2 ∂u 1 2
h +h
∂u
=
πR ,
=
πR .
= 2πR 1 2 ,
∂h1 2
∂h2 2
∂R
2
Дано, что ∆h1 = 0.005, ∆h2 = 0.001, ∆R = 0.0005. Относительные погрешности будут равны
δ
δ
( )=
h1∗
( )
h2∗ =
( )
∗
δ R =
( )=
∆ h1∗
h1∗
( )=
∆ h2∗
h2∗
( )=
∆ R∗
0.005
= 0.004= 0.4%,
1.29
0.001
= 0.0004= 0.04%,
2.316
0.0005
= 0.0002= 0.02%.
3.274
R∗
Тогда
=
v1∗
h1 ⋅ uh/
h1
1
=
=
, v2∗
u
h1 + h2
( )
h2 ⋅ uh/
h2
2
=
=
, v3∗
u
h1 + h2
3
( )
( )
/
R ⋅ uR
= 2.
u
( )
δ u∗ =
v1∗δ h1∗ + v2∗ δ h2∗ + v3∗ δ R ∗ =
∑ vi∗δ ( xi ) =
=
=
i =1
( )
( ) ( )
h1
h2
δ h1∗ +
δ h2∗ + 2δ R ∗=
h1 + h2
h1 + h2
1.29
2.316
⋅ 0.004 +
⋅ 0.0004 + 2 ⋅ 0.0002
= 0.002
= 0.2%.
1.29 + 2.316
1.29 + 2.316
Наконец,
( )
( )
h +h
u=
60.716, ∆ u∗= u∗ ⋅ δ u∗= 60.716 ⋅ 0.002
πR 2 1 2 =
= 0.128.
2
Следует округлить значение функции до одной цифры после запятой, т.е. u* = 60.7, δ(u*) = 0.2%, ∆(u*) = 0.1.
23
Далее следует текст основной программы в пакете Mathcad.
ORIGIN: = 1
Π: = 3.1416 h1: = 1.29 h2: = 2.316 R: = 3.274
∆h1: =
0.005
∆h1 :=
0.005∆h2: = 0.001 ∆R: = 0.0005
δh1
:=
∆h1
h1
δh1 = 3.876×10–3
∆h2
:=
∆h2
h2
δh2 :=
∆
R
h2 –4
δh2 =
4.318×10
δR :=
∆R
δR :=
R
δh2
δR = 1.527×10–4
( x + y)
V ( x , y , z) := π ⋅ z 2 ⋅
(
x +2 y)
V ( x , y , z) := (πh⋅ z+2 h⋅ )
2
2
V(h1,h2,R) = 60.716 1
dVR := 2 ⋅ π ⋅ R ⋅ h + h
( 1 2 2)
dVR := 2 ⋅ π ⋅ R ⋅
2
dVR = 37.09
dVh1 :=
π
⋅
dVh1 = 16.838
dVh2 :=
π
⋅
R2
2
R2
2
dVh2 = 16.838
v1 :=
h1
h1 + h2
v2 :=
h2
h1 + h2
v3: = 2
v1 = 0.358 v2 = 0.642
δV: = v1*δh1 + v2*δh2 + v3*δR
δV = 1.969×10–3
∆V: = V(h1,h2,R)*δV
∆V = 0.12
б) пакет Matlab.
Аналогичные действия в этом пакете также элементарно просты,
как и в предыдущем случае. Здесь в принципе не нужны никакие
дополнительные подпрограммы, ибо все вычисления элементарны.
24
Текст основной программы в пакете Matlab по формулам, приведённым в пункте а) следующий:
>> clear
>> %вычисление абсолютной и относительной погрешности функции
function V = Vh1h2R(h1,h2,R)
%Подпрограмма вычисляет значение исходной функции
V = 3.1416*R^2*(h1 + h2)/2;
end
>> h1 = 1.29;
>> h2 = 2.316;
>> R = 3.274;
>> delh1 = 0.005;
>> delh2 = 0.001;
>> delR = 0.0005;
>> delotnh1 = delh1/h1
delotnh1 = 0.0039
>> delotnh2 = delh2/h2
delotnh2 = 4.3178e-04
>> delotnR = delR/R
delotnR = 1.5272e-04
>> V1 = Vh1h2R(h1,h2,R)
V1 = 60.7161
>> pi = 3.1416;
>> dvR = 2*pi*R*(h1 + h2)/2
dvR = 37.0899
>> dvh1 = pi*R^2/2
dvh1 = 16.8375
>> dvh2 = dvh1;
>> v1 = h1/(h1 + h2)
v1 = 0.3577
>> v2 = h2/(h1 + h2)
v2 = 0.6423
>> v3 = 2;
>> delotnV = v1*delotnh1*v2*delotnh2 + v3*delotnR
delotnV = 3.0582e-04
>> delV = V1*delotnV
delV = 0.0186
§ 1.7. Корректность вычислительной задачи [1]
Анализ важнейших требований, предъявляемых к различным
прикладным задачам, приводит к понятию корректности математической задачи.
25
Вычислительная задача называется корректной, если выполняются следующие три требования: а) решение этой задачи y ∈ Y существует при любых x∈X, б) это решение единственно, в) решение
устойчиво по отношению к малым возмущениям входных данных.
Если не выполнено хотя бы одно из условий, задача называется некорректной.
Существование решения – естественное требование. Отсутствие
решения свидетельствует либо о непригодности принятой математической модели, либо о неправильной постановке самой математической модели.
Не единственность – неприятное свойство вычислительной задачи. Ее причиной, помимо уже перечисленных условий, может быть
естественное свойство решаемой задачи. Не единственность может
быть ликвидирована введением некоторых дополнительных ограничений на решение. Иногда за решение задачи принимается множество решений.
Решение y называется устойчивым по входным данным x, если
y зависит от x непрерывным образом. Строго формальное определение устойчивости решения похоже на определения предела функции: если для любого ε>0 найдется такое δ = δ(ε)>0, что для любого
xi∈X, удовлетворяющего условию ∆(xi)<δ, найдется соответствующее yi∈Y, такое, что при ∆(yi)<ε, решение будет устойчиво. Иными
словами, для устойчивости вычислительной задачи её решение теоретически можно найти со сколь угодно высокой точностью ε, если
обеспечена высокая точность δ исходных данных. Неустойчивость
решения y означает, что ∃ε0>0, что какое бы малое δ>0 ни было задано, найдутся такие данные xi, что ∆(xi)<δ, но ∆(yi)>ε0.
§ 1.8. Обусловленность вычислительной задачи [1]
Под обусловленностью вычислительной задачи понимают ее чувствительность к малым погрешностям входных данных. Задачу называют хорошо обусловленной, если малым погрешностям входных
данных отвечают малые погрешности решения, и плохо обусловленной, если возможны сильные изменения решения. Для измерения
количественной стороны обусловленности используют число обусловленности. Грубо говоря, это коэффициент возможного возрастания погрешностей в решении по отношению к вызвавшим их погрешностям входных данных, то есть ∆(yi) = v∆∙∆(xi), где v∆ – абсолютное число обусловленности. Если δ(yi) = vδ∙δ(xi), то vδ – относительное
число обусловленности. Для плохо обусловленной задачи v>>1.
26
Пример. Вычисление значений функции одного переменного.
x ⋅ f ′( x )
При этом v∆ = f ′ ( x ) и vä =
в силу формул
f (x)
( )
( )
 ∆ y∗ = f / ( x ) ∆ x∗ è



x ⋅ f/ (x)
 δ=
δ x∗ .
y∗

f (x)

( )
( )
Вычислим y = sinx. В этом случае v∆ = |cosx|≤1, что говорит о хорошей абсолютной обусловленности этой задачи при всех значениях
аргумента. Однако если важен результат с определенным числом верных знаков, то нужно использовать относительную обусловленность.
Тогда yδ = |x∙ctgx|. График функции y = |x∙ctgx| приведен на рис. 1.1.
Так как vδ→∝ при x→πk, то при
x≈πk задача обладает плохой относительной обусловленностью,
хотя мала абсолютная погрешность значения y* = sinx*. Если
0
π/2
π
3 π/2
2π
же значение |x| очень велико, то
vδ>>1. Например, для ЭВМ РС при
Рис. 1.1. График функции y = |x∙ctgx|
εm≈10–7 и при |x|≈107 одна только
абсолютная ошибка ∆(x*)≈1.
§ 1.9. Вычислительные методы, их классификация
Методы, которые используются в вычислительной математике для преобразования задач к виду, удобному для реализации на
ЭВМ, и позволяют конструировать вычислительные алгоритмы, называются вычислительными.
Они разделяются на следующие классы:
1) методы эквивалентных преобразований;
2) методы аппроксимации;
3) прямые (точные) методы;
4) итерационные методы;
5) методы статистических испытаний (Монте-Карло).
Поясним классификацию подробнее.
Методы эквивалентных преобразований позволяют заменить исходную задачу другой, имеющей то же решение. Это целесообразно,
если новая задача проще исходной или обладает лучшими свойства27
ми, или для нее, например, существует уже готовый метод и программа, а для исходной задачи их надо создавать заново.
Пример 1. Задача отыскания корней уравнения y = f(x) = 0 может
быть сведена к эквивалентной задаче поиска точки глобального минимума функции Ф(x) = [f(x)]2.
Методы аппроксимации приближают исходную задачу другой,
решение которой в оговоренном смысле близко к решению исходной
задачи. Погрешности, возникающие при такой замене, называются
погрешностями аппроксимации. Как правило, аппроксимирующая
задача содержит параметры, позволяющие регулировать величину
погрешности аппроксимации.
Пример 2. Формула прямоугольников вычисления определенного интеграла:
I
=
b
n

 1 
f
x
dx
I
h
f  a +  i −  h ,
⇒
=
(
)
∑
âû÷
∫
 2 
i =1 
a
b−a
– параметр, регулирующий точность.
n
Прямые методы позволяют получить решение исходной задачи
после выполнения конечного числа элементарных операций.
Пример 3. x2 + bx + c = 0, метод вычисления корней
где h =
x1,2 =  −b ± b2 − 4ac  / 2.


Здесь элементарными считаются четыре арифметические операции и операция извлечения квадратного корня. Элементарной операцией метода может быть объявлена любая другая операция, необходимо, конечно, чтобы ее выполнение было существенно проще
решения всей задачи.
Итерационные методы – специальные методы, приспособленные
для построения последовательных приближений к точному решению задачи. Для получения каждого из последующих приближений выполняют однотипный набор действий с использованием ранее найденных приближений – итераций («iteratio»- повторение).
Неограниченное продолжение этого процесса позволяет построить
бесконечную последовательность приближений к решению - итерационную последовательность. Если она сходится к решению, то
говорят, что итерационный метод сходится.
Множество начальных приближений, для которых метод сходится, называется областью сходимости метода. Практическая ре28
ализация итерационных методов всегда связана с необходимостью
выбора критерия окончания итерационного процесса.
Пример 4. Вычислим a ( a > 0 ). Пусть x(0) = 1>0. Воспользуемся формулой
=
x( )
i
1  ( i −1)
a 
+
x
,
i −1
2 
x( ) 
получим итерационную последовательность a = 2: x(0) = 1, x(1) = 1.5,
x(2) = 1.41(6), x(3) = 1.4142156…. Известно, что метод сходится при любом начальном приближении x(0)>0.
Метод статистических испытаний основан на моделировании
различных случайных величин и построении оценок. Этот метод
применяют для решения не только тех задач, в которых в явном
виде имеются случайные события, но также и для решения многих
задач, не содержащих таких событий. В этом случае искусственно подбирают такое случайное явление, характеристики которого
связаны с результатом решения исходной задачи. Для определения
числовых значений этих характеристик и используется метод статистических испытаний.
Его главная идея основана на законе больших чисел, сам метод
использует аппарат математической статистики.
Пример 5. Вычисление функций плотностей вероятностей различных законов, вычисление многомерных интегралов и тому подобные вопросы.
29
2. ПРИБЛИЖЕНИЕ ФУНКЦИЙ
§ 2.1. Задача приближения функций
Вычисление значений функции y = f(x) – задача, с которой постоянно приходиться сталкиваться на практике. Часто бывает, что вычисление f(x) затруднительно, например:
1) функция y = f(x) задана таблично
=
yi f=
( xi ), i 1,n, а вычисление необходимо проводить в точках x, не совпадающих с табличными;
2) вычисление функции y = f(x) дорого;
3) для вычисления y = f(x) необходим эксперимент.
В таких условиях целесообразно заменить f(x) некоторой близкой к ней функцией g(x), которая вычисляется быстро и надежно,
а погрешность приближения f(x)-g(x) достаточно мала [3]. При этом
полезно при выборе функции g(x) использовать любую дополнительную информацию о функции f(x), о ее гладкости, четности, периодичности, монотонности и так далее. Это дает возможность осознанно выбрать класс G аппроксимирующих функций.
Широко используются функции вида Фm(x) = a0j0(x) + a1j1(x) + … + amjm(x), представляющие собой линейные комбинации
некоторых базисных функций j0(x), j1(x), , jm(x). Функция Фm(x)
называется обобщенным многочленом степени m.
§ 2.2. Интерполяция обобщенными многочленами
Если ставится требование совпадения функции g(x) с функцией
f(x) в некоторых фиксированных точках, то это приводит к задаче
интерполяции.
Построить функцию g(x), удовлетворяющую условиям g(x) = yi,
i = 0, 1,…, n. xi – узлы интерполяции. Очевидно, что выбор g(x) неоднозначен, так как по заданной таблице можно построить бесконечно много интерполирующих функций.
узлы интерполяции
y=g(x)
x0
x1
x2
x3
x4
x5
Рис. 2.1. Функция y = g(x) и её узлы интерполяции
30
Рассмотрим обобщенный многочлен Фm(x), удовлетворяющий
условию Φm ( xi ) =yi , i =0,n. Эта формула, представленная в виде
Фm(x) = a0j0(x) + a1j1(x) + … + amjm(x), очевидно, эквивалентна следующей системе линейных алгебраических уравнений:

ϕ0 ( x0 ) a0 + ϕ1 ( x0 ) a1 + ... + ϕm ( x0 ) am = y0 ,

ϕ0 ( x1 ) a0 + ϕ1 ( x1 ) a1 + ... + ϕm ( x1 ) am = y1,


.................................................................
 ϕ0 ( xn ) a0 + ϕ1 ( xn ) a1 + ... + ϕm ( xn ) am = yn .

(2.2.1)
Для определения Фm(x) необходимо решить систем (2.2.1) относительно a0, a1,…, am. На практике это делается чрезвычайно редко. Как правило, система (2.2.1) плохо обусловлена. В большинстве
приложений используются специальные явные формулы для записи Фm(x) и вычисление {am} не нужно.
§ 2.3. Полиномиальная интерполяция. Многочлен Лагранжа
Если в качестве базисной взять систему степенных функций, то
есть {j0, j1,…, jn}→{1, x, x2,…, xn}, то получаем задачу полиномиальной интерполяции:
Pn=
(x)
n
∑ ak xk ,
k =0
Pn (=
xi ) y=
i , i 0,n. (2.3.1)
Теорема 2.1. Существует единственный интерполяционный многочлен степени n, удовлетворяющий условиям (2.3.1).
В качестве искомого многочлена возьмем многочлен степени n
вида
Pn ( x ) = a0 ( x − x1 )( x − x2 )...( x − xn ) + a1 ( x − x0 )( x − x2 )...( x − xn ) +
+a2 ( x − x0 )( x − x1 )( x − x3 )...( x − xn ) + ...
+an ( x − x0 )( x − x1 )...( x − xn −1 ).
(2.3.2)
Таким образом, система функций, по которой строится интерполяционный многочлен, есть
ϕ0 ( x ) =
( x − x1 )( x − x2 )...( x − xn ),
ϕ1 ( x ) =
( x − x0 )( x − x2 )...( x − xn ),
...................................................
ϕn ( x ) =
( x − x0 )( x − x1 )...( x − xn−1 ).
31
Для нахождения Pn(x) надо найти набор коэффициентов a0, a1,…,
an. Не будем составлять и решать систему линейных уравнений
вида (2.2.1), найдем коэффициенты иным способом.
Пусть x = x0, с учетом Pn(x0) = y0 = a0(x0-x1)(x0-x2)…(x0–xn), получим
y0
a0 =
.
x
−
x
x
−
( 0 1 )( 0 x2 )...( x0 − xn )
Аналогично, полагая x = x1 и учитывая, что y1 = a1(x1–x0)(x1–x2)…
(x1-xn), будем иметь
y1
a1 =
.
( x1 − x0 )( x1 − x2 )...( x1 − xn )
Если x = xn, то
an =
yn
.
x
x
x
−
−
( n 0 )( n x1 )...( xn − xn−1 )
Тогда сам многочлен Pn(x) будет иметь вид
Pn ( x ) = a0 ϕ0 ( x ) + a1ϕ1 ( x ) + ... + an ϕn ( x ) =
Pn ( x ) = a0 ϕ0 ( x ) + a1ϕ1 ( x ) + ... + an ϕn ( x ) =
( x − x1 )( x − x2 )...( x − xn )
( x − x0 )( x − x2 )...( x − xn )
= ( x − x1 )( x − x2 )...( x − xn ) y0 + ( x − x0 )( x − x2 )...( x − xn ) y1 +
= ( x0 − x1 )( x0 − x2 )...( x0 − xn )y0 + ( x1 − x0 )( x1 − x2 )...( x1 − xn )y1 +
( x0 − x1 )( x0 − x2 )...( x0 − xn )
( x1 − x0 )( x1 − x2 )...( x1 − xn )
( x − x0 )( x − x1 )...( x − xn )
+ ( x − x0 )( x − x1 )...( x − xn ) y2 + ... +
+ ( x2 − x0 )( x2 − x1 )...( x2 − xn )y2 + ... +
( x2 − x0 )( x2 − x1 )...( x2 − xn )
( x − x0 )( x − x1 )...( x − xn−1 )
+ ( x − x0 )( x − x1 )...( x − xn −1 ) yn .
+ ( xn − x0 )( xn − x1 )...( xn − xn −1 )yn . (2.3.3)
( xn − x0 )( xn − x1 )...( xn − xn−1 )
Эта формула называется интерполяционной формулой Лагранжа. Приведем ее в сокращенной записи:
f(x)
Pn (x)
x0
x1
x2
xi
xk
xn
Рис. 2.2. Функция y = f(x) и её интерполяционный многочлен Pn(x)
32
Pn (=
x ) Ln (=
x)
=
n
x−x
k
=
∏
x −x
k =0, j
k≠ j
k
n
∑ yj ln ( x ), ϕ=
n
j
j =0
j
lnj (=
x)
( x − x0 )( x − x1 )...( x − xj −1 )( x − xj +1 )...( x − xn )
( xj − x0 )( xj − x1 )...( xj − xj −1 )( xj − xj +1 )...( xj − xn )
. (2.3.4)
Очевидно, lnj ( x ) представляет собой многочлен степени n, удовлетворяющий условию
1, i = j,
lnj ( xi ) = 
0, i ≠ j.
Таким образом, степень многочлена Ln(x) равна n, при x = xi
в формуле (2.3.4) обращаются в нуль все слагаемые, кроме слагаемого с номером j = i, равного yj.
Выпишем отдельно многочлены Лагранжа первой и второй степени, ибо именно они чаще всего используются на практике.
x − x1
x − x0
L1 ( x ) = y0
+ y1
− ïðÿìàÿ,
x0 − x1
x1 − x0
=
L2 ( x ) y0
+ y1
( x − x0 )( x − x2 )
( x − x1 )( x − x2 )
( x0 − x1 )( x0 − x2 )
( x − x0 )( x − x1 )
− ïàðàáîëà. (2.3.5)
Пример 1. Написать интерполяционный многочлен Лагранжа
для функции f(x), значения которой заданы таблицей
( x1 − x0 )( x1 − x2 )
+ y2
+
( x2 − x0 )( x2 − x1 )
i
0
1
2
3
xi
0
0.1
0.3
0.5
yi
-0.5
0
0.2
1.0
В данном случае n = 3, получаем при интерполяции кубическую
параболу. Вычислим вначале lnj ( x );
l3,0
( x − x1 )( x − x2 )( x − x3 )
=
x
( 0 − x1 )( x0 − x2 )( x0 − x3 )
=
( x − 0.1)( x − 0.3)( x − 0.5)
=
( 0 − 0.1)( 0 − 0.3)( 0 − 0.5)
x3 − 0.9x2 + 0.23x − 0.015
.
0.015
33
l3,1≠0, но его значение не понадобится, так как y1 = 0. Не будем его
вычислять.
l3,2 =
l3,3
( x − 0 )( x − 0.1)( x − 0.5)
=
( 0.3 − 0 )( 0.3 − 0.1)( 0.3 − 0.5)
( x − 0 )( x − 0.1)( x − 0.3)
=
.
0
( 5 − 0 )( 0.5 − 0.1)( 0.5 − 0.3)
−
x3 − 0.6x2 + 0.05x
,
0.012
x3 − 0.4x2 + 0.03x
.
0.04
Тогда искомый интерполяционный многочлен Лагранжа третьей степени будет выглядеть так
L3 ( x ) = l3,0 y0 + l3,1y1 + l3,2 y2 + l3,3 y3 = 41.67x3 − 30.00x2 + 7.58 x − 0.50.
§ 2.4. Погрешность интерполяции
Теорема 2.2. Пусть функция f(x) дифференцируема n + 1 раз на
отрезке [a, b], содержащем узлы интерполяции xi , i = 0,n. Тогда
для погрешности интерполяции в точке x∈[a, b] справедливо равенство
f ( x ) − Pn ( x=
)
f(
n +1)
(ζ )
ω
( x ),
(n + 1) ! n+1
в котором ωn +1 ( x=
) ( x − x0 )( x − x1 )( x − x2 )...( x − xn ), à ζ ∈ ( a, b ).
Последнюю
формулу
несколько
модернизируют.
Так
как положение точки ζ неизвестно, то f(n + 1)(ζ) заменяют на
Mn +1 = max f (
[a, b]
n +1)
( x ) . Тогда
f ( x ) − Pn ( x ) ≤
max f ( x ) − Pn ( x ) ≤
[a, b]
Mn +1
( n + 1) !
Mn +1
ω
( x ) èëè
(n + 1) ! n+1
ωn +1 ( x ) , Mn +1 =
max f (
[a, b]
n +1)
(x) ,
ωn + 1(x) = (x-x0) (x-x1) (x-x2)… (x-xn).
Пример 1. Вычислим значение L3(0.2) в предыдущем примере и
оценим точность полученного значения:
L3(0.2) = 41.67∙0.008–30.00∙0.04 + 7.58∙0.2–0.50 = = 0.033–1.200 + 1.516–0.60 = –0.15.
34
ω 4 ( x)
x0
x1
x2
x3
Рис. 2.3. Характер функции ωn(x)
f ( x ) − L3 ( x ) ≤
M4
( x − x0 )( x − x1 )( x − x2 )( x − x3 ) .
1⋅2 ⋅ 3 ⋅ 4
Представление о типичном характере функции ωn + 1(x) дает
рис. 2.3. При выходе x за пределы значений аргумента ωn + 1(x) быстро стремится к плюс бесконечности. Несколько огрубляя оценку
погрешности, можно получить
Mn +1 n +1
max f ( x ) − Ln ( x ) ≤
hmax ,
4 ( n + 1)
[ x0 ,xn ]
где hmax = max hi .
1≤i ≤n
В нашем случае
hmax = 0.2 и
max
[ −0.5,1.0]
f ( x ) − L3 ( x ) ≤
M4
0.24 = 0.0001 ⋅ M4 .
16
Сколь-нибудь достоверную оценку M4 = max f IV ( x ) здесь по-
[ x0 ,xn ]
лучить невозможно. Если предположить M4<1, то ε≈10–4.
§ 2.5. Конечные разности и их свойства
),
f ( xi ), i =
0,n, h =
xi − xi −
Пусть функция y = f(x) задана таблично yi =
i=
0,n, h =
xi − xi −1 =
const – шаг таблицы, x0<x1<…<xn – узлы таблицы.
Величина ∆yi = yi + 1–yi называется конечной разностью первого
порядка функции y = f(x) в точке xi с шагом h.
Конечная разность порядка k функции y = f(x) в точке xi есть
∆kyi = ∆k–1yi + 1–∆k–1yi. Таким образом, конечная разность второго
порядка есть ∆2yi = ∆yi + 1–∆yi = yi + 2–yi + 1–yi + 1 + yi = yi + 2–2 yi + 1 + yi.
Аналогичным образом могут быть определены конечные разности
произвольного порядка.
35
Конечные разности чаще всего располагают в виде таблицы следующим образом:
x
y
x0
y0
x1
y1
x2
y2
x3
y3
...
...
xn–1
yn–1
xn
yn
∆y
∆2y
∆3y
...
∆ny
∆y0
∆2y0
∆y1
∆3y0
∆2y1
∆y2
∆ny0
∆yn–2
∆3yn–3
∆2yn–2
∆yn–1
Теорема 2.3. k-я конечная разность выражается через значения
функции в k + 1 точке по формуле
∆ k yi =
k
∑ ( −1)
j =0
k− j
Ckj yi + j ,
где
Ckj =
k!
.
j !( k − j )!
(2.5.1)
В частности, уже получена ∆2yi = yi + 2–2yi + 1 + yi, аналогично получаются формулы
∆3yi = ∆2yi + 1–∆2yi = yi + 3–2yi + 2 + yi + 1–yi + 2 + 2yi + 1–yi = = yi + 3–3yi + 2 + 3yi + 1–yi, ∆4yi = yi + 4–4yi + 3 + 6yi + 2–4yi + 1 + yi.
Коэффициенты, входящие в эти формулы, можно взять из треугольника Паскаля1.
Теорема 2.4. Пусть функция y = f(x) дифференцируема k раз на
отрезке [xi, xi + k]. Тогда справедливо равенство
1
36
Блез Паскаль (1623–1662) – французский математик.
∆kyi = hkf(k)(ζ), ζ∈(xi, xi + 1). (2.5.2)
Доказательство
Теорема в общем виде доказывается по индукции. Проверим ее
выполнимость только для n = 1.
/
∆f=
) fk+1 − fk ,
k hf ( ζ=
т. е. f ( xk +=
hk ) f ( xk ) + hk f / ( ζ ), ζ ∈ ( xk , xk+1 ).
Но последняя формула – формула Лагранжа для y = f(x). Для последующих n теорема доказывается по индукции. Эта формула может быть применима для оценки погрешности при интерполяции,
∆ k f0
когда функция задана только таблично. Если hk мало, то
hk
k)
(
можно приближенно принять за Mk = max f ( x ) и, таким об-
[ x0 , xk ]
разом, оценить погрешность ∆f(x*).
В реальных вычислениях таблица конечных разностей ∆kyi строится по значениям yi*, каждое из которых содержит погрешность
εj = yj–yj*. Тогда в силу формулы (2.5.1) вычисленные значения ∆kyj*
содержат неустранимые ошибки
(k)
εi
= ∆ k yi − ∆ k yi∗ =
k
∑ ( −1)
j =0
k− j
Ckj εi + j . (2.5.3)
Пусть |εi|≤ε для всех i, тогда можно получить гарантированную
оценку
(k)
εi
≤
k
∑ Ckj ε
k
=ε ∑ Ckj =2k ε . (2.5.4)
=j 0=j 0
§ 2.6. Разделенные разности и их свойства
Пусть функция y = f(x) задана на таблице x0, x1, x2,…, xn значений аргумента с произвольным шагом, причем точки таблицы занумерованы также в произвольном порядке.
f ( xi +1 ) − f ( xi )
Величины f ( xi ; xi +1 ) =
называются разделенными
xi +1 − xi
разностями первого порядка функции y = f(x) в узлах xi, xi + 1. Аналогично определяются разделенные разности более высокого поряд37
ка: f ( xi ; xi +1; xi +2 ) =
f ( xi +1; xi +2 ) − f ( xi ; xi +1 )
– разделенная разность
xi +2 − xi
второго порядка в узлах xi, xi + 1, xi + 2. Разделенной разностью k-го
порядка называется число
f ( xi ; xi +1;...; xi + k ) =
f ( xi +1; xi +2 ;...; xi + k ) − f ( xi ; xi +1;...; xi + k−1 )
xi + k − xi
. (2.6.1)
Эти разности также можно записывать в виде треугольной таблицы:
x0
f(x0)
f(x0; x1)
x1
f(x1)
f(x0; x1; x2)
f(x1; x2)
x2
f(x2)
f(x0; x1; x2; x3)
f(x1; x2; x3)
f(x2; x3)
x3
f(x3)
f(x1; x2; x3; x4)
f(x2; x3; x4)
f(x3; x4)
x4
f(x4)
x5
f(x5)
f(x0; x1; x2; x3; x4)
f(x1; x2; x3; x4; x5)
f(x2; x3; x4; x5)
f(x3; x4; x5)
f(x4; x5)
Разделенные разности обладают рядом замечательных свойств,
изложенных в следующих теоремах.
Теорема 2.5. Разделенная разность f(xi; xi + 1;…; xi + k) является
симметричной функцией своих аргументов xi, xi + 1,…, xi + k (т. е. её
свойства не меняются при любой их перестановке).
Теорема 2.6. Разделенная разность k-го порядка выражается через значения функции следующим образом
f ( x0 ; x1;...; xk ) =
k
=∑
i =0
f ( xi )
( xi − x0 )( xi − x1 )...( xi − xi −1 )( xi − xi +1 )...( xi − xk )
. (2.6.2)
Легко заметить, что под знаком суммы стоят коэффициенты a0,
a1,…, ak обобщенного многочлена Фm(x), которые мы получали при
выводе формулы Лагранжа (2.3.3). Теорема 2.6 доказывается мето38
дом математической индукции; проверим ее самостоятельно лишь
для k = 1.
§ 2.7. Интерполяционный многочлен Ньютона1
Пусть функция y = f(x) задана в n + 1 точках таблично, то есть известны
x0
x1
x2
...
xn
y0
y1
y2
...
yn
Алгебраический многочлен n-й степени
Pn ( x )= f ( x0 ) + f ( x0 ; x1 )( x − x0 ) + f ( x0 ; x1; x2 )( x − x0 ) ×
× ( x − x1 ) + ... + f ( x0 ; x1;...; xn )( x − x0 )( x − x1 )...( x − xn −1 ) =
=
n
∑ f ( x0 ; x1;...; xk ) ωk ( x ),
(2.7.1)
k =0
ωk ( x ) =
( x − x0 )( x − x1 )...( x − xk−1 ), ω0 ( x ) ≡ 1
называется интерполяционным многочленом Ньютона с разделенными разностями. Очевидна аналогия формулы (2.7.1) с формулой
Тейлора. Действительно, так как по теореме 2.7
f ( x0 ; x1;...; xi + k ) =
k
f( ) (ζ )
k!
,
то
Pn ( x =
) f ( x0 ) +
f/ (ζ )
1!
( x − x0 ) +
f // ( ζ )
2!
( x − x0 )( x − x1 ) + ....
Формулы § 2.4 о погрешности интерполяции
f ( x ) − Pn ( x=
)
f(
n +1)
(ζ )
( n + 1) !
ωn +1 ( x )
в точке x, не являющейся узловой, можно уточнить следующим образом:
f ( x=
) − Pn ( x ) f ( x0 ; x1;...; xn ; x ) ωn+1 ( x ). 1
(2.7.2)
Исаак Ньютон (1643–1727) – английский физик, астроном и математик.
39
В практическом плане формула (2.7.1) обладает рядом преимуществ перед формулой Лагранжа. Если, например, по каким-либо
причинам необходимо увеличить степень интерполяционного многочлена на единицу, добавив в таблицу еще один узел xn + 1, то при
использовании формулы Лагранжа это приведет не только к увеличению числа слагаемых, но и к необходимости вычислять каждое
из них заново. В то же время для вычисления Pn(x) по формуле Ньютона (2.7.1) достаточно добавить к Pn(x) лишь очередное слагаемое,
так как Pn + 1(x)–Pn(x) = f(x0; x1;…, xn; xn + 1)ωn + 1(x). Если величина
|xn + 1–x| мала, а функция y = f(x) достаточно гладкая, то справедлива
оценка: f(x0; x1;…; xn; x)≈f(x0; x1;…; xn; xn + 1), из которой, с учетом
предыдущего равенства, следует, что f(x)–Pn(x)≈Pn + 1(x)–Pn(x). Тогда величину
=
εn
Pn +1 ( x ) − Pn ( x ) (2.7.3)
можно использовать для практической оценки погрешности интерполяции.
§ 2.8. Лабораторная работа № 2.
Интерполирование и экстраполирование данных.
Интерполяционные многочлены Лагранжа и Ньютона
в пакете Mathcad [4, 5]
В практических расчётах чаще всего используют интерполяционные многочлены невысоких степеней. Из формул (2.3.4) и (2.7.1)
видно, что единственный, восстанавливаемый без дополнительных
условий многочлен Лагранжа или Ньютона должен иметь степень
на единицу меньшую числа точек интерполяционной таблицы.
Обычно по исходным данным именно такой многочлен и восстанавливается. По найденному многочлену находят приближённые значения функции для любых значений аргумента, лежащих между
узлами заданной сетки.
Рассмотрим эти процессы подробно средствами пакета Mathcad
[4, 5]. Сначала реализуем самые простые алгоритмы вычисления
конечных и разделённых разностей по формулам (2.5.1) и (2.6.2).
Это очень простые алгоритмы, и никаких сложностей с их трактовкой не должно быть. Например, подпрограмма Konrazn находит
∆kyi, где k – порядок конечной разности, а i – номер конечной разности в k – ом столбце таблицы.
40
Konrazn ( y , k , i) :=
Res ← 0
n←k+1
for j ∈ 1 .. n
m←j−1
l← n−j
i1 ← 1
l
i1 ← ( −1) if l ≠ 0
cnk ← CNK ( k , m)
Res ← Res + i1⋅cnk ⋅y i+ m
Res
Подпрограмма CNK вычисляет значение числа сочетаний Cnk ,
входящее в формулу (2.5.1), а подпрограмма Konrazn реализует
саму эту формулу.
41
Аналогичные подпрограммы можно предложить для вычисления разделённых разностей.
Rasdrazn ( x , y , k1 , k2) :=
f ←0
for i ∈ k1 .. k2
a←1
for j ∈ k1 .. k2
a ← a ⋅( xi − xj ) if i ≠ j
f ←f +
yi
a
f
Её параметры имеют тот же смысл, что и в предыдущем случае:
x, y – векторы исходныхъ данных, k1 и k2 – порядковые номера
аргумента, входящего в разделённую разность f xk1 ; xk1 +1;...; xk2 ,
1≤k1<k2, k2≤n.
Рассмотрим теперь формулы (2.3.4) и (2.7.1), которые представляют интерполяционные многочлены Лагранжа и Ньютона, причём
последний через разделённые и конечные разности. Во всех этих
формулах может быть использована функция ωn(x) = (x–x1)∙(x–x2)∙…
∙(x–xn), ω1(x)≡1. Нахождение её коэффициентов включает раскрытие скобок и приведение подобных членов. Без сомнения, можно
предложить несколько вариантов этой программы, которые будут
длиннее или короче друг друга в зависимомти от особенностей выбранного алгоритма. Желающие могут потренироваться в составление подоб-ных программ самостоятельно. Один из вариантов может
быть, напримр, таким (подпрограмма omega).
С помощью этой подпрограммы находится матрица an×(n + 1), в которой по строкам записаны коэффициенты всех функций ωn(x) от
первой степени ω1(x) до n – степени ωn(x), причём коэффициенты
расположены начиная со старшей степени аргумента.
(
omega( x , n) :=
for j ∈ 1 .. n
aj , 1 ← 1
j
aj , 2 ←
∑
xi
i= 1
if n
1
a1 , 2 ← ( −1) ⋅a1 , 2
return a
42
for i ∈ 2 .. n
i
ai , i+ 1 ←
∏
j=1
xj
)
if n
1
a1 , 2 ← ( −1) ⋅a1 , 2
return a
for i ∈ 2 .. n
i
ai , i+ 1 ←
∏
xj
j=1
if n
2
a1 , 2 ← −a1 , 2
a2 , 2 ← −a2 , 2
return a
for i ∈ 3 .. n
for j ∈ i .. n
aj , i ← aj −1 , i + aj −1 , i−1 ⋅xj
for i ∈ 2 , 4 .. n + 1
for j ∈ 1 .. n
aj , i ← ( −1) ⋅aj , i
a
С учётом подпрограммы omega(x,n) формула (2.3.4), вычисляющая многочлен Лагранжа на произвольной сетке реализуется подпрограммами Lnj(x,n,j) и Lagn(x,y,n).
43
Lagn( x , y , n) :=
n1 ← n + 1
for i ∈ 1 .. n1
a1 ← Lnj ( x , n , i)
for j ∈ 1 .. n1
a2i , j ← a1j ⋅y i
for i ∈ 1 .. n1
c←0
for j ∈ 1 .. n1
c ← c + a2j , i
bi ← c
b
После работы подпрограммы Lagn в массиве b находятся коэффициенты многочлена Лагранжа Ln(x) = a1xn + a2xn–1 + … + anx + an + 1.
Аналогичным образом строятся подпрограммы, вычисляющие
многочлен Ньютона по разделенным разностям (формула 2.7.1) и конечным разностям (формула 2.3.4).
Подпрограмма PolinNewt реализует формулу (2.7.1) и выдаёт
вектор коэффициентов интерполяционного многочлена Ньютона
степени m (1≤m≤n–1).
44
Наконец, подпрограмма, реализующая формулу Ньютона для
интерполяции вперёд может быть, например, такой:
Подпрограмма выдаёт коэффициенты интерполяционного многочлена Ньютона с использованием конечных разностей, т.е. при
постоянном шаге сетки для интерполяции вперёд. Здесь bi – коэффициенты и 1≤i≤m + 1.
Аналогично может быть реализована подпрограмма для интерполяции назад по формуле Ньютона. Рекомендуем желающим
45
сделать это самостоятельно. Приведём теперь основную программу
в пакете Mathcad, использующую многочлены Лагранжа и Ньютона по экспериментальным данным.
ORIGIN: = 1
 0.35 
 2.73951 




 0.41 
 2.30080 
 0.47 
 1.96464 
x := 
 y := 

 0.51 
 1.78776 
 0.56 
 1.59502 
 0.64 
 1.34310 




Далее должны следовать тексты подпрограмм Konrazn, CNK,
Rasdrazn, omega, Lnj, Lagn, PolinNewt, PolinNewtConst.
n: = 6
m: = 5
Вычислим конечные и разделённые разности.
i: = 1..5
bi,1: = Rasdrazn(x,y,i,i + 1)
i: = 1..4
bi,2: = Rasdrazn(x,y,i,i + 2)
i: = 1..3
bi,3: = Rasdrazn(x,y,i,i + 3)
i: = 1..2
bi,4: = Rasdrazn(x,y,i,i + 4)
bi,5: = Rasdrazn(x,y,i,6)
 −7.312
 −5.603

b =  −4.422
 −3.855

 −3.149
14.243 −15.227 −102.233 825.706 
11.807 −36.696
137.222
0
0
0
6.302
−5.135
5.429
0
0
0
0
0
0
0
i: = 1..m a1i: = Konrazn(y,1,i)
46
 −0.439 
 −0.336 


a1 =  −0.177 
 −0.193 


 −0.252 






Построим теперь интерполяционные многочлены. Начнём с многочленов Лагранжа, причём получим многочлены с пятой по первую степень для сравнения.
Многочлен пятой степени абсолютно точно восстанавливает значение функции в узлах сетки.
b5: = Lagn(x,y,5)
5
4
3
2
L5 ( x) := b51 ⋅x + b52 ⋅x + b53 ⋅x + b54 ⋅x + b55 ⋅x + b56
i: = 1..n yL5i: = L5(x i)
 825.706 
 2.74 
 2.74 




 −2.001 × 103 
 2.301 
 2.301 


3
 1.965 
 1.965 
b5 =  1.899 × 10  yL5
=
 y=



 1.788 
 1.788 
 −870.467 
 1.595 
 1.595 
 184.904 
 1.343 
 1.343 
 −11.052 






Многочлен первой степени уже содержит ошибки интерполяции
в узлах.
b1: = Lagn(x,y,1)
L1 ( x) := b11 ⋅x + b12
i := 1 .. n
yL1 i := L1 ( xi)
i: = 1..n yL1i: = L1(x i)
 2.74 


 2.301 
 1.862 
yL1 = 

 1.57 
 1.204 
 0.619 


 −7.312 

 5.299 
b1 = 
Приведём графики функции и её последней аппроскимации (см.
далее).
С помощью полученных многочленов можно легко вычислять
значение функции и между узлов сетки, например:
L5(0.45) = 2.066
47
3
yi
2
yL1 i
1
0
1
2
3
4
5
L1(0.45) = 2.008
6 i
Восстановим, наконец, интерполяционные многочлены Ньютона по разделённым и конечным разностям. Рассмотрим сначала интерполирование по разделённым разностям, соответствующая подпрограмма – PolinNewt. Опять выделем многочлены нескольких
разных степеней.
bb5: = PolinNewt(x,y,6,5)
5
4
3
2
P5 ( x) := bb51 ⋅x + bb52 ⋅x + bb53 ⋅x + bb54 ⋅x + bb55 ⋅x + bb56
i: = 1..n yP5i: = P5(x i)
 825.706 


 2.74 
 2.74 




 −2.001 × 103 
2.301


 2.301 


3




bb5 =  1.899 × 10  yP5 = 1.965 y = 1.965






 1.788 
 1.788 
 −870.467 
 1.595 
 1.595 
 184.904 
 1.343 
 1.343 
 −11.052 






bb3: = PolinNewt(x,y,3)
3
2
P3 ( x) := bb31 ⋅x + bb32 ⋅x + bb33 ⋅x + bb34
i: = 1..n yP3i: = P3(x i)
 2.74 


 2.301 
 1.965 
 −15.227 

 yP3 = 

32.973 
1.788 


bb3 =
 −25.761 
 1.61 


 1.396 
 8.37 


bb2 := PolinNewt( x , y , 6 , 2)
48
bb1: = PolinNewt(x,y,1)
P1 ( x) := bb11 ⋅x + bb12
i: = 1..n yP1i: = P1(x i)
 2.74 


 2.301 
 1.862 
yP1 = 

 1.57 
 1.204 
 −7.312 
bb1 = 

 0.619 
 5.299 


Видно, что многочлены Лагранжа и Ньютона одинаковых степеней полностью совпадают, т.е. Ln(x)≡Pn(x).
Рассмотрим интерполяционные многочлены Ньютона по конечным разностям. Этот алгоритм реализован подпрограммой
PolinNewtConst. Для неё нужно задать данные на равномерной сетке. Однако нужно иметь в виду, что эта подпрограмма может создать многочлен степени меньше заданной, если коэффициенты при
старших степенях меньше заданной точности ε.
ε
−6
:= 10
 0.01 
 9.9182 




0.06


 9.5193 
 0.11 
 9.1365 
x := 
 y := 

 0.16 
 8.7691 
 0.21 
 8.4164 
 0.26 
 8.0779 




bc5: = PolinNewtConst(x,y,6,5,ε)
3
2
Pc5 ( x) := bc51 ⋅x + bc52 ⋅x + bc53 ⋅x + bc54
i: = 1..6 yPc5i: = Pc5(x i)
 −2.333 × 10− 3 


0.161

bc5 = 


−7.989


9.998


49
 9.918 
 9.918 




 9.519 
 9.519 
 9.136 
 9.121 
y=
 yPc5 = 

 8.769 
 8.724 
 8.416 
 8.327 
 8.078 
 7.932 




bc1: = PolinNewtConst(x,y,6,1,ε)
Pc1 ( x) := bc11 ⋅x + bc12
i: = 1..6 yPc1i: = Pc1(x i)
 −7.978 

 9.998 
bc1 = 
 9.918 


 9.519 
 9.12 
yPc1 = 

 8.721 
 8.323 
 7.924 


Задание 1 к § 2.8. По номеру Вашей фамилии в журнаде преподавателя выбрать вариант задания и по заданным исходным данным
построить интерполяционные многочлены Лагранжа и Ньютона
максимальных степеней на неравномерных сетках [6].
1.
№
варианта
1, 11, 21
xi
yi
0.20
0.80
1.20
1.70
2.35
3.00
3.14
3.61
10.2316 10.9590 11.4725 12.1483 13.0120 14.0976 16.2134 19.0218
2.
№
варианта
xi
yi
50
2, 12, 22
0.45
0.47
0.52
0.61
0.66
0.70
0.74
2.5742 2.3251 2.0934 1.8620 1.7493 1.6210 1.3418
0.79
1.1212
3.
№
варианта
3, 13, 23
xi
yi
1.11
1.59
2.10
2.96
3.54
4.00
5.36
5.78
9.0542 6.6166 4.6917 3.3511 2.7995 2.3652 1.9418 1.8291
№
варианта
4, 14, 24
xi
yi
0.43
0.48
0.55
0.62
0.70
0.75
0.77
0.83
1.6360 1.7323 1.8769 2.0335 2.2285 2.3597 2.4103 2.6978
№
варианта
5, 15, 25
xi
yi
6.81
7.35
8.00
8.85
9.34
9.95
10.25
11.00
8.0866 8.9492 10.2964 12.0966 13.4087 15.2368 18.1109 21.5445
№
варианта
6, 16, 26
xi
yi
0.05
0.19
0.21
0.27
0.32
0.34
0.39
0.45
4.4817 4.9530 5.4739 6.0496 6.6859 7.3891 8.1662 9.0250
№
варианта
7, 17, 27
xi
yi
0.01
0.11
0.16
0.23
0.28
0.39
0.46
0.50
9.9182 9.5194 9.1365 8.8769 8.4164 8.0779 7.7530 7.4412
№
варианта
8, 18, 28
xi
yi
1.30
1.45
1.65
1.90
2.40
2.55
2.80
3.20
4.7556 5.3533 6.4552 7.5618 8.6734 9.7904 10.9131 12.0419
№
варианта
9, 19, 29
xi
yi
3.50
4.55
5.60
6.20
7.75
8.80
9.45
10.95
33.1154 34.8133 36.5982 38.4747 40.4473 43.5211 44.7012 46.9931
4.
5.
6.
7.
8.
9.
51
10.
№
варианта
10, 20, 30
xi
1.01
1.08
1.11
1.21
1.26
1.33
1.46
1.51
yi 12.6183 12.7644 12.9122 13.0617 13.2130 13.3660 13.5207 13.8357
Задание 2 к § 2.8. По номеру Вашего варианта построить многочлен Ньютона максимально возможной степени на равномерной сетке по конечным разностям.
1.
№
варианта
2.
xi
yi
xi
yi
1, 5, 10, 15, 25
4.35
16.359
5.60
23.597
4.60
17.733
5.85
25.081
№
варианта
xi
yi
xi
yi
4.85
18.768
6.10
26.527
5.10
20.033
6.35
28.394
5.35
22.284
6.60
29.99
2, 6, 11, 16, 26
1.15
66.165
3.15
56.558
1.55
63.998
3.55
54.680
1.95
61.965
3.95
52.722
2.35
60.055
4.35
50.522
2.75
58.255
4.75
48.11
3.
№
варианта
3, 7, 12, 17, 27
xi
0.10
0.16
0.22
0.28
0.34
yi
1.261
1.276
1.291
1.306
1.321
xi
0.40
0.46
0.52
0.58
0.64
yi
1.336
1.352
1.367
1.383
1.399
4.
№
варианта
52
4, 8, 13, 18, 28
xi
1.350
1.355
1.360
1.365
1.370
yi
4.255
4.353
4.455
4.561
4.673
xi
1.375
1.380
1.385
1.390
1.395
yi
4.790
4.913
5.041
5.177
5.320
5.
№
варианта
5, 9, 14, 19, 29
xi
1.20
1.21
1.22
1.23
1.24
yi
10.60
11.32
11.96
12.53
13.03
xi
1.25
1.26
1.27
1.28
1.29
yi
13.47
13.87
14.23
14.56
14.88
§ 2.9. Лабораторная работа № 2.
Интерполяционные многочлены Лагранжа и Ньютона
в пакете Matlab [7].
Все приведённые ниже подпрограммы являются полными аналогами соответствующих подпрограмм, описанных в пакете Mathcad.
Все они моделируют те же самые алгоритмы, поэтому при необходимости следует смотреть их описание в § 2.8. Добавлены две подпрограммы MnLag и MnNewt, вычисляющие численные значения
многочленов Лагранжа и Ньютона по найденным коэффициентам
этих многочленов.
function Res=Konrzn(y,k,i)
%Функция вычисляет конечные разности по формуле (2.5.1)
Res=0;
n=k+1;
for j=1:n
m=j-1;
l=n-j;
i1=1;
if l~=0
i1=(-1)^l;
end;
cnk=CNK(k,m);
Res=Res+i1*cnk*y(i+m);
end;
end
function Res=CNK(n,k)
%Функция вычисляет значение числа сочетаний.
n1=1;
k1=1;
nk=1;
53
for i=1:n
n1=n1*i;
end;
if k~=0
for i=1:k
k1=k1*i;
end;
end;
j=n-k;
if j~=0
for i=1:j
nk=nk*i;
end;
end;
Res=n1/(k1*nk);
end
function f=Rasdrzn(x,y,k1,k2)
%Функция вычисляет разделённую разность по формуле (2.6.2)
f=0;
for i=k1:k2
a=1;
for j=k1:k2
if i~=j
a=a*(x(i)-x(j));
end;
end;
f=f+y(i)/a;
end;
end
function a=omega(x,n)
%Подпрограмма omega вычисляет функцию
%omegan(k)=(x-x(0))...(x-x(k-1))(x-x(k+1))...(x-x(n))
%по формуле (2.7.1)
for j=1:n
a(j,1)=1;
c=0;
for i=1:j
c=c+x(i);
end;
54
a(j,2)=c;
end;
if n==1
a(1,2)=-a(1,2);
return;
end;
for i=2:n
c=1;
for j=1:i
c=c*x(j);
end;
a(i,i+1)=c;
end;
if n==2
a(1,2)=-a(1,2);
a(2,2)=-a(2,2);
return;
end;
for i=3:n
for j=i:n
a(j,i)=a(j-1,i)+a(j-1,i-1)*x(j);
end;
end;
for i=2:2:n+1
for j=1:n
a(j,i)=-a(j,i);
end;
end;
end
function a1=Lnj(x,n,j)
%Подпрограмма вычисляет функциональные коэффициенты
%многочлена Лагранжа, необходимые для расчёта численных
%коэффициентов, по формуле (2.3.4)
n1=n+1;
b=1;
for i=1:n1
if i~=j
b=b*(x(j)-x(i));
end;
end;
55
k=1;
k1=j-1;
if k<=k1
for i=k:k1
x1(i)=x(i);
end;
end;
k=j+1;
if k<=n1
for i=k:n1
x1(i-1)=x(i);
end;
end;
a=omega(x1,n);
for i=1:n1
a1(i)=a(n,i)/b;
end;
end
function b=Lgn(x,y,n)
%Подпрограмма Lgn вычисляет численные коэффициенты
%многочлена Лагранжа по формуле (2.3.4)
n1=n+1;
for i=1:n1
a1=Lnj(x,n,i);
for j=1:n1
a2(i,j)=a1(j)*y(i);
end;
end;
for i=1:n1
c=0;
for j=1:n1
c=c+a2(j,i);
end;
b(i)=c;
end;
end
function y=MnLag(x,n,a)
%Подпрограмма вычисляет численное значение многочлена
%Лагранжа для заданного значения аргумента х. n-раз56
%мерность массива а, в котором хранятся коэффициенты
%этого многочлена
y=0;
for i=1:n-1
y=y+a(i)*x^(n-i);
end;
y=y+a(n);
end
function b=PlnNwt(x,y,m)
%Подпрограмма вычисляет коэффициенты многочлена
%Ньютона по разделённым разностям по формуле(2.7.1)
a=omega(x,m);
for i=1:m
for j=1:i+1
c=Rasdrzn(x,y,1,i+1);
a(i,j)=a(i,j)*c;
end;
end;
b(1)=a(m,1);
b1=0;
for i=1:m
b1=b1+a(i,i+1);
end;
b(m+1)=b1+y(1);
if m==1
return;
end;
for i=1:m-1
k=m-i+1;
b1=0;
for j=1:k
b1=b1+a(i+j-1,j);
end;
b(k)=b1;
end;
end
function b=PNConst(x,y,n,m,eps)
%Подпрограмма вычисляет коэффициенты многочлена Ньютона
%для интерполяции вперёд по конечным разностями
57
a=omega(x,m);
h=x(2)-x(1);
h1=h;
c=1;
if m>2
for i=1:n-1
M=Konrzn(y,i,1);
if abs(M)<eps
m=i-1;
break;
end;
end;
end;
for i=1:m
c=c*i;
M=Konrzn(y,i,1);
b(i)=M/(c*h1);
for j=1:i+1
a(i,j)=a(i,j)*b(i);
end;
end;
b(1)=a(m,1);
b1=0;
for i=1:m
b1=b1+a(i,i+1);
end;
b(m+1)=b1+y(1);
if m>1
for i=1:m-1
k=m-i+1;
b1=0;
for j=1:k
b1=b1+a(i+j-1,j);
end;
b(k)=b1;
end;
end;
end
function y=MnNewt(x,n,a)
%Подпрограмма вычисляет численное значение многочлена
58
%Ньютона для заданного значения аргумента х. n-раз%мерность массива а, в котором хранятся коэффициенты
%этого многочлена
y=0;
for i=1:n-1
y=y+a(i)*x^(n-i);
end;
y=y+a(n);
end
Далее следует текст основной программы.
>> clear
>> x = [0.35 0.41 0.47 0.51 0.56 0.64];
>> y = [2.73951 2.30080 1.96464 1.78776 1.59502 1.34310];
Задана неравномерная сетка данных.
>> n = 6;
>> m = 5;
>> for i = 1:5
b(i,1) = Rasdrzn(x,y,i,i + 1);
end;
>> for i = 1:4
b(i,2) = Rasdrzn(x,y,i,i + 2);
end;
>> for i = 1:3
b(i,3) = Rasdrzn(x,y,i,i + 3);
end;
>> for i = 1:2
b(i,4) = Rasdrzn(x,y,i,i + 4);
end;
>> b(1,5) = Rasdrzn(x,y,1,6);
Вычислена матрица разделённых разностей.
>> disp(b)
-7.3118
14.2431
-15.2274
-102.2327
825.7057
-5.6027
11.8067
-36.6963
137.2220
0
-4.4220
6.3022
-5.1352
0
0
-3.8548
5.42920 00
-3.1490
00 00
>> for i=1:m
a(i)=Konrzn(y,1,i);
end;
Вычислен столбец конечных разностей.
>> disp(a)
59
-0.4387 -0.3362 -0.1769 -0.1927 -0.2519
>> b5 = Lgn(x,y,5)
Найдены коэффициенты многочлена Лагранжа пятой степени.
b5 = 1.0e + 03 *
0.8257 -2.0014 1.8986 -0.8705 0.1849 -0.0111
>> for i = 1:n
yL5(i) = MnLag(x(i),6,b5);
end;
>> disp(yL5)
2.7395 2.3008 1.9646 1.7878 1.5950 1.3431
>> b1 = Lgn(x,y,1);
>> disp(b1)
Найдены коэффициенты многочлена Лагранжа первой степени.
-7.3118
5.2987
>> for i = 1:n
yL1(i) = MnLag(x(i),2,b1);
end;
>> disp(yL1)
2.7395 2.3008 1.8621 1.5696 1.2040 0.6191
>> a1 = MnLag(0.45,6,b5)
a1 = 2.0656
>> a2 = MnLag(0.45,2,b1)
a2 = 2.0083
Найдены коэффициенты многочлена Ньютона пятой степени.
>> bb5 = PlnNwt(x,y,5);
>> disp(bb5)
1.0e + 03 *
0.8257 -2.0014 1.8986 -0.8705 0.1849 -0.0111
for i = 1:n
yP5(i) = MnNewt(x(i),6,bb5);
end;
>>disp(yP5);
2.7395 2.3008 1.9646 1.7878 1.5950 1.3431
>> bb3 = PlnNwt(x,y,3);
Найдены коэффициенты многочлена Ньютона третьей степени.
>> disp(bb3)
-15.2274
32.9728
-25.7609
>> for i = 1:n
yP3(i) = MnNewt(x(i),4,bb3);
end;
60
8.3695
>> disp(yP3)
2.7395 2.3008 1.9646 1.7878 1.6095 1.3964
>> bb1 = PlnNwt(x,y,1);
Найдены коэффициенты многочлена Ньютона первой степени.
>> for i = 1:n
yP1(i) = MnNewt(x(i),2,bb1);
end;
>> disp(yP1)
2.7395 2.3008 1.8621 1.5696 1.2040 0.6191
eps = 10^-6;
>> x1 = [0.01 0.06 0.11 0.16 0.21 0.26];
>> y1 = [9.9182 9.5193 9.1365 8.7691 8.4164 8.0779];
Введены данные на равноотстоящей сетке для интерполирование по формуле Ньютона по конечным разностям.
bc5 = PNConst(x1,y1,n,m,eps);
>> disp(bc5)
-0.0023
0.1614
-7.9893
9.9981
>> for i = 1:n
yPc5(i) = MnNewt(x1(i),4,bc5);
end;
>>disp(yPc5)
9.9182 9.5193 9.1212 8.7239 8.3274 7.9317
>> bc1 = PNConst(x1,y1,6,1,eps);
>> for i = 1:n
bc1(i) = MnNewt(x1(i),2,bc1);
end;
>> disp(bc1)
-7.9780
9.9980
>> for i = 1:n
yPc1(i) = MnNewt(x(i),2,bc1);
end;
>> disp(yPc1)
9.9182 9.5193 9.1204 8.7215 8.3226 7.9237
Задание 1 к § 2.9. По номеру Вашей фамилии в журнаде преподавателя выбрать вариант задания и по заданным исходным данным,
приведённым на стр. 49–51 построить интерполяционные многочлены Лагранжа и Ньютона максимально возможных степеней на
неравномерных сетках.
Задание 2 к § 2.9. По номеру Вашей фамилии в журнаде преподавателя выбрать вариант задания на стр. 50–53 и по заданным исход61
ным данным построить интерполяционные многочлены Лагранжа
и Ньютона максимальных степеней на равномерных сетках.
§ 2.10. Интерполяционные формулы Гаусса,
Стирлинга и Бесселя
Формулы Гаусса1. Выпишем подробно таблицу конечных разностей для того, чтобы отмечать задействованные элементы этих таблиц в далее рассматриваемых формулах (табл.).
– вторая интерполяционная формула Гаусса,
– первая интерполяционная формула Гаусса,
– формула Бесселя.
Таблица
x
y
x–4
y–4
∆y
∆2y
∆3y
∆4y
∆5y
∆6y
∆y–4
x–3
∆2y–4
y–3
∆y–3
x–2
∆3y–4
∆2y–3
y–2
∆y–2
x–1
∆3y–3
∆2y–2
y–1
∆y–1
x0
y1
∆6y–3
∆5y–2
∆4y–1
0
∆3y0
∆y2
x3
∆4y–2
∆2y1
y2
∆6y–4
∆5y–3
∆3y–1
∆2y
∆y1
x2
∆4y–3
∆2y–1
y0
∆5y–4
∆3y–2
∆y0
x1
∆4y–4
∆6y–2
∆5y–1
∆4y0
∆3y1
∆2y2
y3
∆y3
x4
y4
1 Карл Фридрих Гаусс (1777–1855) – немецкий математик, астроном и геодезист.
62
Первая интерполяционная формула Гаусса для интерполяции
вперед имеет вид
P ( x ) = y0 +
+
∆y0
∆2 y−1
∆3 y−1
q+
q ( q − 1) +
( q − 1) q ( q + 1) +
1!
2!
3!
∆4 y−2
∆5 y
( q − 2)( q − 1) q ( q + 1) + −2 ( q − 2)( q − 1) q ( q + 1)( q + 2) +
4!
5!
... +
∆2n −1y−(n −1)
(2n − 1) !
+
( q − n + 1)( q − n + 2)...( q + n − 1) +
∆2n y−n
( q − n )( q − n + 1)...( q + n − 1).
(2n ) !
(2.10.1)
Формулы Гаусса применяются для интерполирования в середине таблицы вблизи точки x0. При этом формула (2.10.1) применяется
при x>x0, а формула (2.10.2) – вторая интерполяционная формула
Гаусса – при x<x0.
∆y−1
∆2 y−1
∆3 y−2
q+
q ( q + 1) +
( q − 1) q ( q + 1) +
1!
2!
3!
∆4 y−2
∆2n −1y−n
( q − 1) q ( q + 1)( q + 2) + ... +
( q − n + 1)( q − n + 2)...
4!
(2n − 1) !
P ( x ) = y0 +
...( q + n − 1) + +
∆2n y−n
( q − n + 1)( q − n + 2)...( q + n ),
(2n ) !
q=
x − x0
.
h
(2.10.2)
В обеих формулах используются разности, расположенные вблизи середины таблицы (они помечены). Остаточный член формул
(2.10.1) и (2.10.2) может быть записан в виде
R2n
=
h2n +1f (
2n +1)
(ζ )
(2n + 1) !
ζ ∈ ( a, b ),
(
)(
) (
)
q q2 − 12 q2 − 22 ... q2 − n2 ,
x0 , x±1,..., x±n ∈ ( a, b ).
(2.10.3)
Интерполяционная формула Стирлинга1 представляет собой
среднее арифметическое (2.10.1) и (2.10.2), то есть среднее арифметическое первой и второй формулы Гаусса:
1
Джемс Стирлинг (1692–1770) – английский математик.
63
P(x) =
y0 +
∆y0 + ∆y−1
∆2 y−1 2 ∆3 y−2 + ∆3 y−1 2 2
q+
q +
q −1 q +
2
2!
2 ⋅ 3!
(
)
∆4 y−2 2 2 2 ∆5 y−3 + ∆5 y−2 2 2
q −1 q +
q − 2 q q2 − 12 + ...
4!
2 ⋅ 5!
(
+
)
(
∆2n −1y−n + ∆2n −1y−(n −1)
2 ⋅ ( 2n − 1) !
+
∆2n y−n
(2n ) !
)(
(
)
)
q2 − ( n − 1)2  q2 − n2 ...q2 +


(
)
q2 − ( n − 1)2  ... q2 − 12 q2 .


(2.10.4)
Остаточный член этой формулы имеет тот же вид, что и для формул Гаусса, то есть вид (2.10.3). Формула (2.10.4) применяется для
интерполирования в середине таблицы при значениях q, близких
к нулю. Практически ее используют при |q|≤0.25.
Интерполяционная формула Бесселя1 имеет вид:
=
P(x)
y0 + y1
1  ∆2 y−1 + ∆2 y0

+ ∆y0  q −  +
q ( q − 1) +
2
2
2 ⋅ 2!

∆3 y−1
∆4 y + ∆4 y−1
1
( q − 1)  q −  q + −2
( q − 2)( q − 1) q ( q + 1) + ...
3!
2
2 ⋅ 4!

+
+
∆2n y−n + ∆2n y−n +1
q ( q − 1)( q + 1)...( q + n − 1) +
2 ⋅ ( 2n ) !
∆2n +1y−n 
1
q − q ( q − 1)( q + 1)( q − 2 )( q + 2 )...( q − n )( q + n − 1). (2.10.5)
(2n + 1) !  2 
Ее остаточный член можно записать в виде
R2n
h2n +2 f (
2n +2 )
(2n + 2) !
(ζ )
(
)(
) (
)
q q2 − 12 q2 − 22 ... q2 − n2 ( q − n − 1),
ζ ∈ ( a, b ), x0 , x±1,..., x±n ∈ ( a, b ).
(2.10.6)
Формула Бесселя используется для интерполирования в середине таблицы при значениях q, близких к 0.5, практически при
0.25 ≤ q ≤ 0.75. Наиболее простой вид имеет формула (2.10.5) при
q = 0.5, так как все члены, содержащие разности нечетного порядка, пропадают. Этот специальный случай формулы Бесселя назы1
64
Фридрих Вильгельм Бессель (1784–1846) – немецкий астроном и геодезист
вают формулой интерполирования на середину. Ее обычно используют для уплотнения таблиц. Общая особенность формул (2.10.1),
(2.10.2), (2.10.4) и (2.10.5) заключается в том, что слагаемые в них
убывают значительно быстрее, чем в формулах Ньютона, поэтому
для достижения заданной точности нужно меньше вычислений.
Пример 1. Используя формулу Бесселя, уплотнить таблицу значений функции y = f(x) в два раза.
i
x
f(x)
-2
2.0
1.5906
∆y
∆2y
∆3y
∆4y
1549
-1
2.1
1.7455
137
1686
0
2.2
1.9141
14
151
1
1837
1
2.3
2.0978
15
166
2
2003
2
2.4
2.2981
3
2.5
2.5167
17
183
2186
1
Выпишем формулу (2.10.5) при q = . Получим
2
(
)
4
4
y0 + y1 ∆2 y−1 + ∆2 y0 3 ∆ y−2 + ∆ y−1
P(x) = −
.
+
2
16
256
По имеющейся таблице и по только что написанной формуле можно
получить значение функции только для x = 2.25. Тогда
2.25 − 2.20
=
q = 0.5 и f(2.25) = 2.0060–0.0020 + 0.0000 = 2.0040. По
0.1
данной таблице можно получить еще два значения функции для
x = 2.15 и x = 2.35, так как вклад последнего члена формулы для P(x)
меньше 4∙10–6, поэтому для x = 2.15 и x = 2.35 четвертые разности
не понадобятся (их нет для значений x = 2.15 и x = 2.35). Структура
формулы для P(x) для этих значений не изменится, только разности, входящие в формулу, сдвинутся по таблице для x = 2.15 вверх, а
для x = 2.35 – вниз на одну позицию (для x = 2.15 они обведены пунктиром):
65
f ( 2.15 ) =
1.9141 + 1.7455 0.0137 + 0.0151
−
= 1.8298 − 0.0018 = 1.8280,
2
16
и
f ( 2.35 ) =
66
2.2981 + 2.0978 0.0166 + 0.0183
−
= 2.1980 − 0.0022 = 2.1958.
2
16
3. МЕТОД НАИМЕНЬШИХ КВАДРАТОВ И СПЕЦИАЛЬНЫЕ
ИНТЕРПОЛЯЦИОННЫЕ МНОГОЧЛЕНЫ [8]
§ 3.1. Постановка задачи и вывод формул
метода наименьших квадратов
Задача наименьших квадратов возникает в самых различных
областях науки и техники, например, к ней приходят при статистической обработке экспериментальных данных. Пусть функция
y = f(x) задана таблицей приближенных значений yi ≈ f ( xi ), i =
0,n,
полученных с ошибками εi = yi − yi , ãäå yi = f ( xi ). Предположим,
что для аппроксимации функции y = f(x) используется линейная
модель: y = Фm(x) = a0j0(x) + a1j1(x) + … + amjm(x), где j0(x), j1(x),…,
jm(x) – заданные базисные функции, a0, a1,…, am – параметры модели, являющиеся одновременно коэффициентами обобщенного
многочлена. Часто используется одна из наиболее простых моделей
y = Pm ( x ) = a0 + a1x + ... + am xm – полиномиальная модель.
В случае, когда уровень неопределенности исходных данных высок, нет смысла требовать точного совпадения значений обобщенного многочлена Фm(x) в точках xi с заданными значениями yi, то есть
использовать интерполяцию. Кроме того, при интерполяции происходит повторение ошибок наблюдений, в то время как при обработке экспериментальных данных желательно сглаживание ошибок.
Тем не менее нужно потребовать, чтобы
 a0 ϕ0 ( x0 ) + a1ϕ1 ( x0 ) + ... + am ϕm ( x0 ) ≈ y0 ,

 a0 ϕ0 ( x1 ) + a1ϕ1 ( x1 ) + ... + am ϕm ( x1 ) ≈ y1,

........................................................
 a0 ϕ0 ( xn ) + a1ϕ1 ( xn ) + ... + am ϕm ( xn ) ≈ yn .

(3.1.1)
Эта же система в матричной форме имеет вид
Pa ≈ y. (3.1.2)
Существуют разные дополнительные критерии, позволяющие
решить эту систему, так как в общем случае при m<n она, вообще
говоря, несовместна. Выбор a, позволяющий наилучшим образом
удовлетворить (3.1.2) в методе наименьших квадратов, состоит в том
минимизируется среднее квадратическое уклонение
δ=
( Φm , y )
2
1 n
∑ ( Φm ( xi ) − yi ) . n + 1 i =0
(3.1.3)
67
Итак, линейная задача метода наименьших квадратов состоит
в следующем. Надо найти обобщенный многочлен Фm(x), для которого среднеквадратическое уклонение δ(Фm,y)⇒min. Этот многочлен называется многочленом наилучшего среднего квадратического
приближения. Так как набор функций {ϕi ( x )} всегда заранее опреm
0
(
∗
делен, задача заключается в нахождении вектора a = a0∗ , a1∗ ,...am
)
T
при условии δ(Фm,y)⇒min. Для решения нашей задачи воспользуемся общим приемом дифференциального исчисления, а именно
выпишем необходимые условия экстремума функции нескольких
переменных (приравняем частные производные нулю):
 ∂S
0=
, k 0,1,...,m, ãäå
 ∂=
 ak

n m
2
=
S ∑ ∑ aj ϕ j ( xi ) − yi .

=i 0=j 0

(
(3.1.4)
)
Тогда получим
n m
∂S
= 2 ∑ ∑ aj ϕ j ( xi ) − yi ⋅ ϕk ( x=
i ) − 0, k 0,m.
∂a k =i 0=j 0
(
)
Изменим в первом слагаемом порядок суммирования:
m

n

n
, k
 aj ∑ yi ϕk ( xi )=
∑  ∑ ϕj ( xi ) ⋅ ϕk ( xi ) =

=j 0=
i 0

0,m. (3.1.5)
=i 0
Уравнение (3.1.5) называется нормальной системой метода наименьших квадратов.
Если вернуться к обозначениям формулы (3.1.2), то, как нетрудно видеть, систему (3.1.5) можно записать в виде
T
T
Pm
×n Pn×m = Pm×m y. Матрица
T
Pm
×n Pn×m = Γm×m
называется
(3.1.6)
матрицей
Грама1.
Если еще ввести вектор b = PT y, то система (3.1.6) перепишется
b – система линейных уравнений относительно векв виде Γa =
тора a. Можно показать, что если среди точек x0, x1,…, xn нет со-
1 Иорген Педерсен Грам (1850–1916) – датский математик.
68
впадающих и m≤n, то определитель системы (3.1.6) отличен от
нуля, и, следовательно, эта система имеет единственное решение:
∗
∗
∗
=
a0 a=
=
am am
. Обобщенный полином с такими коэффи0 , a1 a1 ,...,
циентами будет обладать минимальным средним квадратическим
отклонением δ(Фm, y).
Если m = n, то обобщенный многочлен, если система функций
ϕ
{ i }i =0,m степенная, совпадает с полиномом Лагранжа для системы
точек x0, x1,…, xn, причем Smin = 0. При m<n построение такого точного интерполяционного многочлена невозможно. Таким образом,
аппроксимация функций представляет собой более общий процесс,
чем интерполирование.
{ }
m
Если {ϕi ( x )} =
xi , то нормальная система (3.1.5) принимает
0
0
следующий вид:
m

n m
2

=
S ∑ ∑ aj xij − yi ,

=i 0=j 0

n m
 ∂S
j
k
(3.1.7)
0,  = 2 ∑ ∑ aj xi − y=
i xi
 ∂ak
=i 0=j 0
m n
n

 
=
=
xij + k  aj ∑
yi xik , k 0,m.
 ∑  ∑

=
i 0
 =i 0
 j 0=
Запишем систему (3.1.7) в развернутом виде в двух наиболее простых случаях при m = 1 и m = 2. В случае, когда приближение осуществляется многочленом первой степени P1(x) = a0 + a1x, уравнения метода наименьших квадратов имеют следующий вид:
S=
1
(
)
(
)
∑ ∑ ( aj xij − yi ) = ∑ ( a0 + a1xi − yi )
n
=i 0=j 0
2
n
2
⇒ min,
=i 0
n
∂S
= 2 ∑ ( a0 + a1xi − yi ) ⋅ xik = 0, k= 0,1
∂ak
i =0
или
n
 ∂S
= 2 ∑ ( a0 + a1xi − y=
i ) ⋅ 1 0,
 ∂a0
i =0

n
 ∂S
=
⋅ xi 0.
2
∑ ( a0 + a1xi − yi )=
 ∂a
i =0
 1
69
n
n

 a0 ( n + 1) + a1 ∑ xi =
∑ yi ,

=i 0=i 0
–
 n
n
n

2
∑ xi yi
a0 ∑ xi + a1 ∑ xi =
=
 i 0 =i 0=i 0
(3.1.8)
нормальная система для m = 1 в развернутом виде. Пусть теперь
m = 2. Аналогично получим P2(x) = a0 + a1x + a2x2.
S=
2
∑ ∑(
n
=i 0=j 0
)
2
aj xij − yj =
n
∑ ( a0 + a1x + a2 x2 − yi )
2
⇒ min.
=i 0
n
 ∂S
2
= 2 ∑ a0 + a1x + a2 x − y=
i ⋅ 1 0,
∂
a
 0
i =0

n
 ∂S
2
⋅ xi 0,
 = 2 ∑ a0 + a1x + a2 x − yi =
∂
a
 1
i =0

n
S
 ∂=
xi2 0.
2 ∑ a0 + a1x + a2 x2 − yi ⋅=
 ∂a2
i =0

n
n
n

2
 a0 ( n + 1) + a1 ∑ xi + a2 ∑ xi =
∑ yi ,

=i 0 =i 0=i 0

n
n
n
n

2
3
+
+
=
a
x
a
x
a
x
(3.1.9)
 0∑ i 1∑ i
∑ xi yi , – 2∑ i
 i 0 =i 0 =i 0=i 0
=
 n
n
n
n
 a ∑ x2 + a ∑ x 3 + a ∑ x 4 =
xi2 yi
∑
i
i
i
0
1
2

=
 i 0 =i 0 =i 0=i 0
нормальная система для m = 2 в развернутом виде для квадратичного сглаживания.
∗
Метод вычисления параметров a0∗ , a1∗ ,..., am
с помощью решения
нормальной системы кажется весьма привлекательным. Действительно, задача сводится к стандартной системе линейных алгебраический уравнений с квадратной матрицей. Однако вычислительная практика показывает, что без специального выбора базисных
m
функций {ϕi ( x )} уже при m≥5 нормальная система обычно ока0
зывается плохо обусловленной. Причина в том, что система базисных функций, будучи формально независимой, на практике часто
близка к линейно зависимой. Особенно этим «грешит» система степенных функций 1, x, x2,…, xm, широко применяемая при аппрок-
70
(
)
(
)
(
)
симации алгебраическими многочленами. Лучший результат получается, если использовать систему ортогональных на отрезке [a, b]
функций. Пример такой системы на [-1, 1] дает система многочленов
Чебышева T0(x), T1(x),…, Tm(x).
В настоящее время в вычислительной практике нормальная система, как правило, не используется. Применяются другие, более
надежные методы, например, метод сингулярного разложения матрицы P.
Пример 1. Пусть функция y = f(x) задана следующей таблицей:
x
0.78
1.56
2.34
3.12
3.81
y
2.50
1.20
1.12
2.25
4.28
Используя метод наименьших квадратов, аппроксимируем ее
многочленами первой и второй степени и найдем соответствующие
средние квадратические уклонения δ1 и δ2.
Вычисления, которые нужно провести, расположим по схеме,
приведенной в такой таблице:
x0
x1
x2
x3
x4
y
xy
x2y
1
0.78
0.608
0.475
0.370
2.50
1.950
1.521
1
1.56
2.434
3.796
5.922
1.20
1.872
2.920
1
2.34
5.476
12.813
29.982
1.12
2.621
6.133
1
3.12
9.734
30.371
94.759
2.25
7.020
21.902
1
3.81
14.516
55.306
210.717
4.28
16.307
62.129
S5
11.61
32.768
102.761
341.750
11.35
29.770
94.605
а) Линейная модель
n
n

 a0 ( n + 1) + a1 ∑ xi =
∑ yi ,

=i 0=i 0
 n
n
n

2
a
x
+
a
x
=
∑ xi yi .
1∑ i
 0∑ i
=
 i 0 =i 0=i 0
2.27,
a0 + 2.322a1 =

5a0 + 11.61a1 11.35, =
=
 5.810a1 3.415,
⇒ 

32.768a1 29.770, =
a1 0.588,
11.61a0 +=


a0 = 0.905.
Таким образом, линейная модель имеет вид y = 0.905 + 0.588x.
71
б) Квадратичная модель
n
n
n

2
 a0 ( n + 1) + a1 ∑ xi + a2 ∑ xi =
∑ yi ,

=i 0 =i 0=i 0

n
n
n
n

2
3
 a0 ∑ xi + a1 ∑ xi + a2 ∑ xi =
∑ xi yi ,
 i 0 =i 0 =i 0=i 0
=
 n
n
n
n
 a ∑ x2 + a ∑ x 3 + a ∑ x 4 =
∑ xi2 yi .
i
i
i
0
1
2

=
 i 0 =i 0 =i 0=i 0
5a0 + 11.61a1 + 32.768a2 =
11.35,


 11.61a0 + 32.768a1 + 102.761a2 = 29.770, ⇒
32.768a + 102.761a + 341.750a =
0
1
2 94.605.



⇒


a0 + 2.322a1 + 6.564a2 =
2.27,
5.810a1 + 26.553a2 =
3.415,
26.674a1 + 126.661a2 =
20.222.
 a0 + 2.322a1 + 6.564
=
a2 2.27,
=
 a2 0.953,


a1 + 4.570a2 =
0.588, ⇒ a1 =
−3.767,



=
4.761a2 4=
.538.
 a0 4.762.

Отсюда y = 4.762–3.767x + 0.953x2 – вид квадратичной модели.
Обе модели значительно отличаются друг от друга. Сравним исходные данные для y = f(x) с соответствующими значениями y*, полученными из обеих моделей, и вычислим δ1 и δ2.
x
y
y1*
y1*–y
(y1*–y)2
y2*
y2*–y
(y2*–y)2
0.78
2.50
1.364
–1.136
1.290
2.404
–0.096
0.009
1.56
1.20
1.822
0.622
0.387
1.204
0.004
0.000
2.34
1.12
2.281
1.161
1.350
1.165
0.045
0.002
3.12
2.25
2.740
0.490
0.240
2.286
0.036
0.001
3.81
4.28
3.145
1.135
1.290
4.244
–0.036
0.001
S
4.557
S
0.013
1
1
0.955, ä2 = ⋅ 0.013 =
0.051.
ä1 = ⋅ 4.557 =
5
5
Следовательно, данным для y = f(x) в исходной таблице очень хорошо
соответствует квадратичная модель. Линейная модель не адекватна
исходным данным и должна быть отвергнута.
Таким образом,
72
§ 3.2. Лабораторная работа № 3.
Аппроксимация функции одного переменного
по методу наименьших квадратов в пакете Mathcad
Очень часто при анализе эмпирических данных необходимо найти явную функциональную зависимость между двумя величинами
x и y, полученными в результате измерений. Поскольку опытные
данные всегда содержат ошибки, то строить интерполяционный
многочлен y = Pn(x) не рационально, так как при интерполяции
ошибки повторяются. Желательно по возможности сгладить и минимизировать ошибки наблюдений. Этот результат достигается построением многочлена наилучшего среднего квадратического приближения по методу наименьших квадратов.
Итак, если y = f(x) аппроксимируется многочленом вида
Pm ( x ) =
m
∑ aj x j ,
j =0
так что система базисных функций имеет вид
{ϕi ( x )}0
m
{ }0
m
=
xi ,
то неизвестные коэффициенты многочлена Pm(x) по методу наименьших квадратов определяются из решения системы (3.1.7).
В параграфе 3.1 описан пример «ручного» вычисления коэффициентов линейной и квадратичной модели по методу наименьших квадратов. Решим аналогичную задачу средствами пакета Mathcad различными способами. Сформируем вначале вектора исходных данных.
В алгебре матриц в среде Mathcad доступны несколько очень удобных встроенных функций, например, submatrix, stack и augment.
Функция submatrix(A, m, n, k, l) извлекает из матрицы A подматрицу, содержащуюся в A со строки m по строку n и со столбца с номером k по номер l. Функции stack и augment, наоборот, формируют
одну матрицу из двух. После работы stack(A, B) получается массив,
сформированный расположением A над B, при этом матрицы A и
B должны иметь одинаковое число столбцов. Функция augment(A,
B) располагает матрицы A и B рядом, B справа от A; эти матрицы
должны иметь одинаковое число строк.
Введем с клавиатуры:
ORIGIN: = 1
n: = 20 i: = 1..20
73
 2.97
 3.07

 3.04
 3.30

3.27
y1 := 
 3.54

 3.79
 4.07
 4.30
i

xi :=
10
 4.51
4.83 













5.06
5.40
5.83
6.54
6.68
7.36
7.91
8.39
8.98
y2: = submatrix(y1,1,10,2,2)
y1: = submatrix(y1,1,10,1,1)
y: = stack(y1,y2)
y3: = augment(y2,y1)
m: = cols(y3) m = 2
n1 = rows(y3) n1 = 10
min(y) = 2.97
max(y) = 8.98
length(y) = 20
last(y1) = 10
Функции cols(A) и rows(A) возвращают число столбцов и строк
матрицы A, min(A) и max(A) соответственно наименьшее и наибольшее значение элементов в A, length(a) – число элементов в векторе
a, last(a) – индекс последнего элемента в векторе a с учетом значения переменной ORIGIN.
1
1
2.97
2
3.07
3
3.04
4
3.3
5
3.27
6
3.54
1
2
7
3.79
1
2.97
11
4.83
4.83
1
4.83
2.97
y = 8
11
4.07
2
3.07
22
5.06
5.06
2
5.06
3.07
9
4.3
3
3.04
33
5.4
5.4
3
5.4
3.04
10
4.51
4
44
4
5.83
3.3
4.83
3.27
y2
y2== 55
5.83
5.83
11
y1 = 5
3.3
6.54
3.27
12
5.06
6
3.54
13
5.4
7
3.79
14
5.83
8
15
6.54
...
16
74
1
6.54
6.54
y3 = 5
66
6.68
6.68
6
6.68
3.54
77
7.36
7.36
7
7.36
3.79
4.07
88
7.91
7.91
8
7.91
4.07
9
4.3
99
8.39
8.39
9
8.39
4.3
10
4.51
1010
8.98
8.98
10
8.98
4.51
Построим линейную и квадратичную модель по формулам (3.1.8)
и (3.1.9). Для этого вычислим следующие величины. Введем еще
одну предопределенную переменную пакета Mathcad TOL: = 10–6.
Она определяет допустимую погрешность для различных алгоритмов аппроксимации, интегрирования,
решения уравнений и так
n
–3. Вычислим
2
далее. По умолчанию TOL: =
10
следующие величины:
x2 :=
( xi)
∑
TOL: = 10–6
x1 :=
n
∑
i = 1
xi x2 :=
n
∑
i = 1
n
( xi) 2 x3 :=
i = 1
3
n
i = n1
i = 1
( xi) 2 ⋅ yi
 128.907 x2y = 194.107
x4 = 72.276 xy =
x2y :=
n
∑
i = 1
( xi) 3
∑
∑ ( xi)
n
i n
= 1
4
xi) x4
xy=:=
xi ⋅ yi) x2y :=
(
(
∑
∑
∑
x1 = 21 x2 = 28.7 x3 =
x3 44.1
:=
x4 :=
i = 1
n
y11 :=
∑
i = 1
n
∑
i = 1
i = 1
( xi) 2 ⋅ yi


 20
 21
A1 := 
21


28.7 
yi
( xi) 2 ⋅ yi


y11 = 102.84
21 
 20
 102.84 
A1 := 
 b1 := 

 21 28.7 
 128.907 
a1: = A1–1∙b1
A1
−1
A :=
 0.216
 −0.158
=
 20
 21

 28.7
21
28.7
44.1
−0.158 

0.15 
28.7
 1.838 

 3.147 
a1 = 

 A− 1 =

72.267 
44.1
 0.553
 −1.079

 0.438
−1.079
2.662
−1.196
0.438 


0.569 
−1.196
 102.84 
b :=  128.907 


 194.107 
a2: = A–1∙b
 2.973 
a2 =  0.05 


 1.474 
i: = 1..n
y12i: = a11 + a12∙x i y13i: = a21 + a22∙x i + a23∙(x i)2
r1i: = (y i-y12i)2 r2i: = (y i-y13i)2
75
δ1
:=
1
⋅
n
n
∑
i = 1
1
⋅
n
r1 i δ2 :=
n
∑
i = 1
r2 i
Δ1 = 0.445 δ2 = 0.084
10
8
y
y12
y13
6
4
2
0
0.5
1
x
1.5
2
Коэффициенты системы нормальных уравнений линейной модели, то есть системы (3.1.8), находятся в матрице A1, коэффициенты
квадратичной модели (3.1.9) – в матрице A. Решение обеих систем
линейных уравнений произведено с помощью обратной матрицы.
Вектор a1 содержит коэффициенты линейной модели, вектор a2 –
квадратичной.
Далее вычисляются невязки по обеим моделям и находятся средние квадратические ошибки δ1 и δ2. Видно, что исходным данным хорошо удовлетворяет квадратичная модель
yi = 2.973 + 0.05xi + 1.474xi2. Этот факт отчетливо виден и на приведенном графике.
Приведем в заключение подпрограмму, реализующую вычисления по формулам (3.1.7) в общем случае коэффициентов сглаживающего многочлена заданной степени. Все операторы этой подпрограммы легко отождествляются с той или иной частью формул
(3.1.7). Параметры подпрограммы: x, y – вектора исходных данных,
n – число точек сетки таблично заданной функции, m – требуемая
степень сглаживающего многочлена. В результате работы подпрограмма МНК выдает вектор коэффициентов многочлена Pm(x) = a0 + a1x + a2x2 + … + amxm, записанных в следующем порядке: a0, a1,
a2,…, am, δ. Последняя m + 2 компонента вектора результата содер76
жит среднюю квадратическую ошибку представления исходных табличных данных построенным сглаживающим многочленом:
MHK ( x , y , n , m) :=
for
k ∈ 1 ..
for
m+1
j ∈ 1 ..
Aj , k ←
∑
l = 1
n
∑
bk ←
m+1
n
l = 1
( xl) j+k−2
yl ⋅ ( xl) k−1


a ← lsolve ( A , b)
for
i ∈ 1 ..
y1 i ← 0
for
n
j ∈ 1 ..
m+1
y1 i ← y1 i + aj ⋅ ( xi)
r←
n
∑
i = 1
am+2 ←
a
j−1
( yi − y1 i) 2
r
n
В этой подрограмме используется встроенная функция пакета
Mathcad – lsolve. Она находит решение системы линейных алгебраических уравнений по заданной матрице коэффициентов А и матрице правых частей b.
В нашем случае
 1.838
a23: = МНК(x,y,20,1) a23 =  3.147

 0.445
 2.974

 0.05
a24: = МНК(x,y,20,2) a24 =
 1.475

 0.084
 2.902
 0.414

a25a25: =
:= MHK
( x , y , 20 , 3) a25 =  1.052
МНК(x,y,20,3)
 0.134

 0.082

















77
Видно, что для исходной таблично заданной функции многочленом наилучшего приближения является уже полученный ранее
многочлен второй степени. Дальнейшее усложнение модели (повышение степени многочлена) практически не изменяет среднюю квадратическую ошибку и, следовательно, не является оправданным.
Задание № 1. По методу наименьших квадратов аппроксимировать таблично заданную функцию y = f(x) многочленом наилучшего
среднеквадратического приближения (1 ≤ m ≤ 4). Номер Вашего варианта – это номер Вашей фамилии в журнале преподавателя.
yi = f(xi)
xi
Номер варианта
1
2
3
4
5
6
7
8
9
10
0.1
3.15 20.95 2.20
6.00
3.13
0.07 12.28 -9.10
0.2
3.04 20.51 2.18
7.04
3.19
0.17 12.53 -9.21 10.01 3.31
0.3
3.02 21.96 1.87
7.21
3.17
0.21 12.50 -8.99 11.10 3.72
0.4
2.97 21.83 1.85
7.40
3.52
0.31 12.53 -8.95 12.16 3.77
0.5
2.87 21.79 1.77
7.20
3.62
1.10 12.75 -9.13 13.05 3.78
0.6
2.98 22.72 1.62
7.70
3.72
1.09 12.85 -9.23 14.35 3.97
0.7
2.81 25.80 1.57
7.36
4.03
1.12 12.77 -9.21 15.19 4.00
0.8
2.70 27.33 1.27
7.61
4.39 -0.37 12.76 -9.43 15.50 4.51
0.9
2.66 28.21 1.05
7.56
4.72 -0.22 12.73 -9.57 15.74 4.43
1.0
2.50 30.45 0.68
7.50
4.85 -0.48 12.85 -9.44 16.03 4.58
1.1
2.60 30.37 0.55
7.51
5.12 -0.84 12.51 -9.44 16.56 4.58
1.2
2.36 34.51 -0.10 7.53
5.38 -0.93 12.34 -9.83 17.49 4.54
1.3
2.09 36.29 -0.41 7.45
5.96 -1.15 12.22 -9.78 17.79 4.82
1.4
2.07 38.53 -1.00 7.27
6.40 -1.44 11.84 -9.81 18.03 4.90
1.5
2.01 41.90 -1.19 7.20
6.58 -1.90 11.67 -10.06 18.82 4.77
1.6
1.81 44.52 -1.56 7.25
7.09 -2.25 11.27 -10.41 19.50 4.81
1.7
1.53 48.91 -2.08 7.35
7.32 -2.65 11.06 -10.40 20.28 5.00
1.8
1.64 50.68 -2.61 6.97
7.94 -3.06 10.73 -10.70 21.21 4.97
1.9
1.29 56.36 -3.37 7.20
8.47 -3.66 10.35 -10.96 22.63 5.08
2.0
1.11 59.14 -3.86 7.06
9.00 -4.01 10.09 -11.91 22.90 5.08
78
9.84 3.09
yi = f(xi)
xi
Номер варианта
11
12
13
14
15
16
17
18
19
20
0.1
8.15
-6.90
0.17
3.30
1.04
0.08
3.09 -0.86 0.00 -0.65
0.3
8.41
-7.01
0.07
2.49
1.47
0.14
3.25 -0.77 -0.09 -1.00
0.5
8.58
-7.19
0.17
3.02
1.78
0.37
3.48 -0.56 -0.26 -0.87
0.7
8.84
-7.11
0.05
3.27
2.01
0.36
3.47 -0.46 -0.20 -0.89
0.9
9.28
-7.31
0.12
3.43
2.19
0.44
3.55 -0.28 -0.29 -0.75
1.1
9.46
7.78
0.00
3.70
2.60
0.48
3.59 -0.24 -0.14 -0.59
1.3 10.02 -7.64
0.01
3.70
2.93
0.27
3.28 -0.36 -0.26 -0.44
1.5 10.11 -7.85
-0.05 3.85
3.22
0.39
3.50 -0.43 -0.45 -0.61
1.7 10.61 -8.18
-0.21 3.89
3.50
0.50
3.61 -0.56 -0.43 -0.17
1.9 11.03 -8.39
-0.50 3.98
4.01
0.48
3.59 -0.59 -0.71 0.13
2.1 11.34 -8.79
-0.50 4.02
4.22
0.69
3.80 -0.70 -0.70 0.53
2.3 11.86 -9.02
-0.86 4.21
4.71
0.50
3.61 -1.01 -1.00 0.67
2.5 12.33 -9.48
-1.24 4.22
5.23
0.31
3.42 -1.03 -1.01 1.00
2.7 12.81 -9.93
-1.47 4.37
5.78
0.37
3.48 -1.47 -1.17 1.34
2.9 13.21 -10.26 -1.79 4.36
6.27
0.43
3.54 -1.68 -1.39 1.49
3.1 13.67 -10.91 -2.25 4.39
6.75
0.33
3.44 -1.93 -1.22 1.81
3.3 14.23 -11.41 -2.55 4.54
7.16
0.31
3.42 -2.28 -1.43 2.37
3.5 14.68 -11.91 -3.18 4.33
7.76
0.09
3.20 -2.53 -1.81 2.72
3.7 15.35 -12.30 -3.60 4.54
8.30
0.08
3.19 -2.93 -1.84 3.03
3.9 15.93 -13.00 -3.93 4.53
9.00
0.03
3.14 -3.07 -1.99 3.51
79
yi = f(xi)
Номер варианта
xi
21
22
23
24
25
26
27
28
29
30
0.15
0.16
1.89 -1.92 1.10 -2.80 0.00
4.01
0.12
4.13
2.97
0.30
0.02
2.07 -1.60 1.20 -2.66 0.01
4.06
0.31
4.11
3.07
0.45
0.28
2.30 -1.57 1.18 -2.36 0.24
3.88
0.48
3.87
3.04
0.60
0.42
2.26 -1.41 1.14 -2.41 0.74
3.98
0.45
3.74
3.30
0.75
0.31
2.34 -1.36 1.17 -2.13 1.02
4.36
0.84
3.85
3.27
0.90
0.41
2.66 -0.97 1.00 -1.82 1.31
4.18
0.73
3.71
3.54
1.05
0.42
2.88 -0.59 0.99 -1.74 1.53
4.16
0.77
3.53
3.79
1.20
0.36
2.85 -0.71 0.95 -1.76 1.90
4.51
0.64
3.56
4.07
1.35
0.45
3.16 -0.15 0.54 -1.64 2.29
4.53
0.74
3.19
4.30
1.50
0.65
3.49
0.01
0.32 -1.46 2.61
4.38
0.53
3.04
4.51
1.65
0.67
3.88
0.22
0.15 -1.30 3.15
4.76
0.28
2.83
4.83
1.80
0.53
4.22
0.63
0.02 -1.27 3.42
4.66
0.24
2.54
5.06
1.95
0.50
4.45
1.07 -0.30 -1.22 3.89
4.82
0.00
2.41
5.40
2.10
0.35
4.99
1.42 -0.40 -1.11 4.58
4.77
0.03
1.97
5.83
2.25
0.35
5.36
1.68 -0.90 -1.02 4.82
5.12
0.35
1.78
6.54
2.40
0.13
5.71
2.49 -1.37 0.89
5.42
5.23
0.46
1.53
6.68
2.55
0.39
6.51
2.57 -1.65 0.89
6.07
5.40
0.88
1.04
7.36
2.70
0.14
7.35
3.09 -2.00 -1.02 6.44
5.84
1.27
0.86
7.91
2.85
0.14
8.02
3.40 -2.42 0.97
7.15
5.86
1.68
0.48
8.39
3.00
0.09
8.96
4.00 -3.13 0.99
7.66
6.01
1.98 -0.09 8.98
80
§ 3.3. Лабораторная работа № 3.
Аппроксимация функции одного переменного
по методу наименьших квадратов в пакете Matlab
>> %Метод наименьших квадратов
>> %Полиномиальная модель
function sum=spsum(x,n,k)
%Функция spsum вычисляет выражения, содержащие
%сумму чисел, возведённых в степень k.
a=0;
for i=1:n
a=a+x(i)^k;
end;
sum=a;
end;
function res=MHK(x,y,n,m)
%Функция МНК – аналог соответствующей подпрограммы
% в пакете Mathcad.
for k=1:m+1
for j=1:m+1
A(j,k)=spsum(x,n,j+k-2);
end;
a=0;
for i=1:n
a=a+y(i)*(x(i))^(k-1);
end;
b(k)=a;
end;
a=A^(-1)*b';
for i=1:n
y1(i)=0;
for j=1:m+1
y1(i)=y1(i)+a(j)*(x(i))^(j-1);
end;
end;
r=0;
for i=1:n
r=r+(y(i)-y1(i))^2;
end;
a(m+2)=sqrt(r/n);
res=a;
81
end;
Далее следует текст основной программы.
>> n=20;
>> for i=1:n
x(i)=i/n;
end;
%Аргументы xi определены
>> y=[2.97 3.07 3.04 3.3 3.27 3.54 3.79 4.07 4.3 4.51 4.83 5.06 5.4
5.83...
6.54 6.68 7.36 7.91 8.39 8.98];
%Введены значения yi=f(xi) функции
>> p=length(y)
p =
20
>> x1=spsum(x,n,1)
x1 =
21.0000
>> x2=spsum(x,n,2)
x2 =
28.7000
>> x3=spsum(x,n,3)
x3 =
44.1000
>> x4=spsum(x,n,4)
x4 =
72.2666
>> xy=0;
>> x2y=0;
>> y11=0;
>> for i=1:n
xy=xy+x(i)*y(i);
x2y=x2y+x(i)^2*y(i);
y11=y11+y(i);
end;
>> xy1=xy
xy1 = 128.9070
>> xy2=x2y
xy2 = 194.1069
>> xy3=y11
xy3 = 102.8400
>> A1=[20 21;21 28.7];
>> b1=[102.84 128.907];
>> a1=A1^(-1)*b1'
a1 =
1.8381
3.1466
>> A11=inv(A1);
82
>> a11=A11*b1'
a11 =
1.8381
3.1466
>> A=[20 21 28.7;21 28.7 44.1;28.7 44.1 72.267];
>> b=[102.84 128.907 194.107];
>> a2=A^(-1)*b'
a2 =
2.9734
0.0503
1.4744
>> for i=1:n
y12(i)=a1(1)+a1(2)*x(i);
y13(i)=a2(1)+a2(2)*x(i)+a2(3)*(x(i))^2;
r1(i)=(y(i)-y12(i))^2;
r2(i)=(y(i)-y13(i))^2;
end;
>> delta1=0;
>> delta2=0;
>> for i=1:n
delta1=delta1+r1(i);
delta2=delta2+r2(i);
end;
>> delta1=sqrt(1/n*delta1)
delta1 =
0.4450
>> delta2=sqrt(1/n*delta2)
delta2 =
0.0844
>> plot(x,y,'-*r',x,y12,'-+g',x,y13,'-+b')
>> xlabel('x');
>> ylabel('y, y12, y13');
%Находятся характеристики полиномиальных моделей
%от линейной до четвёртой степени
>> a23=MHK(x,y,n,1)
a23 =
1.8364
3.1477
0.4447
>> a24=MHK(x,y,n,2)
a24 =
2.9709
0.0536
1.4734
0.0849
>> a25=MHK(x,y,n,3)
a25 =
2.8998
0.4162
1.0521
0.1338
0.0825
>> a26=MHK(x,y,n,4)
83
a26 =
2.9060
0.0630
0.3682
0.0169
1.1492
0.0825
Задание № 2. По методу наименьших квадратов аппроксимировать таблично заданную функцию y = f(x) многочленом наилучшего
среднеквадратического приближения (1 ≤ m ≤ 4). Номер Вашего варианта равен 31 минус номер Вашей фамилии в журнале преподавателя. Все числовые данные берутся из таблиц на стр. 78–80.
§ 3.4. Глобальная полиномиальная интерполяция
Пусть функция y = f(x) интерполируется на отрезке [a, b]. Метод
решения этой задачи единым для всего отрезка многочленом Pn(x)
называется глобальной полиномиальной интерполяцией. Надежда приблизить y = f(x) везде на [a, b] с заданной точностью ε единым
многочленом Pn(x) базируются на теореме Вейерштрасса1.
Теорема 3.1. Пусть функция y = f(x) непрерывна на [a, b]. Тогда
для любого ε>0 существует полином Pn(x) степени n = n(ε) такой, что
max f ( x ) − Pn ( x ) < å.
[a, b]
1
84
Карл Вейерштрасс (1815-1897) – немецкий математик.
Однако существуют очень веские причины, по которым глобальная интерполяция многочленами высокой степени в вычислительной практике не используется. Обычный подход увеличения точности интерполяции – увеличение числа узлов. Однако не существует
единой для всех непрерывных на отрезке [a, b] функций стратегии
выбора узлов интерполяции. Чаще всего узлы располагаются на [a,
b] равномерно. Но даже для очень гладких функций это иногда не
приносит желаемого эффекта.
2
f ( x)
P6( x2)
1
P10( x3)
0
−1
− 0.5
0
x , x2, x3
0.5
1
Рис. 3.1. Функция
Рунге и её аппроксимация многочленами
1
Классический
T0( x) пример – функция Рунге1
T1( x1)
1
=
f (x)
, x ∈ [ −1,1].
T2( x2)
1 + 25x2
T3( x3) 0
Если использовать
глобальную аппроксимацию на [–1,1] с равT4( x4)
номерным распределением
узлов, то при больших n интерполяT5( x5)
ция дает очень хорошие результаты в центральной части отрезка.
В то же время последовательность Pn(x) расходится при n→∞ для
0.73<|x|≤1 (см. рис.
− 1 3.1. В нём для аппроксимации функции Рунге
использованы многочлены
и0десятой0.5степени).1 Таким обра−1
−шестой
0.5
зом, равномерное распределение
узлов
оказалось
неудачным. Итак,
x , x1
, x2 , x3 , x4
, x5
не существует единой для всякой функции y = f(x) стратегии выбора
узлов интерполяции. Об этом же говорит и теорема Фабера2.
1
2
Карл Давид Тольме Рунге (1856–1927) – немецкий физик и математик.
Жорж Фабер (1877-1966) – швейцарский математик.
85
Теорема 3.2. Какова бы ни была стратегия выбора узлов интерполяции, найдется непрерывная на отрезке [a, b] функция y = f(x),
для которой max f ( x ) − Pn ( x ) → ∞ при n→∞.
[a, b]
Однако если функция гладкая (непрерывно дифференцируемая),
то такая стратегия существует.
Теорема 3.3. Пусть в качестве узлов интерполяции на отрезке [a,
b] выбираются узлы полиномов Чебышева1. Тогда для любой непрерывно дифференцируемой на отрезке [a, b] функции y = f(x) метод интерполяции сходится.
Практическая реализация стратегии выбора узлов интерполяции возможна и оправдана в довольно редких случаях и просто невозможна тогда, когда приходится иметь дело с заданной таблицей
значений функции.
§ 3.5. Многочлены Чебышева
Система функций {jn(x)}, заданных на [a, b], называется ортогональной на [a, b], если
b
1.
∫ ϕn ( x ) dx =
2
dn ≠ 0 è ∃ äëÿ ∀n = 0,1,2,...
a
b
(3.5.1)
 0, m ≠ n,
2. ∫ ϕn ( x ) ϕm ( x ) dx =

m.
dn ≠ 0, n =
a
Система функций {jn(x)}, заданных на [a, b], называется ортогональной на [a, b] с весом ρ(x), если
b
1.
∫ ϕn ( x ) ρ ( x ) dx =
a
b
2
dn ≠ 0 è ∃ äëÿ ∀n = 0,1,2,...
 0, m ≠ n,
2. ∫ ϕn ( x ) ϕm ( x ) ρ ( x ) dx =

m.
dn ≠ 0, n =
(3.5.2)
a
Функция ρ(x) называется весовой функцией для системы {jn(x)}.
Если dn = 1 для ∀n, то система функций {jn(x)} называется ортонормированной.
В качестве примера системы функций, ортогональной с весом,
приведем многочлены Чебышева, которые известны еще и тем, что
1
86
Пафнутий Львович Чебышёв (1821-1894) – русский математик и механик.
являются полиномами, наименее уклоняющимися от нуля. Эти
многочлены определяют разными способами. Например:
1. Tn ( x=
)
n
n
1 
2
2
 
 
 x + x − 1  +  x − x − 1   , n= 1,2,3,... (3.5.3)
2 
 
 
2. Являются решениями следующего дифференциального уравнения:
0. (1 − x2 )Tn// ( x ) − xTn/ ( x ) + n2Tn ( x ) =
(3.5.4)
3. Определяются из формулы Родрига1
1

n− 
2
d n  1 − x2
n


Tn ( x ) ( −1)

 , n 0,1,2,... = =
n
2
n
!
dx
1− x
4. Определяются рекуррентно:
(
)
=
T0 ( x ) 1=
, T1 ( x ) x,
Tn +1 ( x ) =
2xTn ( x ) − Tn −1 ( x ), n =
1,2,3,...
(3.5.5)
(3.5.6)
Иногда в качестве полиномов Чебышева берут функции
1
Tn ( x ) = n Tn ( x ).
2
5. Tn=
, n 0,1,2,... x ∈ [ −1, 1]. ( x ) cos (n ⋅ arccos x )=
6. T=
n (x)
n 
 2 
( n − m − 1) !
n
( −1)m
(2x )n−2m . ∑
2 m =0
m ! ( n − 2m ) !
(3.5.7)
(3.5.8)
Многочлены Чебышева обладают множеством замечательных
свойств.
Теорема 3.4. Полиномы Чебышева Tn(x) образуют на отрезке
[–1, 1] ортогональную систему с весом
1 Родриг; Бенжамен Оленд Родригес (1794-1851) - французский математик и
экономист.
87
1
ρ( x ) =
,
1 − x2
то есть
1
∫ Tn ( x )Tm ( x )
−1

 0, n ≠ m,

dx
m=
=π
0,  , n=
2
π
1− x
 , n= m > 0.
2
(3.5.9)
Действительно,
x = cos t,
0 ≤ t ≤ π,=
1
dx
x )Tm ( x )
∫ Tn (=
1 − x2
−1
Tn ( cos t ) =
cos ( n ⋅ arccos ( cos t ) ) =
cos nt

 0, n ≠ m,

( − sin t )
1
dt = ∫ cos nt ⋅ cos mtdt =  π, n = m,
= ∫ cos nt ⋅ cos mt
sin t
2
π
π
−π
 , n= m > 0.
2
π
0
T0 ( x ) = 1, T1 ( x ) = x, T2 (=
x ) 2x2 − 1, T3 (=
x ) 4x3 − 3x,
T4 ( x ) = 8x4 − 8x2 + 1, T5 ( x ) = 16x5 − 20x3 + 5x и так далее.
Теорема 3.5. При четном n многочлен Tn(x) содержит только
четные степени x и является четной функцией, а при нечетном n
многочлен Tn(x) содержит только нечетные степени x и является
нечетной функцией.
Теорема 3.6. При n ≥ 1 старший коэффициент многочлена Tn(x)
равен 2n–1, то есть Tn(x) = 2n–1xn + ….
Теорема 3.7. При n ≥ 1 многочлен Tn(x) имеет ровно n действительных корней, расположенных на отрезке [–1, 1] и вычисляемых
по фор-муле
88
=
xk cos
(2k + 1) π
=
, k 0,1,2,...,n − 1.
2n
(3.5.10)
1
T0( x)
T1( x1)
T2( x2)
T3( x3) 0
T4( x4)
T5( x5)
−1
−1
− 0.5
0
x , x1 , x2 , x3 , x4 , x5
0.5
1
Рис. 3.2. Графики многочленов Чебышёва разных степеней
Теорема 3.8. При n≥0 справедливо равенство
max T n ( x ) = 1.
[ −1, 1]
Если n≥1, то этот максимум достигается ровно в n + 1 точках, которые находятся по формуле
πm
=
=
xm cos
, m 0,1,...,n. n
(3.5.11)
При этом Tn(x) = (-1)m, то есть максимумы и минимумы многочлена Чебышева чередуются.
Теоремы 3.7 и 3.8 легко доказываются с помощью формулы
(3.5.7).
Назовем величину
max Pn ( x )
[ −1, 1]
уклонением многочлена Tn(x) от нуля. Тогда справедлива следующая, доказанная П.Л. Чебышевым в 1854 г. теорема.
Теорема 3.9. Среди всех многочленов фиксированной степени
n≥1 со старшим коэффициентом an, равным единице, наименьшее
уклонение от нуля, равное 21–n, имеет многочлен
1
Tn ( x ) = n Tn ( x ).
2 −1
89
Последнее свойство имеет особую ценность для приложений. Действительно, тогда для любого многочлена Pn(x) = xn + an–
n–1 + … + a отличного от T
 ( x ), справедливо неравенство
n
1x
0
1
=
max T ( x ) < max Pn ( x ) . n −1 [ −1, 1] n
[ −1, 1]
2
(3.5.12)
В силу формул (3.5.10) и
(3.5.11) нули и точки экстремума
полинома Tn(x) можно построить
следующим образом: разделив
полуокружность,
опирающуюся
на
отрезок
[–1,1]
на
2n частей,
–1
нули
1 x
спроецируем полученные точки
на диаметр. Нумеруя проекции
Рис. 3.3. Нули многочленов
слева направо, получим, что все
Чебышёва
проекции с нечетными номерами
являются нулями полинома Tn(x), а с четными – его точками экстремума (рис. 3.3). Из геометрических соображений вытекает, что
как нули, так и точки экстремума полинома Tn(x) сгущаются к концам отрезка [–1, 1].
n =4
§ 3.6. Решение задачи минимизации оценки погрешности
Предположим, что значение заданной на отрезке [a, b] функции
f(x) можно вычислить в произвольной точке x. Однако по некоторым причинам целесообразнее заменить прямое вычисление функции f(x) вычислением значений ее интерполяционного многочлена.
Для такой замены необходимо один раз получить таблицу значений
f(x) в выбранных точках x0, x1,…, xn∈ [a, b]. При этом естественно
стремиться к такому выбору узлов интерполяции, который позволит сделать минимальной величину ∆ ( Pn ( x ) )= max f ( x ) − Pn ( x ) .
[a, b]
Пусть о функции f(x) известно лишь то, что она непрерывно дифференцируема n + 1 раз на отрезке [a, b]. Тогда
∆ ( Pn ( x=
))
Mn +1
max ω
(x) . (n + 1) ! [a, b] n+1
(3.6.1)
Найдем теперь набор узлов интерполяции x0, x1,…, xn, при котором ∆ ( Pn ( x ) ) → min. Пусть сначала [a, b] = [–1,1]. В этом случае величина (3.6.1) будет минимальна, если будет минимальна
90
max ωn +1 ( x ) . Но этим свойством обладают полиномы Чебышева,
[ −1, 1]
следовательно, ωn +1 ( x ) ≡ Tn +1 ( x ), и набор узлов определен
2k + 1
=
=
π, k 0,1,...,n.
xk cos
2 ( n + 1)
Это нули многочлена Tn +1 ( x ). При таком выборе
Mn +1
∆ ( Pn ( x ) ) =
,
n
2 ( n + 1) !
(3.6.2)
причем любой другой выбор узлов дает большее значение верхней
границы погрешности. Для формулы Тейлора, например,
Mn +1
∆ ( Pn ( x ) ) =
,
( n + 1) !
то есть в 2n раз хуже.
Перейдем теперь к отрезку [a, b]. Его можно преобразовать
к стандартному отрезку [-1,1] следующей заменой:
a+b b−a
=
x
+
t, ãäå t ∈ [ −1, 1].
2
2
В этом случае
n +1
b−a
 n +1 ( t ),
ωn +1 ( x
=
ω
) 

 2 
 n +1 ( t ) =−
ãäå ω
( t t0 )( t − t1 )...( t − tn )
a+b b−a
tk , k =
è xk = +
0,1,...,n.
2
2
(3.6.3)
Тогда
=
∆ ( Pn ( x ) )
Mn +1  b − a 
(n + 1) !  2 
n +1
 n +1 ( t ) max ω
[ −1, 1]
(3.6.4)
и минимум этой величины достигается при значениях t0, t1,…, tn,
совпадающих с нулями многочлена Tn +1 ( x ). Таким образом, решение поставленной задачи дает выбор узлов
xk =
a+b b−a
 2k + 1 
+
cos 
π , k = 0,1,...,n, 2
2
 2n + 2 
(3.6.5)
91
и ему соответствует минимальное значение верхней границы погрешности интерполяции, равное:
Mn +1  b − a 
∆ ( Pn ( x ) ) =


n
2 ( n + 1) !  2 
n +1
.
(3.6.6)
§ 3.7. Локальная интерполяция
Как было показано ранее, глобальная полиномиальная интерполяция не всегда приводит к желательному заявленному результату
по ряду причин. Альтернативный подход состоит в локальной интерполяции, когда функция y = f(x) аппроксимируется интерполяционным многочленом Pm(x) малой степени m на [α, β]⊂[a, b]. При
этом, конечно, используется лишь часть табличных данных.
Самый простой подход при локальной интерполяции состоит в построении набора полиномов P(0, 1,…, m), P(1, 2,…, m + 1),…,
P(n–m, n–m + 1,…, n) фиксированной степени m, каждый из которых совпадает с табличными значениями в m + 1 последовательной
точке. Каждый такой полином используется для интерполяции тех
x∈[a, b], для которых выбранные
узлы таблицы являются ближайP2
шими. Ясно, что в этом случае
P1
имеются разрывы I рода интерполированной функции в местах
P3
стыка многочленов Pi. Этот метод
называется интерполяцией с поа
b
Разрывы I рода
мощью «движущегося» полинома (рис. 3.4).
Рис. 3.4. Пример локальной
Другой подход состоит в куинтерполяции
сочно-поли-номиальной интерполяции. В этом случае исходный
отрезок [a, b] разбивается на несколько отрезков меньшей длиP3
P1
P2
ны, на каждом из которых y = f(x)
интерполируется своим многочленом. При этом аппроксимируеa
b
мая функция будет непрерывной,
но будет иметь точки излома, то
Рис. 3.5. Кусочно-полиномиальная есть не будет непрерывно диффеинтерполяция
ренцируемой (рис. 3.5).
92
§ 3.8. Сплайны, их свойства и построение
В 1946 году были созданы сплайн-функции, являющиеся по сути
дальнейшим развитием метода кусочно-полиномиальной интерполяции. Пусть отрезок [a, b] разбит точками x0 = a<x1<…<xn–1<xn = b
на n частичных отрезков [xi–1, xi].
Сплайном степени m называется функция Sm(x), удовлетворяющая следующим свойствам:
1) Sm(x) непрерывна на [a, b] вместе со всеми производными
(1) x , S(2) x ,..., S( p ) x до некоторого порядка p;
Sm
( ) m ( )
m ( )
2) на каждом отрезке [xi–1, xi]⊂[a, b] Sm(x) совпадает с некоторым
алгебраическим многочленом Pm,i(x) степени m.
Разность m-p между степенью сплайна и порядком старшей производной, непрерывной на [a, b], называется дефектом сплайна.
Интерполяция ломаными-простейший случай сплайна-сплайна
первой степени дефекта единица, где сама функция непрерывна, а
уже первая производная разрывна. Наиболее широкое применение
на практике получили сплайны S3(x) – кубические сплайны с дефектом, равным единице или двойке. Такие сплайны на каждом из
частичных отрезков [xi–1, xi] совпадают с кубическим многочленом
S3(x) = P3,i(x) = ai + bi( x – xi–1) + ci(x–xi–1)2 + di(x–xi–1)3 и имеют на отрезке [a, b] по крайней мере одну непрерывную производную S3/ ( x ).
а). Интерполяционный сплайн.
Пусть на концах отрезка [x0, x1] заданы значения y0, y1, y0/ и y1/.
Тогда интерполяционный многочлен P3(x), удовлетворяющий условиям P3(x0) = y0, P3(x1) = y1, P3/(x0) = y0/, P3/(x1) = y1/, может быть представлен в следующем виде:
P=
3 ( x ) y0
+ y1
( x1 − x )2 (2( x − x0 ) + h )
h3
( x − x0 )2 (2( x1 − x ) + h )
h3
+ y1/
+ y0/
( x1 − x )2 ( x − x0 )
h2
( x − x0 )2 ( x − x1 )
h2
+
, h=
x1 − x0 . (3.8.1)
Эта формула проверяется непосредственно подстановкой граничных условий. Многочлен (3.8.1) называется кубическим интерполяционным многочленом Эрмита1.
Сплайн Sm(x) называется интерполяционным, если Sm(x) = yi
для всех i = 0,n. Если определять этот сплайн на [xi–1, xi], то необ1
Шарль Эрмит (1822-1901) - французский математик.
93
ходимо задать yi–1, yi, si–1, si, где si = Sm/(xi). Тогда по формуле (3.8.1)
S3(x) = P3,i(x).
б). Глобальный сплайн.
Для того, чтобы на всем отрезке [a, b] сплайн имел непрерывную
p – ю производную, в узлах сопряжения необходимо обеспечить условия касания p-го порядка, т. е.
f ( xi ) = Pm ( xi ),
f / ( xi ) = Pm/ ( xi ),
..........................
p
p
f ( ) ( xi ) = Pm( ) ( xi ).
Для кубического сплайна необходимо позаботиться о первой и
второй производной в узлах сопряжения.
Сплайн-функции математически моделируют очень старое механическое устройство: гибкие рейки представляют собой механический сплайн. Если их жестко закрепить в узлах интерполяции,
то рейки принимают форму, минимизирующую их потенциальную
энергию, пропорциональную интегралу по длине дуги от квадрата
кривизны рейки. Итак, если S(x) – сплайн-функция, то
xn
//
∫ S ( x )
2
dx ⇒ min.
x1
С математической точки зрения доказано, что сплайн – это единственная функция, обладающая свойством минимальной кривизны
среди всех функций, интерполирующих данные точки, то есть это
самая гладкая из функций, применяемых для данной интерполяции. Из определения сплайна и определения касания p-го порядка
ясно, что если xi-i – й узел, то
Sm ( xi −=
0 ) Sm ( xi + 0 ),
/
/
Sm
0 ) Sm
( xi −=
( xi + 0 ),
.....................................
( ) x =
Sm
( i − 0 ) Sm( ) ( xi + 0 ).
p
p
Рассмотрим весь отрезок [a, b]. Построим на нем систему сплайнов S3(x) с узлами сопряжения x0 = a<x1<…<xn–1<xn = b с непрерывной второй производной. Для этого необходимо выбирать наклоны
94
si = S3/(xi) так, чтобы в точках xi «стыка» многочленов P3,i и P3,i + 1
совпали значения их вторых производных(см. рис. 3.6 и 3.7):
//
//
P=
( xi ), i 1,2,...,n − 1.
3,i ( xi ) P3,i +1=
Продифференцируем формулу (3.8.1) и найдем вторую производную, переписав эту формулу для узлов xi–1 и xi и вводя обозначения si = S3,i/(xi):
( x − xi )2 (2( x − xi −1 ) + hi )
=
S3 ( x ) P=
3,i ( x )
+
hi3
( x − xi −1 )2 (2( xi − x ) + hi )
hi3
+
yi +
( x − xi −1 )2 ( x − xi )
hi2
yi −1 +
( x − xi )2 ( x − xi −1 )
hi2
si −1 +
si , hi =
xi − xi −1.
Отсюда
/
=
S3/ ( x ) P=
3,i ( x )
2 ( x − xi ) ( 2 ( x − xi −1 ) + hi ) + 2 ( x − xi )
2
hi3
yi −1 +
2 ( x − xi −1 ) ( 2 ( xi − x ) + hi ) − 2 ( x − xi −1 )
2
+
hi3
2
+
2 ( x − xi )( x − xi −1 ) + ( x − xi )
hi2
xi–1
cлева
x
xi
hi
Рис. 3.6. «Состыковка»
параметров сплайна слева
yi +
2
si −1 +
2 ( x − xi −1 )( x − xi ) + ( x − xi −1 )
hi2
xi
справа
x
si .
xi+1
h i+1
Рис. 3.7. «Состыковка»
параметров сплайна справа
95
Аналогично
//
//
S=
3 ( x ) P=
3,i ( x )
+
+
2 ( 2 ( x − xi −1 ) + hi ) + 8 ( x − xi )
hi3
2 ( 2 ( xi − x ) + hi ) − 8 ( x − xi −1 )
hi3
2 ( x − xi −1 ) + 4 ( x − xi )
hi2
si −1 +
+
2 ( xi − xi −1 )
hi2
hi2
4 ( xi − xi −1 ) + 2hi
si −1 +
hi3
4 ( xi − xi −1 )
hi2
yi +
2 ( x − xi ) + 4 ( x − xi −1 )
Положим x = xi, получим
− 0 ) P3//
S3// ( xi =
( xi )
,i =
yi −1 +
si =
yi −1 +
si .
2hi − 8 ( xi − xi −1 )
hi3
yi +
2si −1 4si
y − yi −1
+
−6 i
.
hi
hi
hi2
Аналогично получается вторая производная справа. Перепишем
P3,i//(x) для узлов xi, xi + 1, заменяя xi на xi + 1 и xi–1 на xi. Полагая затем x = xi, в полученной формуле будем иметь
4s
2s
y −y
S3// ( xi + 0 ) =
P3//
− i − i +1 + 6 i +1 i .
,i +1 ( xi ) =
hi +1 hi +1
hi2+1
Таким образом, записывая условия сопряжения второй производной во всех узлах промежутка [a, b], получим следующую систему
уравнений:
(
)
hi−1si −1 + 2 hi−1 + hi−+11 si + hi−+11si +1 =
= 3 hi−2 ( yi − yi −1 ) + hi−+21 ( yi +1 − yi )  , =
i 1,2,...,n − 1.


(3.8.2)
Неизвестными в этой системе служат si–1, si, si + 1. Число неизвестных n + 1, а число уравнений n–1 (рис. 3.8). Таким образом, не
хватает еще двух условий. Их выбор
a
b
обычно связывают с некоторыми доx2
x3
x4
x5
x1
полнительными условиями, наклаs1, s 2, s3 s2, s3, s4 s3, s4, s5
дываемыми на сплайн в граничных
точках a и b (граничные условия).
Эти условия могут быть, например,
Рис. 3.8. Условия сопряжения
таковы.
производных на [a, b]
96
1. Если в граничных точках известны значения первой производной f/(a) и f/(b), то естественно положить
s0 = f/(a), sn = f/(b) (3.8.3)
Дополняя систему (3.8.2) уравнениями (3.8.3), приходим к системе уравнений с трехдиагональной матрицей, которая легко решается методом прогонки. Полученный таким образом сплайн называется фундаментальным кубическим сплайном.
2. Если в граничных точках известны f // ( a ) и f // ( b ), то
//
//
//
//
=
S3// ( a ) P=
S3// ( b ) P=
3,1 ( x0 ) f ( a ) и=
3,n ( xn ) f ( b ).
Это дает следующие уравнения:
а) слева
2si −1 4si
y − yi −1
P3//
+
−6 i
, i= n,
,i ( xi )=
hi
hi
hi2
тогда
//
P3//
,n ( xn )= f ( b )=
б) справа
2sn −1 4sn
y − yn −1
,
+
−6 n
hn
hn
hn2
справа
слева
P3//
,i +1 ( xi ) =
P3//,i +1 ( x i ), i = 0
P3//,i ( x i ), i =n
4si 2si +1
yi +1 − yi
=
−
−
+6
, i=
0,
hi +1 hi +1
hi2+1
Рис.3.9. «Состыковка» параметров
тогда (рис.3.9)
сплайна слева и справа
4s
2s
y −y
P3//
f // ( a ) =
− 0 − 1 +6 1 2 0.
,1 ( x0 ) =
h1
h1
h1
3. Можно положить
=
f // ( a ) 0=
, f // ( b ) 0, тогда соответствующая
система уравнений определяет так называемый естественный кубический сплайн. Благодаря большой простоте записи они получили
широкое распространение, однако условие=
f // ( a ) 0=
, f // ( b ) 0
приводит к потере точности и, таким образом, естественный сплайн
обладает лишь вторым порядком точности, в то время как все кубические сплайны имеют четвертый порядок точности относительно
шага сетки узлов сопряжения, то есть O(h4).
97
4. Если нет никакой информации о
значениях производных на концах отрезка, то прибегают к условию «отсутx1
x2
x0
h1
h2
ствие узла» (рис. 3.9). Используются равенства P3,1(x)≡P3,2(x) и P3,n–1(x)≡P3,n(x),
Рис. 3.10. Условие
для чего необходимо, чтобы P3,1(3)(x1)≡ «отсутствие узла»
≡ P3,2(3)(x1),…, P3,n–1(3)(xn–1)≡P3,n(3)(xn–1).
Выведем необходимые формулы:
4+8
−4 − 8
6
6
P3///
x)
yi −1 +
yi +
s + =
si
,i (=
3
3
2 i −1
hi
hi
hi
hi2
=
12
yi −1
hi3
12
6
6
− 3 yi + 2 si −1 + 2 si .
hi
hi
hi
а). Cлева (x = x1)
P3///
,1 ( x1 ) =
12
y0
h13
−
12
y1
h13
+
6
s0
h12
+
6
h12
s1.
б). Cправа (x = x1)
P3///
,2 ( x1 ) =
12
y1
h23
−
12
y2
h23
+
6
s1
h22
+
6
h22
s2 .
Так как P3,1(3)(x1)≡P3,2(3)(x1), то
2y0 2y1 s0 s1 2y1 2y2 s1 s2
−
+
+
=
−
+
+
.
h13
h13 h12 h12 h23
h23 h22 h22
Отсюда получим
2h1−3 ( y0 − y1 ) + h1−2 ( s0 +=
s1 ) 2h2−3 ( y1 − y2 ) + h2−2 ( s1 + s2 ).
Такие же преобразования для узлов xn–2, xn–1, xn дают аналогичное уравнение
2hn−−31 ( yn −2 − yn −1 ) + hn−−21 ( sn −2 + =
sn −1 ) 2hn−3 ( yn −1 − yn ) + hn−2 ( sn −1 + sn ).
Можно доказать, что условие 4 эквивалентно объединению отрезков [x0, x1] + [x1, x2] и [xn–2, xn–1] + [xn–1, xn] и построению сплайнов по системе n-2 отрезков внутри [a, b]. Этот факт объясняет название «отсутствие узла».
5. Если y = f(x) – периодическая функция с периодом b–a, то можно воспользоваться условием s0 = sn. Тогда
hn−1 ( sn −1 + 2sn ) + h1−1 ( 2s0 + s1 )=
=3 hn−2 ( yn − yn −1 ) + h1−2 ( y1 − y0 ) 


98
///
(выводится аналогично из условия P3///
,0 ( x0 ) = P3,n ( xn ) ). Существуют и другие подходы к заданию граничных условий. Запишем теперь, например, с условием 4 всю систему, симметризировав предварительно первое и последнее уравнение. Получим
(
)
h −2s + h −2 − h −2 s − h −2s =
1
2
1
2 2
 1 0

−3
−3
=
, i 0,
 2h2 ( y1 − y2 ) − 2h1 ( y0 − y1 )=
 −1
−1
−1
−1
hi si −1 + 2 hi + hi +1 si + hi +1si +1 =

 3 hi−2 ( yi − yi −1 ) + hi−+21 ( yi +1 − yi )  , =
=
i 1,2,...,n − 1,

 
2
2
2
2
−
−
−
−
h s
+ hn −1 − hn sn −1 − hn sn =
 n −1 n −2

−3
−3
=
 2hn ( yn −1 − yn ) − 2hn −1 ( yn −2 − yn −1 ), i = n.
(
)
(
)
(3.8.4)
Эта система, записанная в матричном виде, приводит к трехдиагональной матрице. Действительно,
 h1−2
h1−2 + h2−2

 h −1 2 h −1 + h −1
1
2
 1

h2−1
 0

...
 ...

0
 0

0
 0

 0
0

(
)
(
−h2−2
0
0
0
h2−1
0
0
0
h3−1
0
0
...
...
...
2 h2−1 + h3−1
...
0
0
0
)
(
hn−−12 2 hn−−12 + hn−−11
)
(
hn−−11
0
hn−−11
2 hn−−11 + hn−1
0
hn−−21
hn−−21 + hn−2
)
0 

0 


0 

...  ×

0 

hn−1 

−hn−2 
 s0   b0 

 

 s1   b1 
 s2   b2 

 

×  ...  =
 ... ,
s  b 
 n −2   n −2 
 sn −1   bn −1 
 s   b 
 n   n 
99
где
=
b0 2h2−3 ( y1 − y2 ) − 2h1−3 ( y0 − y1 ), =
b1 3 h1−2 ( y1 − y0 ) + h2−2 ( y2 − y1 )  ,


...,
=
bn 2hn−3 ( yn −1 − yn ) − 2hn−−31 ( yn −2 − yn −1 ).
Такие системы быстро решаются специальными методами, с которыми мы познакомимся позднее.
§ 3.9. Погрешность приближения кубическими сплайнами
Теорема 3.10. Пусть функция y = f(x) имеет на отрезке [a, b] непрерывную производную четвертого порядка и
4
M4 = max f ( ) ( x ) .
[a,b]
Тогда для интерполяционного кубического сплайна S3(x), удовлетворяющего граничным условиям типов 1, 2, 4 и 5, справедлива
следующая оценка погрешности:
4
max f ( x ) − S3 ( x ) ≤ C ⋅ M4 hmax
,
[a, b]
где C – некоторая константа.
Характерно, что сплайн S3(x) не только сам аппроксимирует
функцию y = f(x), но и его производные S3/ ( x ), S3// ( x ), S3/// ( x ) приближают соответствующие производные функции y = f(x).
Теорема 3.11. При выполнении условий теоремы 3.10 для указанных в ней сплайнов справедливы неравенства
k
(k)
max f ( ) ( x ) − S3 ( x ) ≤ Ck M4 h4−k , k =
1,2,3.
[a, b]
Пример. Пусть функция задана следующей таблицей:
i
0
1
2
3
4
xi
0
1
2
3
4
yi
1.0
1.8
2.2
1.4
1.0
Построить для этой функции сплайн с граничными условиями 4
на концах отрезка. Здесь n = 4, h = 1 = const. Запишем систему (3.8.4),
реализующую эту схему в конкретном числовом выражении. Первое уравнение имеет вид
(
)
2
h1−2s0 + h1−2 − h2−2 s1 − h2−=
s2 2h2−3 ( y1 − y2 ) − 2h1−3 ( y0 − y1 ).
100
Вычисляя значения hi–hi–1 и подставляя h = 1, получим
s0 + 0 ⋅ s1 − s2 = 2 ⋅ ( −0.4 ) − 2 ⋅ ( −0.8 ) ⇒ s0 − s2 = 0.8.
Аналогично, последнее уравнение дает
(
)
−2
−3
−3
hn−−21sn −2 + hn−−21 − hn−2 sn −1 − h=
n sn 2hn ( yn −1 − yn ) − 2hn −1 ( yn −2 − yn −1 ),
n = 4, n–1 = 3, n–2 = 2.
Тогда
(
)
2
h3−2 s2 + h3−2 − h4−2 s3 − h4−=
s4 2h4−3 ( y3 − y4 ) − 2h3−3 ( y2 − y3 ) ⇒
⇒ s2 − 0 ⋅ s3 − s4 =
2 ⋅ 0.4 − 2 ⋅ 0.8 ⇒ s2 − s4 =
−0.8.
Три внутренние узла дадут три следующих уравнения:
(
(
(
)
)
)
−1
=
i 1 : h1−1s0 + 2 h1−1 + h2−1 s1 + h2=
s2 3 h1−2 ( y1 − y0 ) + h2−2 ( y2 − y1 )  ,


2
2
−1
−1
−1
−1
−
−
=
i 2 : h2 s1 + 2 h2 + h3 s2 + h3=
s3 3 h2 ( y2 − y1 ) + h3 ( y3 − y2 )  ,


2
2
−1
−1
−1
−1
−
−
=
i 3 : h3 s2 + 2 h3 + h4 s3 + h4=
s4 3 h3 ( y3 − y2 ) + h4 ( y4 − y3 )  .


Упрощая их аналогичным способом, что и выше, получим
s0 + 2 ⋅ 2 ⋅ s1 +=
s2 3 ( 0.8 + 0.4 ),
s1 + 2 ⋅ 2 ⋅ s2 +=
s3 3 ( 0.4 + ( −0.8 ) ),
s2 + 2 ⋅ 2 ⋅ s3 + s4 = 3 ( −0.8 + ( −0.4 ) ).
Тогда вся система имеет вид







s0
− s2
=
0.8,
s0 + 4s1 + s2
=
3.6,
s1 + 4s2 + s3
=
−1.2,
−3.6,
s2 + 4s3 + s4 =
s2 −
s4 =
−0.8.
Решим эту систему методом Гаусса:
 s0
0.8,
s2
− s2 = 0.8,
−=
 s0

 s + 4s + s =
4
2
2
8
1
2,
.
,
.
s
s
+
=
−
1
2
1
2
3



7.6,
=
−1.2,
⇒  −14s2 − 4s3 =
 s1 + 4s2 + s3


s2 + 4s3 + s4 =
s + 4s3 + s4 = −3.6,
−3.6,

 2
− s4 =
−0.8.
s2 −
s4 =
−0.8.

 s2
101
 s0 =
0.8,
s0 − s2 0.8,
− s2
=



s1 + 4s2 + s3 =
=
−1.2,
−1.2,
 s1 + 4s2 + s3


s2 + 4s3 + s4 =
−3.6,
−3.6,
⇒ 
 s2 + 4s3 + s4 =


2.8,
s3 + 0.5s4 =
− 4s3 − 2s4 =
−0.7,


− 12s4 =
−6.4.
−42.8.
 52s3 + 14s4 =

Отсюда s4 = 8/15, s3 = -29/30, s2 = -4/15, s1 = 5/6, s0 = 8/15. Запись
формулы (3.8.1) кубического интерполяционного многочлена Эрмита, задавая yi–1, yi, si–1, si однозначно определяет сплайн на отрезке [xi–1, xi]. Эта формула уже учитывает, что интерполированная
функция f(x) будет непрерывна и один раз дифференцируема везде
на сетке x0, x1,…, xn. Таким образом, на каждом из четырех отрезков [0, 1], [1, 2], [2, 3], [3, 4] конкретный вид сплайна можно установить по формуле (3.8.1). Например, для [0, 1] имеем y0 = 1.0, y1 = 1.8,
s0 = 8/15, s1 = 5/6. Тогда
P3,=
1 ( x ) y0
+ y1
( x1 − x )2 (2( x − x0 ) + h )
h3
( x − x0 )2 (2 ( x1 − x ) + h )
h3
+ y1/
+1.8
( x − 0 )2 (2(1 − x ) + 1)
( x1 − x )2 ( x − x0 )
h2
( x − x0 )2 ( x − x1 )
(1 − x )2 (2( x − 0 ) + 1)
P3,1 ( x ) =
1⋅
1
+ y0/
h2
+
, h=
x1 − x0 .
2
+
8 (1 − x ) ( x − 0 )
+
15
1
2
5 ( x − 0 ) ( x − 1)
8
2
2
= ( x − 1) ( 2x + 1) + ( x − 1) x +
1
6
1
15
5
7
1
8
+1.8x2 ( 3 − 2x ) + x2 ( x − 1) =− x3 + x2 + x + 1 =
6
30
2
15
+
=
−0.233333x3 + 0.500000x2 + 0.533333x + 1.000000.
Многочлены P3,i на остальных отрезках рассчитываются аналогично. Именно:
x∈[1, 2], x1 = 1, x2 = 2, y1 = 1.8, y2 = 2.2, s1 = 0.833333, s2 = -0.266667,
P3,2(x) = -0.233333x3 + 0.500000x2 + 0.533333x + 1.00000.
x∈[2, 3], x2 = 2, x3 = 3, y2 = 2.2, y3 = 1.4, s2 = -0.266667, s3 = -0.966667,
P3,3(x) = 0.366667x3–3.100000x2 + 7.700000x-3.800000.
102
x∈[3, 4], x3 = 3, x4 = 4, y3 = 1.4, y4 = 1.0, s3 = -0.966667, s4 = 0.533333,
P3,4(x) = 0.366667x3–3.100000x2 + 7.700000x-3.800000.
§ 3.10. Лабораторная работа № 4.
Аппроксимация функций кубическими сплайнами
в пакете Mathcad.
Часто на практике, для того чтобы аппроксимировать функцию,
вместо построения глобального интерполяционного многочлена на
всем промежутке определения аргумента используют интерполяцию кусочными многочленами – сплайнами.
Гладкие сплайны обладают многими замечательными свойствами, которые обеспечили им успех в приложениях. Эти свойства
описаны в § 3.8. Решим в пакете Mathcad задачу аппроксимации
таблично заданной функции с помощью кубических сплайнов.
Среди одиннадцати функций интерполяции и экстраполяции
в среде Mathcad имеются средства линейной интерполяции (функция linterp(vx, vy, x) – значение в точке х линейного интерполяционного многочлена векторов vx и vy) и интерполяции сплайнами,
осуществляемой функцией interp(K, X, Y, x) по значениям коэффициентов K векторов линейного, параболического или кубического сплайнов. Вектор коэффициентов соответствующего сплайна вычисляется подпрограммами lspline(vx, vy), pspline(vx, vy) и
cspline(vx, vy).
Различия в линейной, параболической и кубической интерполяции сплайнами заметно проявляются лишь на концах заданной
сетки узлов.
Построим все три типа сплайнов и рассмотрим графическое представление данных с их помощью. Пусть
 0.593

 0.598
 0.605
ORIGIN: = 1 X :=  0.613

 0.619
 0.627

 0.632




 Y :=





 0.53305

 0.53464
 0.54160
 0.54324

 0.54043
 0.55598

 0.55843










Проведем сначала линейную интерполяцию и построим график
результата.
y(x): = linterp(X,Y,x)
103
Сплайны соответствующей степени строятся аналогично. Наберем с клавиатуры
KLS: = lspline(X,Y) y1(x): = interp(KLS,X,Y,x)
KPS: = pspline(X,Y) y2(x): = interp(KPS,X,Y,x)
KCS: = cspline(X,Y) y3(x): = interp(KCS,X,Y,x)
0.58
Y
0.56
y ( x)
0.54
0.52
0.5
0.6
X, x
0.62
0.64
На всем отрезке x∈[0.58, 0.64] графики имеют вид
y1 ( x )
y2 ( x )
y3 ( x )
Y
0.58
0.56
0.54
0.52
0.5
0.58
0.6
0.62
x,x,x,X
0.64
На концах отрезка вблизи точек x = 0.58 и x = 0.64 все четыре графика построим отдельно:
x: = 0.56, 0.5605..0.62
Явно видимое различие трех графиков проявляется лишь при
экстраполяции; внутри отрезка x∈[0.58, 0.64] все три графика почти сливаются в один.
Из всех четырех графиков видно, что функция lspline(X,Y) строит вектор коэффициентов линейного сплайна дефекта нуль, то есть
104
во всех внутренних узлах сетки состыкованы сама функция y = y(x)
и ее первая производная. Линейный сплайн дефекта один – это интерполяция ломаными, то есть функция linterp(X,Y,x), график которой приведен на самом первом рисунке.
y1 ( x )
y2 ( x )
y3 ( x )
Y
0.58
0.56
0.54
0.52
0.5
0.56
0.58
x,x,x,X
0.6
x: = 0.62, 0.6205..0.64
y1 ( xx )
y2 ( xx )
y3 ( xx )
Y
0.58
0.56
0.54
0.52
0.5
0.62
0.63
xx , xx , xx , X
0.64
К сожалению, нет упоминания, какого типа краевые условия
употреблялись для каждого вида сплайнов. Скорее всего, это были
так называемые естественные условия, то есть условия равенства
нулю старшей используемой производной на концах рассматриваемого отрезка.
Составим программу вычисления коэффициентов кубического сплайна с краевыми условиями четвертого типа – «отсутствие
узла». Эти коэффициенты вычисляются решением системы линейных уравнений (3.8.4) методом прогонки. Система (3.8.4) отличается от классической трехдиагональной системы уравнений, используемой в методе прогонки, тем, что в первом и последнем уравнении
этой системы имеется по одному лишнему (ненулевому) коэффици105
енту. Поэтому формулы метода прогонки, приведенные в § 5.4, необходимо несколько модернизировать. Модернизация касается способа вычисления x1 и x2 в прямом ходе и x1 в обратном; все остальные
переменные определяются стандартно по формулам (5.4.1) – (5.4.6).
Приведём подпрограммы, реализующие все эти формулы, составленные в кодах пакета Mathcad.
Progonka1–подпрограмма, реализующая модернизированный
метод прогонки. Параметры: вектор b содержит коэффициенты при
неизвестных левой части системы уравнений, стоящие на главной
диагонали, вектор a – под главной диагональю, вектор c -над главной диагональю. Коэффициент p1 первого уравнения системы b1xn–
2 + c1x2 + p1x3 = d1 находится в cn, коэффициент p2 последнего уравнения p2xn–2 + anxn–1 + bnxn = dn в a1. Вектор d содержит свободные
члены (правые части системы уравнений). Подпрограмма выдает
вектор x – вектор решений системы. Для правильной работы подпрограммы необходимо задание ORIGIN: = 1.
Следующая подпрограмма intspline вычисляет значение кубического сплайна с краевыми условиями четвертого типа для данного
значения аргумента x. X и Y – векторы исходных данных, n – число
точек сетки. Структура подпрограммы intspline совершенно прозрачна. Сначала вычисляются все коэффициенты диагональной системы (3.8.4), затем эта система решается модифицированным методом прогонки. Далее по значению аргумента x выбирается нужный
кубический многочлен третьей степени P3(x) и находится его значение при данном x по формуле (3.8.1) кубического интерполяционного многочлена Эрмита.
106
В заключение приведем графики полученных кубических сплайнов в одном масштабе:
KCS: = cspline(X,Y) y3(x1): = interp(KCS,X,Y,x1)
i: = 1..100
x2 i := X1 +
( X7 − X1) ⋅ ( i − 1)
100
y1 i := intspline ( X , Y , 7 , x2 i)
107
108
Видно, что оба графика на отрезке x∈[0.59, 0.63] абсолютно совпадают.
0.56
0.55
y3( x1)
0.54
0.53
0.58
0.6
0.62
x1
0.56
0.55
y1i
0.54
0.53
0.58
0.6
x2 i
0.62
0.64
В этом можно убедиться и сравнить полученные интерполированные значения f(x) по двум разным программам:
X5: = 0.6
y5: = interp(KCS,X,Y,x5)
y5 = 0.536
y55: = intspline(X,Y,7,x5)
y55 = 0.536
x6: = 0.63
y6: = interp(KCS,X,Y,x6)
y6 = 0.560
y56: = intspline(X,Y,7,x6)
y56 = 0.560
Задание № 1. Построить для таблично заданной функции y = f(x)
кубический сплайн с граничными условиями любого из четырех
типов на концах отрезка:
1
xi
0.698
0.706
0.714
0.727
yi
2.2234
2.2438
2.2645
2.2984
2
xi
0.100
0.108
0.119
0.127
Номера вариантов
3
yi
1.1213
1.1316
1.1459
1.1565
xi
0.235
0.240
0.250
0.255
yi
1.2080
1.2126
1.2217
1.2263
4
xi
0.095
0.102
0.104
0.107
yi
1.0913
1.2349
1.2799
1.3514
5
xi
0.103
0.108
0.115
0.120
yi
2.0128
2.0334
2.0607
2.0792
109
1
xi
0.736
0.747
0.760
0.769
0.782
Номера вариантов
3
2
yi
2.3222
2.3516
2.3869
2.4116
2.4478
xi
0.135
0.146
0.157
0.169
0.175
yi
1.1671
1.1819
1.1969
1.2134
1.2196
xi
0.265
0.280
0.295
0.300
0.305
yi
1.2355
1.2493
1.2633
1.2680
1.2726
4
xi
0.110
0.112
0.116
0.120
0.125
5
yi
1.4282
1.4826
1.6003
1.7321
1.8500
xi
0.128
0.136
0.141
0.150
0.157
yi
2.1072
2.1335
2.1492
2.1761
2.1805
Номера вариантов
6
xi
7
yi
xi
8
yi
xi
9
yi
xi
10
yi
xi
yi
0.296 3.2558 0.050 0.2079 0.902 1.2351 0.100 1.8378 0.400 1.6683
0.303 3.1764 0.052 0.2081 0.909 1.2369 0.104 1.8369 0.405 1.6664
0.310 3.1218 0.060 0.2090 0.919 1.2394 0.118 1.8335 0.410 1.6645
0.317 3.0482 0.065 0.2095 0.940 1.2448 0.139 1.8286 0.420 1.6607
0.323 2.9876 0.069 0.2099 0.944 1.2458 0.145 1.8272 0.429 1.6573
0.330 2.9195 0.075 0.2105 0.955 1.2486 0.158 1.8242 0.440 1.6532
0.339 2.8360 0.085 0.2116 0.965 1.2511 0.167 1.8221 0.449 1.6499
0.345 2.7771 0.090 0.2121 0.975 1.2537 0.185 1.8179 0.455 1.6476
0.352 2.6114 0.096 0.2127 1.010 1.2628 0.200 1.8145 0.465 1.6439
Номера вариантов
11
xi
12
yi
xi
13
yi
xi
14
yi
xi
15
yi
xi
yi
1.030 2.8011 0.200 0.0400 0.010 1.0101 0.100 0.8100 1.000 0.0000
1.080 2.9447 0.300 0.0899 0.105 1.1105 0.155 0.7140 1.510 0.2729
1.160 3.1899 0.350 0.1222 0.156 1.1681 0.220 0.6084 2.100 0.3533
1.230 3.4212 0.379 0.1431 0.200 1.2198 0.280 0.5184 2.750 0.3679
1.260 3.5254 0.415 0.1714 0.215 1.2378 0.375 0.3906 3.420 0.3595
1.330 3.7810 0.500 0.2474 0.289 1.3298 0.445 0.3080 3.915 0.3486
1.390 4.0149 0.596 0.3478 0.316 1.3645 0.510 0.2401 4.350 0.3380
1.450 4.1713 0.615 0.3693 0.390 1.4626 0.625 0.1406 4.800 0.3268
1.500 4.2390 0.700 0.4706 0.500 1.6152 0.770 0.0529 5.200 0.3171
110
Номера вариантов
16
xi
0.100
0.210
0.295
0.348
0.419
0.475
0.511
0.555
0.609
17
yi
0.0010
0.0441
0.0868
0.1205
0.1738
0.2219
0.2554
0.2988
0.3552
xi
-2.100
-1.815
-1.600
-1.420
-1.290
-0.750
1.030
2.170
2.500
18
yi
-0.674
0.914
0.574
0.827
0.931
0.983
-0.497
0.828
-0.781
xi
-1.000
-0.010
0.750
1.900
2.815
3.100
3.419
3.875
4.200
19
yi
1.368
1.990
3.117
7.686
17.692
23.198
31.539
49.183
67.686
xi
1.000
5.000
15.150
27.900
35.100
44.000
59.500
70.450
82.100
20
yi
0.000
0.999
0.411
-0.186
-0.405
-0.599
-0.810
-0.897
-0.954
xi
1.000
1.300
1.650
1.915
2.280
2.500
2.750
2.935
3.150
yi
0.6663
0.5706
0.5429
0.5887
0.7256
0.8262
0.9280
0.9790
0.9999
Номера вариантов
21
xi
22
yi
23
xi
yi
xi
24
yi
25
xi
yi
xi
yi
0.000 2.7183 0.100 -3.928 0.000 1.0000 0.500 0.9273 0.100 0.0905
0.425 2.4869 0.330 -3.743 0.175 0.9703 0.625 0.8938 0.300 0.2222
0.870 1.9057 0.519 -3.567 0.308 0.9133 0.800 0.8434 0.490 0.3002
1.395 1.1911 0.728 -3.344 0.514 0.7910 1.100 0.7573 0.730 0.3518
1.850 0.7591 0.997 -3.004 0.800 0.6098 1.450 0.6669 0.950 0.3674
2.410 0.4752 1.264 -2.598 0.996 0.5020 1.810 0.5890 1.200 0.3614
3.215 0.3689 1.513 -2.146 1.213 0.4046 2.250 0.5123 1.500 0.3347
3.397 0.3800 1.875 -1.332 1.456 0.3205 2.570 0.4668 1.710 0.3093
3.830 0.4620 2.011 -0.969 1.678 0.2621 3.000 0.4164 1.980 0.2734
Номера вариантов
26
xi
27
yi
xi
28
yi
xi
29
yi
xi
0.919 1.000 2.3198 0.000
30
yi
xi
yi
1.100 0.438
1.500
0.540 0.125 0.9058
1.250 0.709
3.750
0.247 1.500 2.7115 0.479 -0.044 0.180 0.9310
1.400 0.169
5.120
-0.062 1.985 2.4979 0.896 -0.770 0.236 0.9540
1.575 -0.042
8.300
-0.519 2.470 1.8631 1.365 -0.715 0.291 0.9730
1.720 -0.148 11.450 -0.723 2.990 1.1630 1.700
0.690 0.347 0.9879
1.900 -0.318 17.900 -0.967 3.500 0.7041 1.915
0.876 0.400 0.9969
2.070 -0.461 21.680 -0.998 3.875 0.5120 2.148 -0.655 0.462 0.9999
2.310 -0.624 25.100 -0.997 4.218 0.4147 2.583
0.784 0.517 0.9944
2.500 -0.718 30.000 -0.967 4.500 0.3762 2.995
0.421 0.560 0.9839
111
§ 3.11. Лабораторная работа № 4.
Аппроксимация функций кубическими сплайнами в пакете Matlab
Решим аналогичную задачу локального интерполирования в пакете Matlab. Для интерполяции функции одного переменного кубическими сплайнами используются несколько встроенных подпрограмм spline(x, y, xi), spline(x, y), ppval(pp, xx), unmkpp(pp).
Эти подпрограммы интерполируют значения функции, вычисляют форму сплайна и значения кусочно-гладкого полинома для
заданных значений аргумента, находят характеристики кусочногладкого полинома. Подпрограмма interp1(x, y, xi, ’метод’) строит
интерполяционную кривую для одномерного массива y, заданного
на сетке x выбранным методом. Наконец, подпрограмма stem(x, y)
выводит график элементов массива y в виде вертикальных линий
в позициях, определённых массивом x, элементы которого должны
быть упорядочены в порядке возрастания.
В пакете Spline Toolbox представлен расширенный список функций, представляющих значительно большие возможности для работы со сплайнами.
Далее следует текст основной программы.
>> clear
>> x = [1.030 1.080 1.130 1.180 1.230 1.280 1.330 1.380 1.430];
>> y = [-0.674 0.914 0.574 0.827 0.931 0.983 -0.497 0.828 -0.781];
>> xi = 1.010:0.05:1.440;
>> yi = spline(x,y,xi)
yi = -2.6395 0.7078 0.7155 0.6948 0.8658 1.1578 -0.0580 0.1519 0.7840
>> x1i = 1.03:0.005:1.43;
>> y1i = interp1(x,y,x1i,’spline’);
>> stem(x,y),hold on
>> plot(x1i,y1i,’*r’),grid, hold off
1.2
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
112
1
1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45
>> for i = 1:100
x2(i) = x(1) + (x(9)-x(1))/100*(i-1);
y2(i) = intspln(x,y,9,x2(i));
end;
plot(x2,y2,’*r’),grid
1.2
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
1
1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45
Далее следуют тексты двух подпрограмм сплайн-аппроксимации
кубическими сплайнами, реализующие формулы § 3.8. До работы
основной программы их необходимо оттранслировать в виде процедур-функций и запомнить в рабочем каталоге Вашего пакета
Matlab.
function x=prgnk1(a,b,c,d)
%Подпрограмма prgnk1 является аналогом подпрограммы
%progonra1 в пакете Mathcad. Смотрите параграф 3.10
[k,n]=size(b);
gam(1)=b(1);
bet(1)=d(1)/gam(1);
alf(1)=-c(1)/gam(1);
del1=-c(n)/b(1);
gam(2)=b(2)+a(2)*alf(1);
bet(2)=(d(2)-a(2)*bet(1))/gam(2);
alf(2)=-(c(2)+a(2)*del1)/gam(2);
for i=3:n-1
gam(i)=b(i)+a(i)*alf(i-1);
alf(i)=-c(i)/gam(i);
bet(i)=(d(i)-a(i)*bet(i-1))/gam(i);
end;
gam(n)=b(n)+alf(n-1)*(a(n)+a(1)*alf(n-2));
113
bet(n)=(d(n)-a(n)*bet(n-1))/gam(n);
alf(n)=-a(1)*(alf(n-2)*bet(n-1)+bet(n-2))/gam(n);
x(n)=bet(n)+alf(n);
for i=n-1:-1:2
x(i)=alf(i)*x(i+1)+bet(i);
end;
x(1)=bet(1)+alf(1)*x(2)+del1*x(3);
end
function p3=intspln(X,Y,n,x)
%Подпрограмма intspln аналогична подпрограмме
%intspline в пакете Mathcad. Смотрите параграф 3.10
h1=X(2)-X(1);
h2=X(3)-X(2);
b(1)=1/(h1^2);
c(n)=-1/(h2^2);
c(1)=b(1)+c(n);
d(1)=2*(c(n)/h2*(Y(3)-Y(2))-b(1)/h1*(Y(1)-Y(2)));
h1=X(n)-X(n-1);
h2=X(n-1)-X(n-2);
a(1)=-1/(h2^2);
b(n)=-1/(h1^2);
a(n)=a(1)+b(n);
d(n)=2*(b(n)/h1*(Y(n)-Y(n-1))-a(1)/h2*(Y(n-2)-Y(n-1)));
for i=2:n-1
h1=X(i)-X(i-1);
h2=X(i+1)-X(i);
a(i)=1/h1;
c(i)=1/h2;
b(i)=2*(a(i)+c(i));
d(i)=3*((Y(i)-Y(i-1))/(h1^2)+(Y(i+1)-Y(i))/(h2^2));
end;
xx=prgnk1(a,b,c,d);
k=2;
for i=2:n
if x<X(i)
break;
end;
k=i+1;
end;
h=X(k)-X(k-1);
114
h1=x-X(k-1);
h2=X(k)-x;
p3=Y(k-1)/(h^3)*(h2^2)*(2*h1+h)+xx(k-1)*(h2^2)*h1/(h^2);
p3=p3+Y(k)/(h^3)*(h1^2)*(2*h2+h)-xx(k)*(h1^2)*h2/(h^2);
end
Задание № 2. Построить для таблично заданной функции y = f(x)
кубический сплайн, используя числовые данные на стр. 109–111.
При этом в данных вариантах массив для аргументов заменить на
равномерный массив по формуле
(x − x )
xi = x1 + 9 1 ⋅ (i − 1), i = 12
, ,...,9.
9
Номер Вашего варианта – номер фамилии в журнале преподавателя.
115
4. ЧИСЛЕННОЕ ДИФФЕРЕНЦИРОВАНИЕ
И ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ
Численное дифференцирование применяется тогда, когда функцию невозможно продифференцировать аналитически, например,
когда она задана таблично.
§ 4.1. Простейшие формулы численного дифференцирования
для первой производной
Из определения первой производной
f / ( x ) = lim
f ( x + ∆x ) − f ( x )
∆x
∆x →0
естественно использовать для ее вычисления две простейшие приближенные формулы (рис. 4.1)
f/ (x) ≈
f/ (x) ≈
f (x + h) − f (x)
h
f (x) − f (x − h)
h
,
(4.1.1)
,
(4.1.2)
соответствующие выбору фиксированных значений Δx = h и Δx = –h.
Здесь h>0 – малый параметр – шаг. Формулы (4.1.1) и (4.1.2) называют правой и левой разностными производными. Оценим их погрешности:
r+ (=
x, h ) f / ( x ) −
f (x + h) − f (x)
h
x, h ) f / ( x ) −
и r− (=
f (x) − f (x − h)
h
,
воспользовавшись формулой Тейлора:
f (x ± =
h) f (x) ± f/ (x)h +
f // ( ζ ± )
2
h2 , ζ + ∈ ( x, x + h ), ζ- ∈ ( x − h, x ). (4.1.3)
Подставив в r± ( x, h ) выражение (4.1.3), получим
f // ( ζ + ) 2
f (x) + f/ (x)h +
h − f (x)
2
r+ ( x, h ) =
f/ (x) −
=
h
f // ( ζ + ) 2 
f // ( ζ + )
1 /
f ( x ) h − f / ( x ) h −
=
h =
−
h.
h
2
2


116
Аналогично, r− ( x, h ) =
f // ( ζ − )
2
h. Таким образом,
1

max f // ( x ) ,
 r+ ( x, h ) ≤ 2 M2h, M2 =
[ x, x + h ]


 r− ( x, h ) ≤ 1 M2 h, M2 =
max f // ( x ) .

2
[ x −h, x ]
(4.1.4)
Итак, формулы (4.1.1) и (4.1.2) имеют первый порядок точности по h. Геометрическая интерпретация этих формул показана
на рис. 4.1. Естественно предположить, что лучшим по сравнению с (4.1.1) и (4.1.2) приближением f / ( x=
) tgα является тангенс
угла наклона α0 секущей к графику y = f(x), проведенной через
точки N– и N+ (рис. 4.2). Соответствующая формула приближения имеет вид
f/ (x) ≈
f (x + h) − f (x − h)
2h
, (4.1.5)
f / ( x ), полученную по формуле (4.1.5), называют центральной разностной производной. Оценим опять погрешность формулы (4.1.5).
Для этого подставим в выражение для погрешности
r0 (=
x, h ) f / ( x ) −
α+
N0
N+
2h
N+
α
N0
α0
y = f (x )
α–
y = f (x )
N−
N−
x −h
f (x + h) − f (x − h)
x
x +h
Рис. 4.1. Геометрическая
интерпретация
формул (4.1.1) и (4.1.2)
x −h
x
x +h
Рис. 4.2. Геометрическая
интерпретация
формулы (4.1.5)
117
соответствующие разложения в ряд Тейлора:
f ( x ± h )= f ( x ) ± f / ( x ) h +
f // ( x )
2
h2 ±
3
f ( ) (ζ± )
6
h3 .
Получим
r0 (=
x, h ) f / ( x ) −
1
1
1
f ( x ) + f / ( x ) h + f // ( x ) h2 + f /// ( ζ + ) h3 − f ( x ) + f / ( x ) h − f // ( x ) h2
2
6
2
−
+
2h
1 ///
f ( ζ − ) h3
h2 ///
6
+
= f/ (x) − f/ (x) −
f ( ζ + ) + f /// ( ζ −=
)
2h
12
(
)
h2 ///
f ( ζ + ) + f /// ( ζ − ) .
=
−
12
(
)
Следовательно, справедлива оценка погрешности
r0 ( x, h ) ≤
M3 2
3
h , M3 =
max f ( ) ( x ) .
6
[ x −h, x + h]
(4.1.6)
Таким образом, центральная разностная производная аппроксимирует производную f / ( x ) со вторым порядком точности относительно параметра h.
Для вычисления первой производной можно получить и еще более сложные и точные формулы. Однако в таких формулах с ростом
порядка точности возрастает и число используемых значений функции. Например,
f ( x + 2h )
f/ (x) ≈
f ( x − 2h ) − 8f ( x − h ) + 8f ( x + h ) − f ( x + 2h )
( )
12h
, ãäå r ( x, h ) =
O h4 .
118
( )
, ãäå(4.1.7)
r ( x, h ) =
O h4 .
§ 4.2. Формулы численного дифференцирования
для второй производной
Наиболее простой и широко применяемой для приближенных
вычислений второй производной является следующая формула
f // ( x ) ≈
f ( x − h ) − 2f ( x ) + f ( x + h )
h2
.
(4.2.1)
Она выводится из формулы
f // ( x ) ≈
f/ (x) − f/ (x − h)
h
,
в которой первые производные рассчитываются по формуле (4.2.1)
по трем точкам x–h, x и x + h. Формулу (4.2.1) часто называют второй разностной производной. Покажем, что она имеет второй порядок точности относительно h. Итак,
r=
( x,h ) f // ( x ) −
f ( x − h ) − 2f ( x ) + f ( x + h )
h2
,
причем
f ( x ± h )= f ( x ) ± f / ( x ) h +
4
f // ( x ) 2 f /// ( x ) 3 f ( ) ( ζ ± ) 4
h ±
h +
h .
2
6
24
Тогда
r=
( x,h ) f // ( x ) −
−
f (x) − f/ (x)h +
+
f // ( x )
2
f/ (x)h +
h2 −
f // ( x )
2
3
f( ) (x)
6
h2
h2 +
h3 +
3
f( ) (x)
h2
6
4
f ( ) (ζ− )
24
h3 +
h4 − 2f ( x ) + f ( x )
4
f ( ) (ζ+ )
24
(
h4
+
=
)
h4 ( 4 )
4
f // ( x ) h2 +
f (ζ− ) + f ( ) (ζ+ )
//
24
=
=
f (x) −
h2
h4 ( 4 )
4
=
−
f (ζ− ) + f ( ) (ζ+ ) .
24
(
)
119
Следовательно,
r ( x, h ) ≤
M4 2
4
max f ( ) ( x ) .
h , ãäå M4 =
12
[ x −h, x + h]
(4.2.2)
Для получения f // ( x ) можно использовать формулы любого порядка точности. Например, формула
f // ( x ) ≈
−f ( x − 2h ) + 16f ( x − h ) − 30f ( x ) + 16f ( x + h ) − f ( x + 2h )
12h2
(4.2.3)
имеет четвертый порядок точности относительно параметра h, но
требует наличия значений функции в пяти точках.
§ 4.3. Формулы численного дифференцирования,
основанные на интерполяции алгебраическими многочленами
Предположим, что в окрестности точки x функция y = f(x) аппроксимируется некоторой другой функцией g(x), причем g(x) в точке x легко вычисляется. Естественно в такой ситуации попытаться
воспользоваться приближенной формулой
k
k
f ( ) ( x ) ≈ g ( ) ( x ).
Пусть Pn(x) – интерполяционный многочлен степени n с узлами
интерполяции x0<x1<…<xn, x∈[x0, xn]. В этом случае
k
k
f ( ) ( x ) ≈ Pn( ) ( x ), 0 ≤ k ≤ n.
Поскольку
Pn ( x =
) f ( x0 ) + f ( x0 ; x1 )( x − x0 ) + f ( x0 ; x1; x2 )( x − x0 )( x − x1 ) + ...
+f ( x0 ; x1;...; xn )( x − x0 )( x − x1 )...( x − xn −1 ) =
=
n
∑ f ( x0 ; x1;...; xk ) ωk ( x ),
k =0
то для аппроксимации производных в общем случае при наличии
неравномерной сетки узлов можно воспользоваться связью производных и разделенных разностей:
120
n
n
(4.3.1)
f ( ) ( x ) ≈ n ! f ( x0 ; x1;...; xn ) =
Pn( ) ( x ).
Формула (4.3.1) имеет по крайней мере первый порядок точности. В частности,
при n = 1
f ( x1 ) − f ( x0 )
f / ( x ) ≈ f ( x0 ; x1 ) =
– первая разностная производная;
x1 − x0
при n = 2
f // ( x ) ≈ 2f ( x0 ;=
x1; x2 )
2
x2 − x0
 f ( x2 ) − f ( x1 ) f ( x1 ) − f ( x0 ) 
−
=


x1 − x0
 x2 − x1

x0 =
x − h, x1 =
x,
f ( x − h ) − 2f ( x ) + f ( x + h )
= x2 =x + h, x2 − x0 =2h, =
h2
x2 − x1= h, x1 − x0= h.
– вто-
рая разностная производная.
Если шаг сетки узлов постоянен, то можно вместо разделенных
разностей использовать конечные:
n
∆ y
n
f( ) (x) ≈ n0 .
h
(4.3.2)
§ 4.4. Обусловленность формул численного дифференцирования
Несмотря на внешнюю простоту формул численного дифференцирования, их применение требует особой осторожности. Так как
табличные значения f ∗ ( x ) функции y = f(x) непременно содержат
ошибки, и эти ошибки являются неустранимыми, они прибавляются к погрешностям аппроксимации. Для уменьшения этой погрешности обычно уменьшают шаг h, но именно при малых шагах
формулы численного дифференцирования становятся плохо обусловленными и результат их применения может быть полностью
искажен неустранимой ошибкой. Важно понимать, что действительная причина этого явления лежит не в несовершенстве методов
вычисления производных, а в некорректности самой операции дифференцирования приближенно заданных функций.
Рассмотрим
r ∗ (=
x, h ) f / ( x ) −
f∗ ( x + h) − f∗ ( x)
h
.
121
Это полная погрешность, она складывается из погрешности аппроксимации
r+ (=
x, h ) f / ( x ) −
f (x + h) − f (x)
h
и неустранимой погрешности
1
,h )
rH ( x=
f ( x + h ) − f∗ ( x + h ) − f ( x ) − f∗ ( x ) .

h 
(
Пусть
) (
(
)
)
=
∆ max ∆ f ∗ ( x
=
) max f ( x ) − f ∗ ( x ) .
Тогда rH(x, h) можно оценить следующим образом:
rH ≤
2∆
.
h
Фактически это число будет числом обусловленности формулы
(4.1.1), то есть
ϑ∆ = 2∆ h.
(4.4.1)
Видно, что при h→0 ϑΔ→∞. Поэтому, несмотря на то, что погрешность аппроксимации стремится к нулю при h→0, полная погрешность
r ( x, h=
=
) r+ ( x,h ) + rH
1
2∆
M2 h +
2
h
будет неограниченно возрастать.
Найдем hопт, при котором r(x, h)→min. Для этого необходимо,
чтобы
rh/ ( x, h )=
1
2∆
M2 − = 0.
2
h2
Отсюда
hîïò = 2
∆
. M2
(4.4.2)
Тогда
122
rmin
= r ( hîïò=
) 2 ∆M2 .
(4.4.3)
Таким образом, при исполь1
2∆
зовании формул численного
r = M 2h +
h
2
r
дифференцирования
необходимо обращать внимание на
выбор шага h (рис. 4.3). Даже
при оптимальном выборе шага
полная погрешность является
h
h опт
величиной, пропорциональной
∆ . При k>1 формулы для выk
Рис. 4.3. График полной
числения f ( ) ( x ) обладают еще
погрешности аппроксимации
большей
чувствительностью
к ошибкам задания функций.
Поэтому значения производных высокого порядка, найденные с помощью таких формул, могут быть очень неточными.
Пример. Пусть f(x) = ex задана на [0, 1] с шагом h = 0.2 следующей
таблицей:
x
f(x)
0.0
1.00000
0.2
1.22140
0.4
1.49182
0.6
1.82212
0.8
2.22554
1.0
2.71828
Найдем f / ( x ) в узлах таблицы и оценим точность полученных
данных. В точках x = 0.0 и x = 1.0 возможно применение только формул для левой и правой разностной производной:
f ( 0.2 ) − f ( 0.0 ) 1.22140 − 1.00000
=
= 1.10700,
0.2
0.2
f (1.0 ) − f ( 0.8 ) 2.71828 − 2.22554
/
/
f=
=
= 2.46370.
( xn ) f=
(1.0 )
0.2
0.2
/
/
f=
( x0 ) f=
( 0.0 )
В остальных точках применим формулу (4.1.5), имеющую более
высокий порядок точности:
f ( 0.4 ) − f ( 0.0 )
=
0.4
0
.
6
f
( ) − f ( 0.2)
f / ( 0.4 ) =
=
0.4
0
.
8
f
( ) − f ( 0.4 )
f / ( 0.6 ) =
=
0.4
f (1.0 ) − f ( 0.6 )
f / ( 0.8 ) =
=
0.4
f / ( 0.2 )
=
1.49182 − 1.00000
=
0.4
1.82212 − 1.22140
=
0.4
2.22554 − 1.49182
=
0.4
2.71828 − 1.82212
=
0.4
1.22955,
1.50180,
1.83430,
2.24040.
123
Сведем значения производной в таблицу, подобную исходной таблице задания функции:
x
f(x)
r(x)
0.0
1.10700
–0.10700
0.2
1.22955
–0.00815
0.4
1.50180
–0.00998
0.6
1.83430
–0.01218
0.8
2.24040
–0.01486
1.0
2.46370
0.25458
x
r(x) в данном случае легко вычисляется, так как f / ( x=
f ( x ).
) e=
Погрешности можно было бы вычислить и по приведенным формулам для r(x, h). Например, в точке
x = 0.0
1
1
1
rx =0 ≤ M2h = max ex h = e0.2 ⋅ 0.2 = 0.5 ⋅ 0.2 ⋅ 1.22140 = 0.12214.
2
2 [0, 0.2]
2
§ 4.5. Простейшие квадратурные методы
численного интегрирования
В прикладных исследованиях, когда возникает необходимость
b
вычисления
∫ f ( x ) dx
и первообразной не существует, приходиться
a
интеграл считать численно. Наиболее широко на практике используются квадратурные формулы – приближенные равенства вида
b
N
∫ f ( x ) dx ≈ ∑ Ai f ( x i ),
(4.5.1)
i =0
a
где x i – некоторые точки из отрезка [a, b] – узлы квадратурной формулы (4.5.1), Ai – числовые коэффициенты, называемые весами квадратурной формулы, N≥0 – целое число. Сумма
N
∑ Ai f ( xi ),
i =0
которая принимается за приближенное значение интеграла, называется квадратурной суммой.
Величина
=
R
b
N
a
i =0
∫ f ( x ) dx − ∑ Ai f ( xi )
называется погрешностью или остаточным членом квадратурной
формулы. Выведем простейшие квадратурные формулы, исходя из
геометрической интерпретации определенного интеграла.
124
b
Будем интерпретировать интеграл I = ∫ f ( x ) dx как площадь
a
криволинейной трапеции, ограниченной графиком функции y = f(x)
(f(x)>0), осью абсцисс и прямыми x = a и x = b. Разобьем отрезок [a, b]
на элементарные отрезки [xi–1, xi] точками a = x0<x1<…<xn = b. Интеграл I представится таким образом:
=
I
n
xi
i =1
xi −1
=
Ii , Ii
∑
∫ f ( x ) dx.
(4.5.2)
Введем обозначения:


xi −1 + xi
ãäå x 1
, h const.
fi f=
=
=
( xi ), f 1 f  x 1 ,=
i−
i−
 i− 
2
2
2
2

Формула центральных прямоугольников (см. рис 4.4). Заменим
приближенно площадь элементарной криволинейной трапеции
площадью прямоугольника, основанием которого является отрезок [xi–1, xi], а высота равна значению f 1 . Тогда сразу получается
i−
2
элементарная квадратурная формула прямоугольников Ii ≈ hf 1 .
i−
Суммируя Ii по всему отрезку [a,b], получим
n


h
 h∑ f 1 .
I ≈ Iïðÿì
= h  f1 + f3 + f5 + ... + f 1 =
n− 
i−

i =1 2
2
 2 2 2
N
y
i−
1
2
N3
y
N1
N
2
n−
2
(4.5.3)
1
2
2
xi −1
x
i−
1
2
xi
a = x0
x1
x2
x n −2 x n −1
xn = b
Рис. 4.4. Геометрическая интерпретация формулы прямоугольников
125
N
i−
Ni
1
2
N i −1
y = f (x )
x
xi −1
i−
xi
1
2
Рис. 4.5. Геометрическая интерпретация формулы трапеций
Совершенно аналогично можно получить формулы
n −1
n
i =0
i =1
I ≈ h ∑ fi и I ≈ h ∑ fi ,
которые называются квадратурными формулами левых и правых
прямоугольников. Их точность O(h), тогда как точность формулы
(4.5.3) O(h2).
Формула трапеций (см. рис. 4.5). Соединив точки
Ni −1 ( xi −1, fi −1 ) è Ni ( xi , fi ),
получим формулу трапеций. Заменим площадь элементарной
криволинейной трапеции площадью построенной фигуры. Тогда
h
Ii ≈ ( fi −1 + fi ), а итоговая формула примет вид
2
 f0 + fn n −1 
fn 
f
h
= h  0 + f1 + f2 + ... + fn=
+
=
I ≈ Iòðàï
h
+ ∑ fi . (4.5.4)

−1
 2

2 
2
i =1 

Ni
y = P2 (x )
N
i−
1
2
y = f (x )
N i −1
x
i−
1
2
xi
Рис. 4.6. Геометрическая интерпретация формулы парабол
126
Формула парабол (Симпсона1). Если площадь элементарной криволинейной трапеции заменить площадью фигуры, расположенной
под параболой (см. рис. 4.6), проходящей через точки Ni −1, N 1 , Ni ,
i−
2
то получим приближенное равенство
Ii ≈
xi
∫
P2 ( x ) dx,
xi −1
где P2(x) – интерполяционный многочлен второй степени с узлами
xi −1, x 1 , xi . Для этих точек справедлива формула (4.5.5). Дейi−
2


ствительно, легко проверить, что fi–1 = P2(xi–1), f 1 = P2  x 1 ,
i−
 i− 
2
2

fi = P2(xi). Кроме того, формула (4.5.5) относительно x представляет
уравнение второй степени.
P2 ( x ) =
f
i−
1
2

f −f 
+ i i −1  x − x 1  +
i− 
h 
2

fi − 2f
i−
1
2
2
h
2
+ fi −1
2


x −x 1  .
i− 

2

(4.5.5)
Подставим теперь точки xi −1, x 1 , xi в уравнение (4.5.5). Полуi−
чим
2
P2 ( xi −1 ) = f
i−
= f
i−
1
1
2
1
2


P2  x 1  = f 1 ,
 i−  i−
2
2



2  fi − 2f 1 + fi −1 
i−

 h2
f −f  h
2

+ i i −1  −  + 
=
2
h  2
4
h
−
fi fi −1 fi
f
+
+ − f 1 + i −1= fi −1,
2
2
2 i−
2
2
Томас Симпсон (1710–1761) – английский математик.
127
P2 ( xi ) =
f 1+
i−
= f
i−
2
1
2
+
fi − fi −1
h


2  fi − 2f 1 + fi −1 
i−

 h2
h
2

+ 
=
2
2
4
h
fi fi −1 fi
f
−
+ − f 1 + i −1= fi .
2
2
2 i−
2
2
Таким образом, точки xi–1, x 1 , xi параболы P2(x) удовлетворяi−
2
ют уравнению (4.5.5). Проинтегрируем полученную формулу по отрезку [xi–1, xi]. Тогда
fi − 2f 1 + fi −1
xi
x

i−
fi − fi −1 i 
2
 x − x 1  dx +
hf 1 +
×
∫ P2 ( x ) dx =
∫
2
i−
i− 

h
h
xi −1
x
2
2
i −1 
2
2
2


f −f
× ∫  x − x 1  dx = hf 1 + i i −1
i− 
i−

h
xi −1 
2
2
xi


x −x 1 
i− 

2

2
xi
xi −1
+
3 xi
fi − 2f
i−
+
fi − 2f
+
i−
1
2
2


x −x 1 
i− 
+ fi −1 
2

h
2
1
2
2
h
2
+ fi −1
3
xi −1
= hf
1
i−
2
+
fi − fi −1  h2 h2 
−

+
h  8
8 

 h3 h3 
h
h
h
h 
+
fi −1 + 4f 1 + fi .

= hf 1 + fi − f 1 + fi −1=
 24 24 
i−
i−

6
3 i−
6
6


2
2
2


Применяя полученную формулу на каждом элементарном отрезке, получим квадратурную формулу парабол (Симпсона)
h
I ≈ Iïàðàá
=
128
n
n −1 
h 
f0 + fn + 4 ∑ f 1 + 2 ∑ fi .
i−

6  =i 1=
i 1 
2

(4.5.6)
§ 4.6. Оценка погрешностей простейших квадратурных формул
Теорема 4.1. Пусть функция y = f(x) дважды непрерывно дифференцируема на [a, b]. Тогда для формул (4.5.3) и (4.5.4) справедливы следующие оценки погрешности:
M2
( b − a ) h2 , 24
M
h
I − Iòðàï
≤ 2 ( b − a ) h2 . 12
h
I − Iïðÿì
≤
(4.6.1)
(4.6.2)
Доказательство
Получим, например, формулу (4.6.1). По определению погрешности
R=
b
n
∫ f ( x ) dx − h ∑ f
a
=



 ( x ) − f  x 1   dx.
 i− 
 2 
n xi
∑ ∫
f
1
i−

i
1
=i 1=
xi −1 
2
С другой стороны, по формуле Тейлора
2




 f // ( ζ ) 

x −x 1  ,
f ( x=
) f  x 1  + f /  x 1  x − x 1  +
i− 
i− 
 i− 
 i − 
2 
2
2 
2
2



ãäå x ∈ [ xi −1, xi ], ζ ∈ ( xi −1, xi ).
Тогда



Ri =
∫ f ( x ) − f  xi− 1  dx =
xi −1 
2 

xi
2
 

 f // ( ζ ) 
 


/
x −x=
= ∫ f x 1  x − x 1  +
1  dx
i− 
i−  
 i − 
2 
xi −1  
2 
2
2 



xi
2
x

 xi 


f // ( ζ ) i 
/



 x − x 1  dx ≤
= f x 1 ∫ x − x 1 dx +
∫  i− 
i− 
 i− 

2
xi −1 
2  xi −1 
2
2

2
3



M
M2 
x −x 1 
≤ 2 ∫  x − x 1  dx=
i− 
i− 

2
6 
xi −1 
2
2

xi
xi
=
xi −1
M2  h3 h3  M2 3
+
h .

=
6  8
8  24
129
Но (b–a) = nh, следовательно,
M
b − a M2 ( b − a ) 2
R=
Rin ≤ 2 h2n
= h .
24
24
n
Аналогично выводится и формула (4.6.2).
Теорема 4.2. Пусть функция y = f(x) имеет на [a, b] непрерывную
четвертую производную. Тогда для формулы (4.5.6) справедлива
следующая оценка:
h
I − Iïàðàá
≤
M4 ( b − a )
2880
Пример. Вычислить интеграл
(
cos 0.4x2 + 1
1
∫
0.5
h4 .
)
2.3 + sin (1.5x + 0.3 )
(4.6.3)
dx
по формулам прямоугольников, трапеций и парабол и оценить погрешность вычислений.
i
xi
0.4x2 + 1
числитель
1.5x + 0.3
знаменат.
yi
0
0.50
1.100
0.453596
1.050
3.167423
0.143207
1/2
0.55
1.121
0.434782
1.125
3.202268
0.135773
1
0.60
1.144
0.413957
1.200
3.232039
0.128079
3/2
0.65
1.169
0.391072
1.275
3.256570
0.120088
2
0.70
1.196
0.366083
1.350
3.275723
0.111756
5/2
0.75
1.225
0.338946
1.425
3.289391
0.103042
3
0.80
1.256
0.309623
1.500
3.297495
0.093896
7/2
0.85
1.272
0.294370
1.575
3.299991
0.089203
4
0.90
1.324
0.244299
1.650
3.296865
0.074100
9/2
0.95
1.361
0.208261
1.725
3.288134
0.063337
5
1.00
1.400
0.169967
1.800
3.273848
0.051917
N0
0.5
N1
0.6
N3
N2
0.7
0.8
N5
N4
0.9
1.0
n −1
∑f
i
∑f
i−
i =1
n
i =1
= 0.407831.
1
2
= 0.511443.
Рис. 4.7. Узлы вычислений подынтегральной функции
130
n
h
=
Iïðÿì
h=
∑ f 1 0.025572,
i =1
i−
2
 f + f n −1 
h
= h  0 n + ∑ fi=
Iòðàï

 2

i =1 

= 0.05 ( 0.097562 + 0.407831
=
) 0.025270,
h
=
Iïàðàá
=
n
n −1 
h 

f0 + fn + 4 ∑ f 1 + 2 ∑ fi =
i−

6  =i 1=
1
i
2


0.05
=
( 0.195124 + 2.045772 + 0.815662
) 0.025471.
6
Оценим теперь погрешность вычислений только по теореме 4.1:
f (x) =
f
/
(x)
(
cos 0.4x2 + 1
)
2.3 + sin (1.5x + 0.3 )
(
,
)
−0.8x sin 0.4x2 + 1 ( 2.3 + sin (1.5x + 0.3 ) )
(2.3 + sin (1.5x + 0.3) )
2
+
(
)
−1.5 cos 0.4x2 + 1 cos (1.5x + 0.3 )
(2.3 + sin (1.5x + 0.3) )
2
+
.
Вторая производная уже получается настолько громоздкой, что
оценка погрешности становится затруднительной. Тем не менее
можно провести грубую оценку сверху
f // ( x ) ≤ 0.118 + 2.618 x − 0.640x2 ≤ 2.000.
Итак,
h
I − Iïðÿì,
òðàï ≤
2
0.5 ⋅ 0.052 =
0.000104.
24
Так оно и есть, поскольку значения интеграла, полученные по
формулам прямоугольников и трапеций, отличаются в четвертом
знаке после запятой.
131
§ 4.7. Квадратурные формулы интерполяционного типа
Для приближенного вычисления определенных интегралов часто используют следующий прием. Подынтегральную функцию f(x)
аппроксимируют на [a, b] функцией g(x), интеграл от которой легко
вычисляется и полагают
b
b
a
a
∫ f ( x ) dx ≈ ∫ g ( x ) dx.
Еще чаще используется другой подход. Интеграл I представляют в виде суммы интегралов по отрезкам [xi–1, xi]. На каждом таком отрезке f(x) аппроксимируют некоторой легко интегрируемой
функцией и
b
n xi
a
i =1 xi −1
∫ f ( x ) dx ≈ ∑
∫
gi ( x ) dx.
Пусть t0, t1,…, tm – сетка на отрезке [-1, 1]. Аппроксимируем f(x)
на i-м элементарном отрезке [xi–1, xi] интерполяционным многочленом Pm,i(x) с узлами
tj hi
(i)
zj =
x 1+
, j=
0,1,2,...,m.
i−
2
2
Например, можно воспользоваться многочленом Лагранжа
=
Pm,i ( x )
m
(i) (i)
(i)
=
f  zj  lm,j ( x ), lm,j ( x )
∑


j =0
m
∏
(i)
x − zk
(k)
k =0 zj
k≠ j
(i)
− zk
.
Вычислим
xi
=
∫ Pm,i ( x ) dx
xi −1
=
x x
=
132
1
i−
2
+
thi
,
2
xi m
 (i)  (i)
=
∫ ∑ f  zj  lm,j ( x ) dx
j =0
xi −1
m


hi = hi ∑ aj f  xi − 1 + tj yh i ,
dx = dt,
j =0
2
2

2
−1, x =
1.
x=
xi −1, t =
xi , t =
aj =
1
2
1 m
t − tk
∫ ∏ tj − tk dt.
−1 k =0
k≠ j
Тогда
n xi
Ih ≈ ∑
∫
=i 1 xi −1
Pm,i ( x ) dx =
n
m

∑ hi ∑ aj f  xi− 1 +
=i 1=j 0

2
tj hi 
.
2 
 (4.7.1)
Формулы такого вида называются квадратурными формулами
Ньютона – Котеса1.
§ 4.8. Квадратурные формулы Гаусса
Итак, все квадратурные формулы имеют вид
b
N
a
i =0
∫ f ( x ) dx ≈ ∑ Ai f ( xi ),
Ai – веса.
Формулы Гаусса строятся также по общему виду с дополнительным условием: формула должна быть точной для многочленов наиболее высокой степени. Как правило, формулы Гаусса сначала строятся для отрезка [-1, 1], то есть
1
∫
−1
N
f ( x ) dx ≈ ∑ ai f ( ti ),
i =0
a+b b−a
+
t осуществляется переход
2
2
к формулам интегрирования на произвольном отрезке:
=
x
а затем с помощью замены
b
∫ f ( x ) dx ≈
a
b−a N
a+b b−a 
ai f 
ti .
+
∑
2 i =0
2
 2

Требование точности формулы для многочленов степени m эквивалентно требованию ее точности для функции f ( t ) : 1, t, t2 ,...,tm
(базис для Pm(x)). Следовательно,
N
1
i =0
−1
ai tik
∑=
1
tk dt
∫=
1 − ( −1)
k +1
k +1
=
, k 0,1,...,m.
(4.8.1)
Роджер Котес (1682–1716) – английский математик.
133
Уравнение (4.8.1) дает систему нелинейных уравнений для определения ai и ti. Этих переменных a0, a1,…, aN 2N штук. Следовательно, необходимый многочлен будет иметь степень m = 2N + 1, так как
нужно учесть, что t0 = 1. Построим, например, квадратурную формулу Гаусса с двумя и тремя узлами.
а). N = 1, m = 2N + 1 = 3. Индекс i пробегает значения 0, N, то есть
i = 0, i = 1 – два узла. По формуле (4.8.1) получим
=
k 0, a0 + a=
1
1
1
−1
−1
∫ 1dt= 2, k = 1, a0t0 + a1t1 =
k= 2, a0t02 + a1t12=
k= 3, a0t03 + a1t13=
1
∫t
2
∫t
3
0,
2
,
3
dt=
−1
1
∫ tdt =
dt= 0.
−1
Итак, соответствующая нелинейная система уравнений имеет вид
2,
 a0 + a1 =
 a t +a t =
 0 0 1 1 0,
2 ⇒
 a t2 + a t2 =
,
a 1
 00
3

3
3
0.
 a0t0 + aa t1 =
a=

0 a=
1 1,

1
1

−
, t1 =
.
t0 =
3
3

Таким образом, получаем квадратурную формулу Гаусса:
1

∫ f ( t ) dt ≈ f  −
1   1 
+ f
,
3  3
(4.8.2)
−1
точную для многочленов третьей степени.
б). N = 2, m = 2N + 1 = 5, i = 0, 1, 2. Формула (4.8.1) дает
=
k 0, a0 + a1 + a=
2
1
∫ 1dt=
k = 1, a0t0 + a1t1 + a2t2 =
k= 2, a0t02 + a1t12 + a2t22=
134
2,
−1
k= 3, a0t03 + a1t13 + a2t23=
k= 4, a0t04 + a1t14 + a2t24=
1
∫ tdt =
−1
1
∫t
2
−1
1
∫t
−1
1
∫t
dt=
3
4
0,
2
,
3
dt= 0,
dt=
2
,
k= 2, a0t02 + a1t12 + a2t22=
k= 3, a0t03 + a1t13 + a2t23=
k= 4, a0t04 + a1t14 + a2t24=
k= 5, a0t05 + a1t15 + a2t25=
−1
1
∫t
2
−1
1
∫t
−1
1
2
,
3
3
dt= 0,
4
dt=
2
,
5
5
dt= 0.
∫t
−1
1
dt=
∫t
−1
Аналогично для нахождения переменных aj и tj будем иметь систему уравнений
2,
 a0 + a1 + a2 =
 a t +a t +a t =
 0 0 1 1 2 2 0,
 2
2
2 2
,
 a0t0 + a1t1 + a2t2 =
3

⇒

3
3
3
0,
 a0t0 + a1t1 + a2t2 =
 4
4
4 2
,
a0t0 + a1t1 + a2t2 =
5

 a0t05 + a1t15 + a2t25 =
0.

8

,
0 0, a=
1 a=
2 a=
3
a=
9

1
1
⇒
0, t1 =
0, t3 = =
0.774576.
t =
−
=
−0.774576, t2 =
0
5
5

3
3

Можно показать, что значения tj являются корнями многочленов
Лежандра1 PN + 1(t), а
2
aj =
,
2
2  /

1 − tj PN +1 tj


(
)
( )
3 2 1 
 t −  и так далее. Итак, квадра2
3
турная формула Гаусса в случае б) имеет вид
где P=
0 ( t ) 1, P=
1 ( t ) t, P=
2 (t )
1
Андриен Мари Лежандр (1752–1833) – французский математик.
135







8  1  8
8  1 
f
t
dt
f
f
f
.
0
≈
−
+
+
(
)
(
)
∫
 9
9 
9  5
5
−1




3

 3
1
(4.8.3)
Она точна до многочленов пятой степени. На таких же принципах могут быть построены квадратурные формулы Чебышева, Лагерра1, Эрмита.
Для квадратурной формулы Гаусса справедлива следующая
оценка погрешности:
2N +3
R ≤ α N M2N +2 ( b − a )
,
4
( N + 1) !
αN = 
.
3
(2N + 3) (2N + 2) !
(4.8.4)
Ее коэффициенты убывают очень быстро, например, α4<10–13.
§ 4.9. Лабораторная работа № 5.
Численное дифференцирование
и численное интегрирование функций в пакете Mathcad
Численное дифференцирование применяется в тех случаях,
когда-либо невозможно, либо очень сложно или дорого продифференцировать функцию аналитически. Из-за быстрого накопления
ошибок при численном вычислении старших производных обычно
ограничиваются нахождением первой и второй производной по формулам (4.1.1), (4.1.2) и (4.1.5).
Одним из способов повышения точности вычислений является
уменьшение шага до предела, определяемого выражением (4.4.1).
Однако если функция задана на сетке, то при численном дифференцировании невозможно выбрать шаг h, меньший шага сетки,
и тогда формулы (4.1.1)–(4.1.5) могут давать слишком большую погрешность. В этом случае исходную функцию часто аппроксимируют какой-либо гладкой функцией, значение производной от которой
принимают за приближенное значение искомой производной.
x
⋅ ( sinln x + cosln x ). Найдем ее первую
Пусть дана функция y =
2
и вторую производные, вычислим правую, левую и центральную
1
136
Эдмунд Николя Лагерр (1834–1886) – французский математик.
первые разностные производные, вторую разностную производную
по формуле (4.2.1) на отрезке x∈[0.5, 1.5] и исследуем влияние шага
h на точность вычислений.
1
cosln x, y// =
− ⋅ sinln x. Выберем
Легко проверить, что y/ =
x
первоначально h = 0.2. Введем с клавиатуры исходные данные и построим графики y ( x ), y/ ( x ) è y// ( x ) :
ORIGIN: = 1
f ( x) :=
x
⋅ ( sin ( ln ( x) ) + cos ( ln ( x) ) )
2
f1(x): = cos(ln(x))
f2 ( x) :=
a := 0.5
a: = 0.5
n :=
−1
⋅ sin ( ln ( x) )
x
b := 1.5
h := 0.2
b: = 1.5
( b − a)
h
n = 5
i: = 1..n + 1
y i: = f(x i)
h: = 0.2
x i: = a + h*(i-1)
y1i: = f1(x i)
y2i: = f2(x i)
В точке x = a возможно вычисление только правой разностной
производной по формуле (4.1.1), в точке x = b – только левой. Центральная разностная производная по формуле (4.1.5) не может быть
посчитана при x = a и x = b. Строим графики функции и её производных и вводим следующую часть программы.
1.5
1
yi
y1i
0.5
y2i
0
− 0.5
0.4
0.6
0.8
1
1.2
xi , xi , xi
1.4
1.6
i: = 1..n
yR i :=
( yi+1 − yi)
yR n + 1: = 0
h
137
i: = 2..n + 1
yL i :=
( yi − yi−1)
h
yL1: = 0
i: = 2..n
yC i :=
( yi+1 − yi−1)
2 ⋅h
yC1: = 0
yCn + 1: = 0
Наконец, находим вторую разностную производную по формуле
(4.2.1). Она также не может быть посчитана в первой и последней
точках заданной сетки узлов:
y2C1: = 0
i: = 2..n
y2C i :=
y2Cn + 1: = 0
( yi−1 − 2 ⋅ yi + yi+1)
h
2
1
y1i
yR i
0.95
yLi
yC i
0.9
0.85
0.6
0.8
1
xi , xi , xi , xi
1.2
1.4
1.2
1.4
0.6
0.4
y2 i
y2Ci
0.2
0
− 0.2
0.6
138
0.8
1
xi , xi
Формулы численного интегрирования (4.5.3), (4.5.4) и (4.5.6) настолько просты, что значение интеграла можно подсчитать, используя несколько арифметических операторов или с помощью небольших подпрограмм. Например, все три формулы можно реализовать
следующим образом:
а) Формула прямоугольников
prajm ( f , a , b , n) :=
h←
for
( b − a)
n
i ∈ 1 ..
n
x i ← a + h ⋅ ( i − 1)


f1 i ← f  xi +
I←h⋅
n
∑
i = 1
h

2
f1 i
I
I1: = prajm(f,a,b,n)
I2: = prajm(f1,a,b,n)
I1 = 0.501
I2 = 0.955
б) Формула трапеций
trap ( f , a , b , n) :=
h←
( b − a)
n
for
i ∈ 1 ..
n
x i ← a + h ⋅ ( i − 1)
f1 i ← f ( xi)
 ( f ( a) + f ( b) )
I ← h ⋅


2
+
n
∑
i = 2

f1 i


I
I1: = trap(f,a,b,n)
I2: = trap(f1,a,b,n)
I1 = 0.502
I2 = 0.947
в) Формула парабол
I1: = parab(f,a,b,n)
I2: = parab(f1,a,b,n)
I1 = 0.502
I2 = 0.952
Ее параметры: f – интегрируемая функция, которая должна
быть ранее определена в программе, a, b – пределы интегрирования,
n- число точек сетки (четное число для формулы парабол).
Задание № 1. Для данных функций построить правую, левую и
центральную первые разностные производные, вторую разностную
производную на указанном интервале с данными шагами сетки h1
139
и h2 и сравнить полученные значения с точными значениями производных Затем найти численное значение интеграла по любой из
приведённых трёх подпрограмм от следующих функций на заданном промежутке. При вычислении по подпрограмме parab выбрать
n, соответствующее меньшему значению шага.
1. y= ln  x2 + x4 + 1 , x ∈ [1, 2.5], h1= 0.3, h2 = 0.05.


2
2. y =
2sinx , x ∈ [0, 2], h1 =
0.4, h2 =
0.05.
parab ( f , a , b , n) :=
h←
for
( b − a)
n
i ∈ 1 ..
n
x i ← a + h ⋅ ( i − 1)
f2 i ← f ( xi)


f1 i ← f  xi +
h

2
f2 n+1 ← f ( b)
I←
h 
⋅ f ( a) + f ( b) + 4 ⋅
6 

n
∑
i = 1
f1 i + 2 ⋅
n
∑
i = 2
I
π
π
 π
sincos2 x ⋅ cossin2 x, x ∈ 0,  , h1 =, h2 =.
3. y =
2
10
50


4. y =cos
1
, x ∈ [1, 5], h1 =
0.5, h2 =
0.05.
log2 x
1
x2 − 1
5. y = arctg
, x ∈ [1, 2], h1 =
0.2, h2 =
0.05.
2
2x
1− x
1+ x ,
6. y =
e
x ∈ [0, 1], h1 =
0.2, h2 =
0.05.
7. y =
lnlnln x2 , x ∈ [1, 10], h1 =
2, h2 =
0.5.
=
y
8.
9. y e
=
140
2x2 + x2 + 1 , x ∈ [ −1, 1], =
h1 0.4, =
h2 0.1.
−
x2
2 ,
x ∈ [ −2, 2=
4, h2 0.1.
], h1 0.=

f2 i


(
)
π
π
 π
arccos sin x4 − cos x4 , x ∈ 0,  , h1 =
, h2 =.
10. y =
2
5
20


sin ( arcsin x ), x ∈ [0, 1], h1 =
0.2, h2 =
0.05.
11. y =
arcctg( 2x +π )
y 3
=
12.
π
π
 π π
, x ∈  − ,  ,=
h1
,=
h2
.
5
25
 2 2
x
lnln  , x ∈ [1, 10], h1 =
1, h2 =
0.25.
13. y =
2
2
14. y =
2cos
x
, x ∈ [0, 2], h1 =
0.4, h2 =
0.05.
2
15. y = log23 ( 2x + 3 ) , x ∈ [1, 8 ], h1 = 0.5, h2 = 0.1.
=
4, h2 0.1.
16. y cos ( 3 arccos x ), x ∈ [ −1, 1=
], h1 0.=
x
log3 x
17. y =
10
, x ∈ [1, 9], h1 =
1, h2 =
0.2.
18. y =
arcctg 2x , x ∈ [1, 3], h1 =
0.5, h2 =
0.1.
1
cos , x ∈ [1, 4], h1 =
0.5, h2 =
0.05.
19. y =
x
20. y= ln  x + 1 + x2 , x ∈ [0, 1], h1= 0.2, h2= 0.05.


21. y=
1 − x2 ⋅ arcsin x, x ∈ [ −1, 1], h1= 0.25, h2= 0.05.
2
22. y =
xex , x ∈ [0, 1], h1 =
0.1, h2 =
0.02.
x ln x, x ∈ [1, 10], h1 =
1, h2 =
0.25.
23. y =
24. y =−
4 x2 , x ∈ [0, 2], h1 =
0.25, h2 =
0.05.
25. y
=
arcsin x
1 − x2
, x ∈ [ −0.9, 0.9=
2, h2 0.05.
], h1 0.=
π
π
 π
sin x ⋅ ecos x , x ∈ 0,  , h1 =, h2 =.
26. y =
20
50
 2
141
1 − ex
, x ∈ [ −3,=
1], h1 0.=
25, h2 0.05.
ex
=
0], h1 0.=
25, h2 0.05.
28. y arccos 1 − 3x , x ∈ [ −2, =
27. y ln
=
π
π
 π
ex ( sin 3x − 3 cos 3x ), x ∈ 0,  , h1 = , h2 = .
29. y =
4
40
200


π
π
x +1
=
=
, x ∈ [0, π], h
, h
.
1
2
x −1
6
30
§ 4.10. Лабораторная работа № 5.
Численное дифференцирование
и численное интегрирование функций в пакете Matlab
y arctg
30.=
В этом пакете все вычисления односторонних и центральной
производной производятся аналогично и элементарно, как и в предыдущем параграфе. Для численного вычисления интегралов методами прямоугольников, трапеций и парабол служат подпрограммы
prm, trp и prb, являющиеся аналогами соответствующих подпрограмм в пакете Mathcad.
Далее приводится текст этих подпрограмм.
function I= prm(f,a,b,n)
%Подпрограмма-функция prm вычисляет интеграл методом прямоугольников. Входные параметры: f-массив
%значений функции на сетке с шагом h=(b-a)/n (между
%узлами). Выходной параметр: значение интеграла I.
h=(b-a)/n;
s=0;
for i=1:n
s=s+f(i);
end;
I=s*h;
end
function I= trp(f,a,b,n)
%Подпрограмма-функция trp вычисляет интеграл методом трапеций.
Входные параметры: f-массив значений
% функции на сетке с шагом h=(b-a)/n (в узлах). Выходной параметр:
значение интеграла I.
h=(b-a)/n;
142
s=0;
for i=2:n
s=s+f(i);
end;
I=h*((f(1)+f(n+1))/2+s);
end
function I= prb(f,f1,a,b,n)
%Подпрограмма-функция prb вычисляет интеграл методом парабол.
Входные параметры: f-массив значений
%функции на сетке с шагом h=(b-a)/n (в узлах). f1- массив значений
функции в серединах узлов.
% Выходной параметр: значение интеграла I.
h=(b-a)/n;
s=0;
s1=0;
for i=2:n
s=s+f(i);
end;
for i=1:n
s1=s1+f1(i);
end;I=h/6*(f(1)+f(n+1)+4*s+2*s1);
end
Далее следует текст основной программы.
>>
>>
>>
>>
>>
clear
a = 0.5;
b = 1.5;
h = 0.2;
n = (b-a)/h;
Вычисление сетки узлов по аргументу.
>> for i = 1:n + 1
x(i) = a + h*(i-1);
end;
Вычисление значений функции в узлах и в серединах между узлами.
>> for i = 1:n + 1
a1 = log(x(i));
b1 = cos(a1);
a1 = sin(a1);
f(i) = (a1 + b1)*x(i)/2;
f1(i) = b1;
143
f2(i) = -a1/x(i);
a11 = log(x(i) + h/2);
b11 = cos(a11);
a11 = sin(a11);
f11(i) = (a11 + b11)*(x(i) + h/2)/2;
end;
>> plot(f),hold on
>> plot(f1),hold on
>> plot(f2),hold off,grid
1.4
1.2
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
6
Численное вычисление односторонних и центральной производной.
>> for i = 1:n
yR(i) = (f(i + 1)-f(i))/h;
end;
>> yR(n + 1) = 0;
>> for i = 2:n + 1
yL(i) = (f(i)-f(i-1))/h;
end;
>> yL(1) = 0;
>> for i = 2:n
yC(i) = (f(i + 1)-f(i-1))/(2*h);
end;
>> yC(1) = 0;
>> yC(n + 1) = 0;
>> plot(f1),hold on
>> plot(yR),hold on
>> plot(yL),hold on
>> plot(yC),hold off,grid
144
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
6
>> y2C(1) = 0;
>> y2C(n + 1) = 0;
>> for i = 2:n
y2C(i) = (f(i-1)-2*f(i) + f(i + 1))/(h^2);
end;
>> plot(f2),hold on
>> plot(y2C),hold off,grid
1.4
1.2
1
0.8
0.6
0.4
0.2
0
-0.2
-0.41
1.5
2
2.5
3
3.5
4
4.5
5
5.5
6
Численное интегрирование исходной функции по формулам
прямоугольников, трапеций и парабол.
>> I1 = prm(f11,a,b,n)
I1 = 0.5015
>> I1 = trp(f,a,b,n)
I1 = 0.5022
I1 = prb(f,f11,a,b,n)
I1 = 0.5017
145
Задание № 2. Для функций, заданных на стр. 140–142 построить правую, левую и центральную первые разностные производные,
вторую разностную производную на указанном интервале с данными шагами сетки h1 и h2 и сравнить полученные значения с точными значениями производных Затем найти численное значение интеграла по любой из приведённых трёх подпрограмм от следующих
функций на заданном промежутке. При вычислении по подпрограмме prb выбрать n, соответствующее меньшему значению шага.
146
5. РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ
АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
§ 5.1. Нормы векторов и матриц и их свойства
В вычислительной линейной алгебре выделяют четыре основные
задачи:
1) решение систем линейных алгебраических уравнений;
2) вычисление определителей;
3) нахождение обратных матриц;
4) определение собственных значений и собственных векторов.
Рассмотрим подробнее первую задачу. Пусть дана система линейных уравнений
a11x1 + a12 x2 + ... + a1n xn =
b1,


a21x1 + a22 x2 + ... + a2n xn =
b2 ,


.................................................

an1x1 + an2 x2 + ... + ann xn =
bn .
(5.1.1)
В матричной форме записи эта система принимает вид
Ax = b , где
 a11

a21
=
A 
 ...

 an1
(5.1.2)
... a1n 

... a2n 
, x
=
... ... 

... ann 
a12
a22
...
an2
 x1 
 
x2 
=
, b
 ... 
 
 xn 
 b1 
 
 b2 .
 ... 
 
 bn 
Если матрица A не является вырожденной, то решение системы
существует, единственно и устойчиво ко входным данным.
(
Пусть x ∗ = x1∗ , x2∗ ,..., xn∗
∗
)
T
– приближенное решение системы
=
e xòî÷í. − x – погрешность решения. Кроме нее каче(5.1.1). Тогда
ство полученного решения часто можно оценить по невязке
r= b − Ax ∗ , (5.1.3)
которая показывает, насколько правая часть системы отличается от
левой, если подставить в нее приближенное решение
∗
(
)
=
r A xòî÷í. − A x= A xòî÷í. − x∗ .
147
Тогда
=
r Ae
=
, e A −1r . (5.1.4)
Для того чтобы анализировать методы решения систем, необходимо уметь количественно оценивать «величины» векторов
x ∗ è xòî÷í. − x ∗ , а также векторов b è b − b ∗ . Для этой цели используют понятие нормы вектора.
Говорят, что в Rn задана норма, если ∀x ∈ R n сопоставлено число
x ∈ R, называемое нормой вектора x и обладающее следующими
свойствами:
1) x > 0, если x = 0 ⇔ x = 0,
2) αx = α ⋅ x , ∀x ∈ R n è ∀α ∈ R,
3) x + y ≤ x + y . – неравенство треугольника.
Существует множество различных способов введения норм.
В вычислительных методах наиболее употребительными являются
три нормы:
x
x
2
n
1
= ∑ xi ,
=
∑ xi
i =1
n
(5.1.5)
2
,
(5.1.6)
i =1
x ∞ = max xi .
1≤i ≤n
(5.1.7)
При этом x ∞ ≤ x 2 ≤ x 1 ≤ n ⋅ x ∞ . Норма (5.1.6) является естественным обобщением на случай n- мерного пространства понятия
длины вектора в двух и трехмерных геометрических пространствах. Поэтому ее называют евклидовой нормой.
Абсолютной
и
относительной
погрешностью
вектора
x ∞ = max xi . называются выражения
1≤i ≤n
( ) =x − x
∆ x
∗
∗
( )
, δ x
∗
x − x∗
.
=
x
(5.1.8)
Выбор той или иной конкретной нормы в практических задачах
диктуется тем, какие требования предъявляются к точности решения. Выбор нормы (5.1.5) отвечает случаю, когда малой должна
148
быть суммарная абсолютная ошибка в компонентах решения; выбор (5.1.6) соответствует критерию малости среднеквадратической
ошибки, а выбор (5.1.7) означает, что малой должна быть максимальная из абсолютных ошибок в компонентах решения.
Ax
Величина A = max
называется нормой матрицы A, подчиx ≠0 x
ненной норме вектора x, введенной в Rn. Норма матрицы обладает
следующими свойствами:
1) A ≥ 0,
A =0 ⇔ A =0,
2) α A = α ⋅ A ,
3) A + B ≤ A + B ,
4) A ⋅ B ≤ A ⋅ B ,
5) Ax ≤ A ⋅ x .
Как следует из определения, каждой из векторных норм x
соответствует своя подчиненная норма матрицы A. Нормам
x 1 , x 2 , x ∞ подчинены нормы A 1 , A 2 è A ∞ , вычисляемые по формулам
n
A 1 = max ∑ aij , (5.1.9)
1≤ j ≤n i =1
(
)
=
A 2 max λ j A T A ,
(5.1.10)
1≤ j ≤n
T
где λj(A A) – собственные числа матрицы ATA,
n
A ∞ = max ∑ aij .
1≤i ≤n j =1
(5.1.11)
Так как вычисление нормы (5.1.10) затруднено, то для приближенной оценки величины A 2 можно использовать неравенство
A
≤ A
2
n
E
2
=
∑ aij ,
(5.1.12)
i,j =1
где A E – евклидова норма матрицы A.
Норма матрицы имеет простую геометрическую интерпретацию.
Операцию умножения матрицы A на вектор x можно рассматривать как преобразование x в новый вектор y = Ax. Так как x –
149
длина x, то
Ax
есть коэффициент растяжения вектора x под
x
действием матрицы A.
§ 5.2. Обусловленность задачи решения
системы линейных алгебраических уравнений
Рассмотрим систему Ax = b . Пусть A задана совершенно точно, а
вектор-столбец b – приближенно.
∗
Теорема 5.1. Пусть x – точное решение системы Ax = b , в ко∗
торой правая часть b является приближением к b. Тогда верны
следующие оценки абсолютной и относительной погрешностей:
( )
δ ( x ) ≤ ϑ δ ( b ) ,
∗
∆ ( x ) ≤ ϑ∆ ∆ b ,
δ
ϑ∆
где =
A −1 , =
ϑδ
A −1 ⋅
b
x
(5.2.1)
∗
.
Действительно, ∆ ( x ) =x − x , δ ( x ) =
x − x
x
Тогда
∗
δ ( x =
)
x
( )
∗
∆ ( x ) ≤ A −1 ⋅ r , ∆ ( x ) ≤ A −1 ⋅ b − b =
∆ ( x )
∗
, r =A ( x − x ) =b − b .
A −1 ∆ b ,
( ) ⋅ b=
∗
≤
A −1 ∆ b
x
b
( ) =ϑ δ b .
( )
b
∗
=
A −1 ⋅ b ∆ b
x
δ
∗
Величина ϑΔ для системы Ax = b играет роль абсолютного чис-
A −1 ⋅ b
ла обусловленности; величина ϑδ =
x
называется есте-
ственным числом обусловленности и характеризует коэффициент
150
возможного возрастания относительной погрешности решения, вызванной погрешностью правой части.
Вычислим максимальное значение ϑδ. Тогда
max ϑδ ( x ) = max
x ≠0
A −1 ⋅ Ax
x
x ≠0
A −1 ⋅ A .
=
Полученная величина называется стандартным числом обусловленности и обозначается
ϑ ( A )= cond ( A )=
A −1 ⋅ A .
(5.2.2)
( )
∗
Поскольку cond(A) = maxϑδ, то δ ( x ) ≤ cond ( A ) ⋅ δ b .
Теорема 5.2. Пусть x – точное решение системы A∗ x = b с приближенно заданной матрицей A∗. Тогда верна следующая оценка
относительной точности:
( )
δ∗ ( x ) ≤ cond ( A ) ⋅ δ A∗ , ãäå
)
δ ∗ ( x=
x − x
x
( )
∗
, δ A=
A − A∗
A
(5.2.3)
.
В случае, когда с погрешностью заданы как правая часть системы, так и матрица A, можно доказать справедливость неравенства
( ) ( ) . ∗

δ ( x ) ≤ cond ( A ) ⋅  δ b + δ A ∗

(5.2.4)
В заключение заметим, что для вычисления cond(A) необходимо
иметь A–1. Операция вычисления обратной матрицы очень трудоемка, требует примерно 2n3 операций, поэтому на практике избегают
такого способа вычисления cond(A).
§ 5.3. Метод Гаусса (схема единственного деления)
Вычисления с помощью метода Гаусса состоят из двух основных
этапов, называемых прямым и обратным ходом. Прямой ход заключается в последовательном исключении неизвестных из системы
Ax = b для преобразования ее к эквивалентной системе с верхней
треугольной матрицей. Вычисления значений неизвестных происходят на этапе обратного хода. Прямой ход состоит из n–1 шагов.
151
1-й шаг. Целью этого шага является исключение неизвестного x1
из уравнений с номерами i = 2, 3,…, n. Пусть a11≠0. Тогда этот элемент называется главным (ведущим) элементом первого шага. Найдем
ai1
=
μi1
=
, i 2,3,...,n.
a11
Вычтем последовательно из второго, третьего,..., n-го уравнения
системы (5.1.1) первое уравнение, умноженное соответственно на μ21,
μ31,…, μn1. Это позволит обратить в нуль коэффициенты при x1 во всех
уравнениях, кроме первого. В результате будет получена эквива-
(1)
(1)
лентная система (5.3.1), в которой aij = aij − μi1a1j , bi = bi − μi1b1 :









a11x1 + a12 x2 + a12 x3 + ... + a1n xn =
b1,
(1)
(1)
(1)
(1)
(1)
(1)
(1)
(1)
(1)
(1)
1
a22 x2 + a23 x3 + ... + a2n xn =
b2 ,
a32 x2 + a33 x3 + ... + a3n xn =
b3 ,
................................................
(5.3.1)
( )x =
( )
an2 x2 + an3 x3 + ... + ann
n bn .
1
2-й шаг. Целью этого шага является исключение неизвестного x2
(1)
из уравнений с номерами i = 3, 4,…, n. Пусть a22 ≠ 0 – ведущий эле-
(1)
a
мент второго шага; положим опять μi2 =i2 и вычтем из третьего,
(1)
a22
четвертого,..., n-го уравнений второе уравнение, умноженное на μ32,
μ42,…, μn2 соответственно. Получим
b1,
 a11x1 + a12 x2 + a13 x3 + ... + a1n xn =

1)
1)
1)
(
(
(
(1)

a22 x2 + a23 x3 + ... + a2n xn =
b2 ,

(2)
(2)
(2)

a33 x3 + ... + a3n xn =
b4 ,

....................................


(2)
(2) x =
(2)
an3 x3 + ... + ann

n bn ,
(2)
(1)
(1)
(2)
(1)
(1)
(5.3.2)
где aij= aij − μi2a2 j , bi= bi − μi2b2 . В результате после n–1-го
шага исключения получим следующую треугольную систему уравнений:
152
b1,
 a11x1 + a12 x2 + a13 x3 + ... + a1n xn =

(1)
(1)
(1)
(1)

a22 x2 + a23 x3 + ... + a2n xn =
b2 ,

(2)
(2)
(2)

a33 x3 + ... + a3n xn =
b4 , 
....................................


(n −1) x = b(n −1) .
ann

n
n
(5.3.3)
На этом вычисления прямого хода заканчиваются.
Обратный ход посвящен нахождению неизвестных x1, x2,…, xn.
Из последнего уравнения системы (5.3.3) находим сразу
b( )
xn = n
.
(n −1)
ann
n −1
Подставляя найденное значение xn в предпоследнее уравнение,
получим xn–1 Осуществляя обратную подстановку, далее последовательно находим xn–2, xn–3,…, x1.
Общее число арифметических операций прямого хода в методе
2
Гаусса примерно n3 , обратного – всего около n2, что при большом
3
n пренебрежимо мало по сравнению с числом операций прямого
хода.
Заметим, что вычисление множителей, а также обратная подста( i −1)
новка требуют деления на главные элементы aii . Поэтому если
один из главных элементов оказывается близким к нулю, то схема
единственного деления в уже описанном виде не может быть реализована. В этом случае прибегают к выбору главного элемента по
столбцу (схема частичного выбора) или в выбору главного элемента
по всей матрице (схема полного выбора).
В схеме частичного выбора главного элемента на каждом k-м
шаге исключения выбирается максимальный по модулю коэффициент aik ,k при неизвестной xk в уравнениях с номерами i = k, k + 1,…,
n. Этим гарантируется, что μik≤1 для всех переменных k = 1, 2,…,
n–1 и уравнений i = k + 1,…, n.
В схеме главного выбора допускается нарушение естественного порядка исключения неизвестных. Здесь на первом шаге среди
всех элементов aij определяется максимальный по модулю элемент
ai1 j1 . Первое уравнение системы и уравнение с номером i1 меняются
местами. Затем производится исключение неизвестного xj1 из всех
153
уравнений, кроме первого. На всех других шагах последовательность действий аналогичная.
В качестве примера рассмотрим следующую систему:
1.3,
 1.2x1 + 1.8 x2 − 2.2x3 − 4.1x4 =
 10.0x − 5.1x + 1.2x + 5.5x =

1
2
3
4 1.2,

10.0,
 2.2x1 − 30.1x2 + 3.1x3 + 5.8x4 =
10.0x1 − 2.4x2 − 30.5x3 − 2.2x4 =
34.1.
Решим ее по схеме полного выбора с ε = 10–3. Максимальный
по модулю элемент a34 = -30.5 содержится в четвертом уравнении, поэтому переставим его на первое место. Исключаем неизвестное x3 из второго, третьего и четвертого уравнений, при этом
−2.2
μ=
= 0.0721, μ33 = –0.0393, μ43 = -0.1016:
23
−30.5
34.1000,
10.0000x1 − 2.4000x2 − 30.5000x3 − 2.2000x4 =
 0.4790x + 1.9730x
− 3.9414x4 =
−1.1586,

1
2

+ 5.4135x4 =
2.5401,
 10.3930x1 − 5.1943x2
3.2160x1 − 30.3438x2
+ 5.5765x4 =
13.4646.
Среди коэффициентов при неизвестных во втором, третьем и четвертом уравнениях максимальным по модулю является коэффици(1)
ент a24 = −30.3438. Переставим четвертое уравнение на место второго и исключим x2:
34.1000,
10.0000x1 − 2.4000x2 − 30.5000x3 − 2.2000x4 =
 3.2160x − 30.3438x
+ 5.5765x4 =
13.4646,

1
2

− 3.5789x4 =
−0.2834,
 0.6880x1
 9.8424x1
+ 4.4588 x4 =
0.2350.
В третьем и четвертом уравнениях наибольший коэффициент
(2)
a14 = 9.8424. Поэтому переставим четвертое уравнение на место
третьего и исключим x1 Тогда получим следующую систему:
34.1000,
10.0000x1 − 2.4000x2 − 30.5000x3 − 2.2000x4 =
 3.2160x − 30.3438x
+ 5.5765x4 =
13.4646,

1
2

+ 4.4588x4 =
0.2350,
 9.8424x1

+ 3.8906x4 =
0.2998.
154
Прямой ход закончен. Вычислим неизвестные при помощи обратного хода. Последовательно получим
x4 = 0.077, x1 =
x2 =
( 0.2350 − 0.3438 )
9.8424
(13.4646 − 0.4299 + 0.0354 )
= −0.011,
= −0.431,
−30.3438
( 34.1000 + 0.1850 + 0.1110 − 1.0337 )
= −1.094.
x3 =
−30.5000
Итак, с точностью
ε = 10–3
 x1 = −0.011,
 x = −0.431,
 2

x3 = −1.094,
 x4 = 0.077.
§ 5.4. Метод прогонки
Метод прогонки, так же, как и метод Гаусса, разделяется на два
этапа: прямой и обратный ход. В результате выполнения прямого
хода вычисляются вспомогательные переменные – так называемые
прогоночные коэффициенты. Обратный ход дает значения неизвестных.
Метод прогонки специально создан для решения линейных алгебраических уравнений с трехдиагональной матрицей, то есть для
систем вида
b1x1 + c1x2
=
d1,


a2 x1 + b2 x2 + c2 x3
=
d2 ,

.................................................................. (5.4.1)

dn −1,
an −1xn −2 + bn −1xn −1 + cn −1xn =

an xn −1 + bn xn =
dn .

Системы такого вида часто возникают при решении различных
задач математической физики и интерполяции сплайнами.
Выведем формулы метода. Из первого уравнения b1x1 + c1x2 = d1
найдем x1:
155
d −c x
d c
x1 = 1 1 2 = 1 − 1 x2 = α1x2 + β1. b1
b1 b1
(5.4.2)
Подставим полученное выражение для x1 во второе уравнение
системы (5.4.1):
a2 ( α1x2 + β1 ) + b2 x2 + c2 x3 =d2 , a2 α1x2 + b2 x2 =d2 − a2β1 − c2 x3 ,
x2 = −
c2
d −a β
x3 + 2 2 1 = α2 x3 + β2 .
b2 + a2α1
b2 + a2α1
(5.4.3)
Последнее уравнение для x2 подставим в третье уравнение системы (5.4.1) и так далее.
На i-м шаге процесса (1<i<n) i-е уравнение системы преобразуется к такому же виду:
xi = α i xi +1 + βi , ãäå
(5.4.4)
ci
d − aiβi −1
α i =−
, βi = i
.
bi + ai α i −1
bi + ai α i −1
На последнем n-м шаге подстановка в последнее уравнение системы xn −1 = αn −1xn + βn −1 даст an ( αn −1xn + βn −1 ) + bn xn = dn . Отсюда
d − anβn −1
.
xn = n
bn + an αn −1
(5.4.5)
Значения остальных неизвестных вычисляются в процессе обратного хода по формулам (5.4.4). Итак, прямой ход метода прогонки состоит в вычислении прогоночных коэффициентов

c
d
i =1 : α1 =− 1 , β1 = 1 , γ1 =b1,

γ1
γ1


ci
di − aiβi −1
, γ i =bi + ai α i −1, i =2,3,...,n − 1 : α i =− , βi =
γi
γi


d − anβn −1
i = n : βn = n
, γn = bn + an αn −1.

γn

(5.4.6)
Обратный ход метода прогонки дает значения неизвестных по
формулам
(5.4.7)
xn = βn , xi = α i xi +1 + βi , i = n − 1,n − 2,...,2, 1.
Несложный подсчет показывает, что для реализации вычислений по описанному алгоритму требуется примерно 8n арифметиче
156
ских операций, что гораздо меньше числа операций в методе Гаус2
са ≅ n3 . Кроме того структура матрицы коэффициентов системы
3
(5.4.1) позволяет использовать для ее хранения лишь 3n-2 машинных слова.
Теоретические исследования показали, что для существования
решения системы (5.4.1) и его единственности необходимо выполнение следующих условий.
Теорема 5.3. Пусть коэффициенты системы (5.4.1) удовлетворяют условиям диагонального преобладания: bk≥ak + ck,
bk>ak, 1≤k≤n, тогда γi≠0 и αi≤1 для всех i = 1,n.
Условие γi≠0 и αi≤1 для всех i = 1,n означает, что метод прогонки устойчив по входным данным.
В качестве примера решим следующую систему, уже встречавшуюся нам при рассмотрении кубических сплайнов:
0.8,
=
 x1 − x2
 x + 4x + x
3.6,
=
2
3
 1
x2 + 4x3 + x4
=
−1.2,


x3 + 4x4 + x5 =
−3.6,

x4 − x5 =
−0.8.

c
d
Прямой ход. i= 1, γ1 = b1 = 1, α1 = − 1 = 1, β1 = 1 = 0.8,
γ1
γ1
i =2, γ2 =b2 + a2 α1 =4 + 1 =5, α2 =−
=
β2
c2
1
=− =−0.2,
γ2
5
d2 − a2β1 3.6 − 0.8
=
= 0.56.
γ2
5
c
1
i =3, γ 3 =b3 + a3α2 =4 − 0.2 =3.8, α3 =− 3 =−
=−0.263158,
γ3
3.8
d −a β
−1.2 − 0.56
β3 = 3 3 2 =
=−0.463158.
γ3
3.8
i =4, γ 4 =b4 + a4 α3 =4 − 0.263158 =3.736842, α4 =−
c4
=−0.267606,
γ4
d − a4β3 −3.6 + 0.463158
β4 = 4
=
=−0.839437.
γ4
3.736842
157
i =5, γ5 =b5 + a5α4 =−1 − 0.267606 =−1.267606,
d −a β
−0.8 + 0.839437
β5 = 5 5 4 =
=−0.031111.
γ5
−1.267606
Обратный ход. x5 = β5 = –0.031111,
x4 = α4x5 + β4 = (–0.267606)·(–0.031111) + (–0.839457) = –0.831132,
x3 = α3x4 + β3 = (–0.263158)·(–0.831132) + (–0.463158) = –0.244439,
x2 = α2x3 + β2 = (–0.200000)·(–0.244439) + 0.560000 = 0.608888,
x1 = α1x2 + β1 = 1.000000·0.608888 + 0.800000 = 1.408888.
§ 5.5. Метод простых итераций
Итерационные методы применяют главным образом для решения задач большой размерности, когда использование прямых
методов невозможно из-за ограничений технического характера.
Большие системы уравнений, возникающие в приложениях, как
правило, являются разреженными. При использовании метода Гаусса, например, большое число нулевых элементов превращаются
в ненулевые и матрица теряет свойство разреженности. Использование итерационных методов не меняет матрицу коэффициентов, она
остается разреженной.
Однако применение итерационных методов для качественного решения требует серьезного использования структуры системы
уравнений, специальных знаний и опыта.
Пусть дана система A x = b, где A – квадратная невырожденная
матрица. Преобразуем ее к виду
(5.5.1)
=
x Bx + c, где B – квадратная матрица такой же размерности что и A, c – вектор – столбец. В развернутой форме записи система (5.5.1) имеет вид
x=

1 b11x1 + b12 x2 + ... + b1n xn + c1,
 x= b x + b x + ... + b x + c ,

2
21 1
22 2
2n n
2

.....................................................

 x=
n bn1x1 + bn2 x2 + ... + bnn xn + cn .
(5.5.2)
Операция приведения системы A x = b к виду (5.5.2) не является очевидной и простой и требует специальных знаний, а также существенного использования специфики системы. Самый простой
способ приведения системы A x = b к виду (5.5.2) состоит в последо158
вательном исключении из первого уравнения системы A x = b переменной x1, из второго уравнения – переменной x2 и так далее. Метод
итерации в такой реализации называется методом Якоби1. Система
уравнений метода Якоби имеет вид
=
b12 x2 + b13 x3 + ... + b1n −1xn −1 + b1n xn + c1,
 x1

=
+ b23 x3 + ... + b2n −1xn −1 + b2n xn + c2 ,
 x2 b21x1
(5.5.3)

.....................................................

x=
+ cn .
n bn1x1 + bn2 x2 + b3n x3 + ... + bnn −1xn −1
На главной диагонали матрицы B системы (5.5.3) стоят нули, а
остальные элементы, очевидно, выражаются по формулам
aij
bi
, i, j =
1,n, i ≠ j.
bij =
− , ci =
aii
aii
Практически метод работает следующим способом. Выбирается
T
(0)
0
(0) (0)
начальное приближение x =  x1 , x2 ,..., xn( )  и подставляет

ся в правую часть системы (5.5.1). Решая систему, находят первое
(1)
приближение =
x
Bx
(0)
+ c. Это приближение опять подставляют
(2)
(1)
x
Bx + c.
в правую часть (5.5.1). Таким образом, получается =
Продолжая этот процесс далее, получим последовательность
( 0 ) (1) (2)
(n )
x , x , x ,..., x ,... приближений, вычисляемых по формуле
x
( k+1)
= Bx
(k)
+ c, k = 0, 1, 2, .... (5.5.4)
В развернутой форме записи система (5.5.4) выглядит таким образом:
+1)
k
(k)
(k)
 x( k=
b11x1 + b12 x2 + ... + b1n xn( ) + c1,
 1
k
k
 ( k+1)
 x2 = b21x1( ) + b22 x2( ) + ... + b2n xn( k ) + c2 ,

 .....................................................
 ( k+1)
(k)
(k)
(k)
xn = bn1x1 + bn2 x2 + ... + bnn xn + cn .
1
(5.5.5)
Карл Густав Якоб Якоби (1804–1851 ) – немецкий математик.
159
§ 5.6. Сходимость метода простых итераций
Теорема 5.4. Пусть B < 1. Тогда решение xòî÷í. системы
=
x Bx + c существует и единственно. При любом начальном при(0)
метод простых итераций сходится и справедлива
ближении x
оценка погрешности
x
(n )
− xòî÷í. ≤ B
n
x
(0)
− xòî÷í. .
(5.6.1)
Доказательство
(n )
(n −1)
Пусть в (5.5.5) k + 1 = n, тогда
=
x
Bx
+ c. Если xòî÷í. – точное решение системы, то оно удовлетворяет уравнению (5.5.1), то
есть =
xòî÷í. Bxòî÷í. + c. Вычтем два последних уравнения друг из
друга. Получим
x
(n )
 (n −1)

− xòî÷í.= B  x
− xòî÷í. .


Найдем норму этого выражения:
x
(n )
− xòî÷í
=
.
≤ B ⋅ B ⋅ x
(n −1)
 (n −1)

− xòî÷í.  ≤ B ⋅ x
− xòî÷í. ≤
B x


(n −2)
− xòî÷í. ≤ ... ≤ B
n
⋅ x
(0)
− xòî÷í. ,
так как неравенство верно для всех индексов от 0 до n.
Итак, метод простых итераций сходится со скоростью геометрической прогрессии, знаменатель которой q = B . Скорость сходимости тем выше, чем меньше величина B . Хотя метод сходится
(0)
при любом начальном приближении x , ясно, что начальное приближение нужно выбирать ближе к точному решению. Приведенная в теореме 5.4 оценка точности решения является априорной. Ее
практическое использование затруднительно, так как x
(0)
− xòî÷í.
неизвестно, а его грубое оценивание заведомо приведет к завышению числа итераций n.
Теорема 5.5. (Апостериорная оценка погрешности решения).
Если B < 1, то справедлива следующая оценка:
x
160
(n )
− xòî÷í. ≤
B
1− B
x
(n )
−x
(n −1)
.
(5.6.2)
Доказательство
В предыдущей теореме имели равенство
x
(n )
 (n −1)

− xòî÷í.= B  x
− xòî÷í. .


Преобразуем его алгебраически:
x
(n )
(n )
(n )
 (n −1)

− xòî÷í.
= B x
− x + x − xòî÷í.
=



1
n
−
n
n
( )  ( )
 ( )

= B x
− x  + B  x − xòî÷í.  .




Тогда
x
(n )
− xòî÷í. ≤ B ⋅ x
(n )
−x
(n −1)
+ B ⋅ x
(n )
− xòî÷í. .
Отсюда легко получаем
x
(n )
− xòî÷í. ≤
B
1− B
x
(n )
−x
(n −1)
.
Если требуется найти решение с точностью ε, то следует проводить итерации до выполнения неравенства
B
1− B
x
(n )
−x
(n −1)
<ε .
Таким образом, в качестве критерия окончания итерационного
процесса может быть использовано неравенство
x
(n )
−x
(n −1)
< ε1 , ãäå
=
ε1
1− B
B
ε.
§ 5.7. Метод Зейделя1
Пусть система A x = b методом Якоби приведена к виду (5.5.3):
=
b12 x2 + b13 x3 + ... + b1n −1xn −1 + b1n xn + c1,
 x1
x b x
=
+ b23 x3 + ... + b2n −1xn −1 + b2n xn + c2 ,
 2 21 1

.....................................................

x=
+ cn .
n bn1x1 + bn2 x2 + b3n x3 + ... + bnn −1xn −1
1
Людвиг Зейдель (1821–1896) – немецкий астроном и математик.
161
Метод Зейделя является лишь модификацией метода Якоби. Его
основная идея состоит в том, что при вычислении очередного (k + 1)го приближения к неизвестному xi при i > 1 используют уже найденные (k + 1) – е приближения к неизвестным x1, x2,…, xi–1, а не
k – е приближение, как в методе Якоби. Система (5.5.3) на (k + 1)-й
итерации будет выглядеть так:
k
(k)
(k)
 x( k+1)
=
b12 x2 + b13 x3 + ... + b1n xn( ) + c1,
 1
 ( k+1)
( k+1)
(k)
k
x2
=
b21x1
+ b23 x3 + ... + b2n xn( ) + c2 ,
(5.7.1)

.....................................................

 ( k+1)
( k+1)
( k+1)
= bn1x1
+ bn2 x2
+
... + cn .
 xn
Введем нижнюю и верхнюю треугольные матрицы
 0

 b21
B1 =  b31

 ...
b
 n1
0
0
b32
...
bn2
0
0
0
...
bn3
... 0 
 0 b12


0
... 0 
0


0
... 0 и B2 = 0


... ... 
...
...

0
0
... 0 

b13
b23
0
...
0
... b1n 

... b2n 
... b3n .

... ... 
... 0 
Тогда расчетная формула метода Зейделя примет такой вид
x
( k+1)
= B1 x
( k+1)
+ B2 x
(k)
+ c.
(5.7.2)
§ 5.8. Сходимость метода Зейделя
Теорема 5.6. Пусть выполнено условие B1 + B2 < 1. Тогда при
(0)
любом выборе x
метод Зейделя сходится и верна оценка погрешности
x
(n )
− xòî÷í. ≤ qn x
(0)
− xòî÷í. , ãäå q =
B2
1 − B1
< 1.
(5.8.1)
Это опять априорная оценка. Ее практическое использование
затруднительно. Теорема 5.6 сформулирована для матриц B1 и B2,
однако для метода Зейделя справедлива теорема, аналогичная теореме 5.4, использующая только норму матрицы B. Апостериорная
оценка погрешности метода Зейделя дается следующей теоремой.
162
Теорема 5.7. Если B < 1, то для метода Зейделя справедлива
следующая апостериорная оценка погрешности:
x
(n )
− xòî÷í. ≤
B2
1− B
x
(n )
−x
(n −1)
, n ≥ 1.
(5.8.2)
Существует устойчивое заблуждение, что метод Зейделя сходится всегда быстрее, чем метод простых итераций. Это действительно
так только в случае, когда матрица A симметрична и положительно
определена. Однако в общем случае возможны ситуации, когда метод Якоби сходится, а метод Зейделя или сходится медленнее, или
вообще расходится. Возможны и противоположные ситуации. Дело
в том, что эти методы ориентированы на решение разных классов
задач: метод Якоби – на системы с матрицами, близкими к диагональным, а метод Зейделя – на системы с матрицами, близкими
к нижним треугольным.
Пример. Решить систему линейных алгебраических уравнений
методом простых итераций и методом Зейделя с ε = 10–4:
124.0015,
 38.1000x1 + 0.1601x2 + 0.1916x3 + 0.2230x4 =
0.1237x + 37.2000x + 0.1866x + 0.2180x =

1
2
3
4 128.3760,

132.3800,
 0.1187x1 + 0.1502x2 + 36.3000x3 + 0.2131x4 =
0.1137x1 + 0.1452x2 + 0.1766x3 + 35.4000x4 =
136.0134.
Дана система A x = b, преобразуем ее к виду =
x Bx + c :
− 0.0042x2 − 0.0050x3 − 0.0059x4 + 3.2546,
 x1 =
x =
− 0.0050x3 − 0.0059x4 + 3.4510,
 2 −0.0033x1

x
=
−
x
−
x
− 0.0059x4 + 3.6468,
0
.
0033
0
.
0041
1
2
 3
x4 =
+ 3.8422.
−0.0032x1 − 0.0041x2 − 0.0050x3
Вычислим норму (5.1.11) для матриц B, B1 и B2. Имеем
0
−0.0042 −0.0050 −0.0059 



n
−
0
.
0033
0
−0.0050 −0.0059 
B =
, B ∞ max ∑ bij .
 −0.0033 −0.0041
0
−0.0059 
1≤i ≤n j =1


0
 −0.0032 −0.0041 −0.0050

=
B ∞ max ( 0.0033, 0.0042, 0.0050, 0.=
0059 ) 0.0059 << 1.
Отсюда
Аналогично B1 ∞ = 0.042,
B2
∞
= 0.059. Оба метода должны схо163
(0)
T
диться очень быстро. Пусть x = ( 0, 0, 0, 0 ) . Тогда по методу Яко(1)
T
би x = ( 3.2546, 3.4510, 3.6468, 3.8422 ) .
Далее
(2)
x1 =
−0.0042 ⋅ 3.4510 − 0.0050 ⋅ 3.6468 − 0.0059 ⋅ 3.8422 + 3.2546 =
3.1992,
(2)
x2 =
−0.0033 ⋅ 3.2546 − 0.0050 ⋅ 3.6468 − 0.0059 ⋅ 3.8422 + 3.4510 =
3.3994,
(2)
x3 =
−0.0033 ⋅ 3.2446 − 0.0041 ⋅ 3.4510 − 0.0059 ⋅ 3.8422 + 3.6468 =
3.5992,
(2)
x4 =
−0.0032 ⋅ 3.2546 − 0.0041 ⋅ 3.4510 − 0.0050 ⋅ 3.6468 + 3.8422 =
3.7994.
Дальнейшие итерации проводятся аналогично:
( 3)
x1 =
−0.0042 ⋅ 3.3994 − 0.0050 ⋅ 3.5992 − 0.0059 ⋅ 3.7994 + 3.2546 =
3.1992,
( 3)
x2 =
−0.0033 ⋅ 3.1992 − 0.0050 ⋅ 3.5992 − 0.0059 ⋅ 3.7994 + 3.4510 =
3.4000,
( 3)
x3 =
−0.0033 ⋅ 3.1992 − 0.0041 ⋅ 3.3994 − 0.0059 ⋅ 3.7994 + 3.6468 =
3.5999,
( 3)
x4 =
−0.0032 ⋅ 3.1992 − 0.0041 ⋅ 3.3994 − 0.0050 ⋅ 3.5992 + 3.8422 =
3.8000.
Последняя итерация дает
(4)
x1 =
−0.0042 ⋅ 3.4000 − 0.0050 ⋅ 3.5999 − 0.0059 ⋅ 3.8000 + 3.2546 =
3.2000,
(4)
x2 =
−0.0033 ⋅ 3.1999 − 0.0050 ⋅ 3.5999 − 0.0059 ⋅ 3.8000 + 3.4510 =
3.4000,
(4)
x3 =
−0.0033 ⋅ 3.1999 − 0.0041 ⋅ 3.4000 − 0.0059 ⋅ 3.8000 + 3.6468 =
3.6000,
(4)
x4 =
−0.0032 ⋅ 3.1999 − 0.0041 ⋅ 3.4000 − 0.0050 ⋅ 3.5999 + 3.8422 =
3.8000.
=
B 0.0059 << 1, то
Поскольку
B
1− B
≈1
x
и
(n )
− xòî÷í. =x
(n )
−x
(n −1)
.
Таким образом, достигнута точность ε = 10–4 за четыре итерации.
164
Вычисления по методу Зейделя для этого примера мало отличаются от выше приведенных.
Действительно,
(0)
(1)
T
T
x = ( 0, 0, 0, 0 ) , x = ( 3.2546, 3.4510, 3.6468, 3.8422 ) .
(2)
x1
= 3.1992, то есть то же выражение, что и в предыдущем случае.
(2)
x2 =
−0.0033 ⋅ 3.1992 − 0.0050 ⋅ 3.6468 − 0.0059 ⋅ 3.8422 + 3.4510 =
3.3995,
(2)
x3 =
−0.0033 ⋅ 3.1992 − 0.0041 ⋅ 3.3995 − 0.0059 ⋅ 3.8422 + 3.6468 =
3.5996,
(2)
x4 =
−0.0032 ⋅ 3.1992 − 0.0041 ⋅ 3.3995 − 0.0050 ⋅ 3.5996 + 3.8422 =
3.8000.
Третья итерация, оказавшаяся последней, дает
( 3)
x1 =
−0.0042 ⋅ 3.3995 − 0.0050 ⋅ 3.5996 − 0.0059 ⋅ 3.8000 + 3.2546 =
3.2000,
( 3)
x2 =
−0.0033 ⋅ 3.2000 − 0.0050 ⋅ 3.5996 − 0.0059 ⋅ 3.8000 + 3.4510 =
3.4000,
( 3)
x3 =
−0.0033 ⋅ 3.2000 − 0.0041 ⋅ 3.4000 − 0.0059 ⋅ 3.8000 + 3.6468 =
3.6000,
( 3)
x4 =
−0.0032 ⋅ 3.2000 − 0.0041 ⋅ 3.4000 − 0.0050 ⋅ 3.6000 + 3.8422 =
3.8000.
Достигнут тот же результат за три итерации.
§ 5.9. Лабораторная работа № 6.
Решение систем линейных алгебраических уравнений
методом простых итераций в пакете Mathcad
Метод простых итераций используется для решения разреженных систем большой размерности (~104÷106), причем матрица такой
системы помимо разреженности должна быть близкой к диагональной. Метод сходится тем быстрее, чем меньше норма матрицы коэффициентов B, при этом для сходимости метода необходимо B < 1.
Основная формула метода
x
( k+1)
= Bx
(k)
+ c, k = 0, 1, 2... (5.9.1)
Если система линейных уравнений задана в традиционной форме A x = b, ее сначала нужно привести к форме (5.9.1) методом Якоби.
165
Рассмотрим пример решения такой системы в пакете Mathcad:
ORIGIN: = 1
TOL: = 10–7
 0.4000
0.0003

−0.0029
A := 
 −0.0055

 −0.0082
 0.1220

−0.2532
b := 
 −0.9876

 −2.0812
0.0008
−0.5000
−0.0018
0.0014 

−0.0012 
−0.0076
−0.0070
−2.3000 
−0.0050
−1.4000
−0.0039 







norm1(A) = 2.306
n: = 4
n = 4
i: = 1..n
bi
ci :=
Ai , i
 0.305

0.506
c=
 0.705

 0.905
i: = 1..n
Bi , j :=
i: = 1..n






j: = 1..n
−Ai , j
Ai , i
Bi,j: = 0
−4
−3
−3 

−7.5 × 10
−2 × 10
−3.5 × 10
0


 −5.8 × 10 − 3
0
−3.6 × 10 − 3
−2.4 × 10 − 3 
B=

0
−2.786 × 10 − 3 
 −3.929 × 10 − 3 −3.571 × 10 − 3


−3
−3.304 × 10 − 3 −3.043 × 10 − 3
0
 −3.565 × 10

norm1(B) = 0.013
Встроенная подпрограмма norm1 вычисляет первые нормы матриц A и B. Так как B = 0.013, то по теореме 5.4 § 5.6 метод итераций должен сходиться при любом начальном приближении.
Предыдущие операторы программы приводят систему уравнений, заданную в виде A x = b, к виду =
x Bx + c по формулам § 5.5.
166
Сам процесс последовательных приближений можно записать
в векторно-матричной форме всего лишь одной строкой программы:
〈 〉
xx 1 := c k := 2 ..
〈 〉
〈
〉
11 xx k := c + B ⋅ xx k−1
Здесь в качестве начального приближения выбран вектор c; видно, что из десяти заказанных итераций для достижения заданной
k
точности 10–7 потребовалось лишь три. xx
– k-й столбец матрицы xx размерности (4×11), где хранятся все приближения к точному
решению.
1
xx =
2
3
4
5
6
7
8
9
1
0.305
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
2
0.506
0.5
0.5
0.5
0.5
0.5
0.5
0.5
0.5
3
0.705
0.7
0.7
0.7
0.7
0.7
0.7
0.7
0.7
4
0.905
0.9
0.9
0.9
0.9
0.9
0.9
0.9
...
b встроенной проДля проверки решим эту же систему A ⋅ x =
граммой lsolve, которая уже использовалась в лабораторной работе
№ 3.
zz: = lsolve(A,b)
 0.3 

0.5
zz = 
 0.7

 0.9





В заключение приведем две подпрограммы, реализующие приведение исходной системы линейных уравнений A x = b к нужной
форме и итерационные вычисления по методу Якоби:
itera ( A , n) :=
for i ∈ 1 ..
α
←
1
n
Ai , i
for j ∈ 1 ..
n
Bi , j ← −Ai , j ⋅ α
B
ε: = 10–7
Bi , j ← 0
if i
j
z: = Jakobi(A,b,ε)
 0.3 

0.5
z=
 0.7

 0.9





167
Задание № 1. Любым из вышеописанных методов с точностью
ε = 10–7 решить систему линейных алгебраических уравнений, заданную в форме A x = b. Номер Вашего варианта – номер Вашей фамилии в журнале преподавателя.
Jakobi ( A , b , ε ) :=
n ← rows ( A)
B ← itera ( A , n)
for i ∈ 1 ..
ci ←
n
bi
Ai , i
xi ← 0
x1i ← ci
norm ← norm1 ( B)
return
while
norm
norm >
if norm ≥ 1
ε
for i ∈ 1 ..
xi ← ci +
n
n
∑
j = 1
norm ←
x1 ⋅ x1
norm ←
x1 ⋅ x1
norm
(Bi , j ⋅ x1j)
x1 ← x − x1
x
№ варианта
1
2
168
x1 ← x
Вектор правой
части b
Матрица A
1.70
0.00
–0.03
–0.05
3.00
0.11
–0.05
–0.22
0.03
0.80
–0.02
–0.04
0.38
2.10
0.05
–0.11
0.04
0.01
–0.10
–0.03
0.49
0.32
1.20
–0.01
0.05
0.02
0.00
–1.00
0.59
0.43
0.26
0.30
0.6810
0.4803
–0.0802
–1.0007
1.5136
1.4782
1.0830
0.3280
№ варианта
3
4
5
6
7
8
9
10
11
Вектор правой
части b
Матрица A
0.77
–0.45
–0.26
–0.05
0.79
–0.34
–0.16
–0.12
0.99
–0.03
–0.09
–0.19
3.68
0.12
0.11
0.11
3.55
0.11
0.12
0.10
2.38
0.08
0.07
0.06
1.00
0.00
–0.22
–0.08
0.68
–0.16
–0.37
–0.12
0.58
–0.11
–0.12
–0.15
0.04
1.23
–0.34
0.26
–0.12
1.08
–0.34
0.26
–0.02
0.72
–0.13
0.23
0.16
3.59
0.14
0.14
0.15
3.46
0.14
0.13
0.10
2.29
0.09
0.08
–0.17
0.82
–0.18
–0.07
0.18
0.88
–0.27
–0.21
0.32
1.26
–0.08
0.35
–0.21
–0.06
1.11
–0.34
0.34
–0.17
0.85
0.08
0.62
–0.33
0.58
–0.08
0.18
0.18
3.50
0.17
0.18
0.16
3.37
0.17
0.12
0.11
2.20
0.11
0.33
–0.43
0.79
–0.21
–0.02
0.14
1.02
0.18
–0.03
0.36
1.14
0.18
0.18
0.00
0.00
1.12
0.16
0.18
0.31
0.75
–0.08
0.07
–0.28
0.63
0.22
0.21
0.21
3.11
0.21
0.19
0.20
3.28
0.14
0.14
0.15
1.10
–0.18
0.08
–0.07
0.96
–0.21
–0.27
0.24
0.75
0.00
0.00
0.24
1.00
1.2400
–0.8800
–0.6200
–1.1700
–0.6400
1.4200
–0.4200
0.8300
–1.3000
1.1000
–1.7000
1.5000
1.1604
1.2025
1.2409
1.2757
1.0834
1.1239
1.1607
1.1938
5.0897
5.3487
5.5712
5.7570
–1.2000
0.3300
0.4800
–1.2000
1.8300
–0.6500
2.2300
–1.1300
0.4400
1.4200
–0.8300
–1.4200
169
№ варианта
12
13
14
15
16
17
18
19
20
170
Вектор правой
части b
Матрица A
0.82
–0.11
–0.05
–0.12
0.87
–0.24
–0.06
–0.72
0.85
–0.32
–0.17
–0.21
0.97
–0.22
–0.33
–0.08
4.30
0.10
0.04
–0.03
5.60
0.15
0.09
0.03
6.90
0.19
0.13
0.08
8.20
0.23
0.18
0.12
9.50
0.28
0.22
0.17
0.34
0.77
0.12
–0.08
–0.23
1.00
–0.15
0.08
–0.05
1.13
–0.06
0.16
0.05
0.45
–0.13
–0.17
0.22
3.40
0.09
0.03
0.27
4.70
0.15
0.09
0.32
6.00
0.21
0.15
0.37
7.30
0.26
0.21
0.42
8.60
0.32
0.26
0.12
0.15
0.86
–0.06
0.44
0.31
1.00
0.05
0.08
0.12
1.08
–0.36
–0.22
0.08
1.08
–0.29
0.27
0.21
2.50
0.08
0.33
0.27
3.80
0.15
0.39
0.33
5.10
0.22
0.45
0.39
6.40
0.29
0.51
0.46
7.70
0.35
–0.15
–0.32
0.18
1.00
0.05
–0.15
0.23
1.00
–0.14
–0.11
–0.12
1.00
0.33
–0.07
0.05
0.67
0.32
0.26
0.20
1.60
0.39
0.33
0.27
2.90
0.46
0.41
0.35
4.20
0.53
0.48
0.42
5.50
0.60
0.55
0.50
6.80
–1.3300
0.8400
–1.1600
0.5700
2.3000
–0.1800
1.4400
2.4200
–0.4800
1.2400
1.1500
–0.8800
0.4300
–1.8000
–0.8000
1.7000
2.6632
2.7779
2.5330
1.9285
4.0316
4.3135
4.2353
3.7969
5.6632
6.1119
6.2000
5.9275
7.5591
8.1741
8.4281
8.3210
9.7191
10.5000
10.9195
10.9775
№ варианта
21
22
23
24
25
26
27
28
29
Вектор правой
части b
Матрица A
0.87
0.00
–0.11
–0.08
0.68
–0.16
–0.05
–0.12
1.00
–0.16
–0.15
–0.25
10.80
0.03
0.04
0.02
12.10
0.37
0.31
2.60
13.40
0.41
0.36
0.31
0.94
–0.32
–0.16
–0.09
1.00
–0.11
–0.23
–0.12
0.68
–0.18
–0.12
–0.05
–0.22
0.55
0.00
–0.09
0.16
1.23
0.08
–0.14
–0.08
1.23
–0.12
–0.21
0.05
9.90
0.04
0.03
5.28
11.20
0.42
0.37
5.81
12.50
0.48
0.43
–0.18
1.00
0.08
–0.22
–0.34
1.23
0.12
–0.12
0.23
0.88
–0.32
0.11
0.33
0.23
1.08
–0.33
0.08
–0.11
1.00
0.18
0.23
–0.18
0.68
0.16
0.06
0.05
9.00
0.04
0.64
5.86
10.30
4.81
0.70
6.50
11.60
0.54
–0.33
–0.23
1.00
0.13
–0.23
0.18
0.84
0.47
–0.11
0.33
1.05
–0.09
–0.07
–0.07
–0.18
0.79
–0.15
0.21
–0.34
0.94
–0.32
–0.16
0.18
0.97
0.07
0.06
0.08
8.10
0.75
0.69
6.44
19.40
0.82
0.77
7.18
10.70
–0.16
0.05
0.12
1.00
0.06
–0.36
0.35
0.82
0.06
0.00
–0.07
1.12
0.1100
–0.3300
0.8500
–1.7000
2.4200
1.4300
–0.1600
1.6200
1.3400
–2.3300
0.3400
0.6300
12.1430
13.0897
13.6744
13.8972
14.8310
15.9430
16.6926
17.0800
17.7828
19.0599
19.9744
20.5261
2.4300
–1.1200
0.4300
0.8300
1.4200
–0.6600
1.0800
1.7200
0.6700
–0.8800
0.1800
1.4400
171
№ варианта
30
Вектор правой
части b
Матрица A
0.77
–0.12
–0.08
–0.25
0.14
1.00
0.12
–0.22
–0.06
–0.32
0.77
–0.14
0.12
0.18
–0.32
1.00
1.2100
–0.7200
–0.5800
1.5600
§ 5.10. Лабораторная работа № 6.
Решение систем линейных алгебраических уравнений
методом простых итераций в пакете Matlab
Решим аналогичную линейную систему алгебраических уравнений в системе Matlab. Пусть
 0.77 0.14 −0.06 0.12 


−0.12 1.00 −0.32 0.18 
A x = b и A =
,b
 −0.08 0.12 0.77 −0.32 


 −0.25 −0.22 −0.14 1.00 
 1.21 


 −0.72 .
 −0.58 


 1.56 
Решим данную систему методом Якоби, частным случаем метода простых итераций. Для этого составим две подпрограммы: приведение матрицы А к традиционной форме метода Якоби и подпрограмму, реализующую итерации самого метода. Кроме того, применим подпрограмму, вычисляющую первую норму произвольной
квадратной матрицы. Текст этих подпрограмм приводится ниже.
Встроенная подпрограмма-функция dot вычисляет скалярное произведение двух векторов.
function B=itr(A,n)
%Подпрограмма itr является аналогом подпрограммы
%itera в пакете Mathcad.
for i=1:n
alf=1/A(i,i);
for j=1:n
B(i,j)=-A(i,j)*alf;
if i==j
B(i,j)=0;
end;
end;
end;
end
172
function a=norm1(A,n)
%Подпрограмма norm1 вычисляет первую норму
n
∑
%матрицы А по формуле A = max
aij .
1 1≤ j ≤n
for i=1:n
i =1
a=0;
for j=1:n
a=a+abs(A(j,i));
end;
st(i)=a;
end;
a=max(st);
end
function x=Jkb(A,b,eps)
%Подпрограмма Jkb - аналог функции
%Jakobi в пакете Mathcad.
[n,k]=size(A);
B=itr(A,n);
for i=1:n
c(i)=b(i)/A(i,i);
x(i)=0;
x1(i)=c(i);
end;
norm=norm1(B,n);
if norm>=1
disp(norm);
return;
end;
while norm>eps
for i=1:n
a=0;
for j=1:n
a=a+B(i,j)*x1(j);
end;
x(i)=c(i)+a;
end;
norm=sqrt(dot(x1,x1));
for i=1:n
x1(i)=x(i)-x1(i);
end;
173
norm=sqrt(dot(x1,x1))/norm;
for i=1:n
x1(i)=x(i);
end;
end;
end
Далее следует текст основной программы.
clear
>> A = [0.77 0.14 -0.06 0.12;-0.12 1.00 -0.32 0.18;...
-0.08 0.12 0.77 -0.32;-0.25 -0.22 -0.14 1.00];
>> b = [1.21;-0.72;-0.58;1.56];
n = 4;
>> eps = 10^(-7);
>> z = Jkb(A,b,eps)
z =
1.4556
-0.7830
0.2633
1.7885
Рассмотрим теперь решение систем линейных алгебраических
уравнений с помощью встроенных функций пакета Matlab. Здесь
можно пользоваться подпрограммами, реализующими два класса
методов – прямые и итерационные. Прямые методы находят точное
решение системы линейных алгебраических уравнений за конечное
число шагов. Типичный пример алгоритма прямых методов – метод исключения Гаусса. Итерационные же методы дают только приближённое решение за различное число итераций. Наиболее часто
используемый метод здесь – это метод сопряжённых градиентов.
Пакет Matlab реализует около десяти подпрограмм-функций, представляющих различные модификации этого метода. Воспользуемся
лишь одной встроенной функцией pcg, реализующей предобусловленный метод сопряжённых градиентов.
Наиболее часто применяемый синтаксис этой подпрограммы:
x = pcg(A,b);
x = pcg(A,b,tol,maxit), где матрица А порядка n предполагается симметрической и положительно определённой. Начальное приближение – нулевой вектор. tol – погрешность вычисления, maxit – максимально возможное число итераций.
В нашем случае
>> maxit=5;
>> x=pcg(A,b,eps,maxit)
pcg stopped at iteration 5 without converging to the desired
tolerance 1e-07
because the maximum number of iterations was reached.
174
The iterate returned (number 5) has relative residual 0.11.
x = 1.5474
-0.6070
0.5004
1.8034
Задание № 2. Любым из вышеописанных методов с точностью
ε = 10–7 решить систему линейных алгебраических уравнений, заданную в форме A x = b. Номер Вашего варианта – номер Вашей фамилии в журнале преподавателя. Числовые данные приведены на
стр. 168–172.
175
6. ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ
НЕЛИНЕЙНЫХ УРАВНЕНИЙ И СИСТЕМ
§ 6.1. Решение нелинейных уравнений [9]
Пусть дано уравнение f(x) = 0. Корнем этого уравнения называется такое значение xk, при котором f(xk) = 0. Корень xk называется
простым, если f/(xk) = 0, в противном случае – кратным. Целое число
m называется кратностью корня xk, если
k
m
f ( ) ( xk ) =
0, äëÿ k =
1,2,...,m − 1, à f ( ) ( xk ) ≠ 0.
Геометрически корень xk соответствует точке пересечения графика функции y = f(x) с осью Ox. Корень кратный, когда пересечение
происходит под нулевым углом (см. рис. 6.1). На рисунке x1, x3 – простые корни, x2, x4, – кратные. В подавляющем большинстве случаев
представить решение уравнения f(x) = 0 в виде конечной замкнутой
формулы оказывается невозможным. Даже для простейшего алгебраического уравнения n-й степени xn + an–1xn–1 + … + a1x + a0 = 0 явные формулы корней известны для n = 2, 3, 4. Уже для уравнения
пятой (и более высоких степеней) таких формул не существует.
Задача отыскания корней нелинейного уравнения решается
в два этапа. Первый называется этапом локализации (отделения)
корней, второй – этапом итерационного уточнения корней. Отрезок
[a, b], содержащий только один корень xk уравнения f(x) = 0, называется отрезком локализации корня xk. Способы локализации корней
многообразны, и указать универсальный метод не представляется
возможным. Иногда отрезок локализации известен либо он определяется из физических соображений. В простых случаях хороший
результат может дать графический метод. На этапе итерационного
f(x)
x1
x2
x3
x4
Рис. 6.1. Простые и кратные корни функции y = f(x)
176
уточнения корней с точностью ε используют тот или иной итерационный метод, позволяющий строить последовательность x(0), x(1),…,
x(n) приближений к корню xT. Итерационный метод называют одношаговым, если для вычисления очередного приближения x(n + 1) используется только одно предыдущее приближение x(n) и k – шаговым, если для вычисления x(n + 1) используется k предыдущих приближений x(n–k + 1), x(n–k + 2),…, x(n), Столько же данных необходимо
для начального приближения, чтобы запустить метод.
Скорость сходимости – одна из важнейших характеристик итерационных методов. Говорят, что метод сходится со скоростью геометрической прогрессии, знаменатель которой q<1, если для ∀n∈N
справедлива оценка:
n
x( ) − xòî÷í. ≤ c0qn , ãäå c0 =
const.
(6.1.1)
При определении скорости сходимости метода используют понятие порядка сходимости. Если справедливо неравенство
x(
n +1)
p
n
− xòî÷í. ≤ c x( ) − xòî÷í. , ãäå c > 0, p ≥ 1,
(6.1.2)
то число p называют порядком сходимости. Если p = 1, то сходимость
линейная (сходимость геометрической прогрессии), при p>1 сходимость называется сверхлинейной. Если p = 2, скорость сходимости
называют квадратичной.
Если p = 1, то есть метод обладает линейной сходимостью, можно
установить справедливость формулы
n
0
x( ) − xòî÷í. ≤ qn x( ) − xòî÷í. , n ≥ 0;
(6.1.3)
смотрите метод простых итераций или метод Зейделя в предыдущей главе. Если же p>1, то справедлива оценка
( )
n
n
0
x( ) − xòî÷í. ≤ c1 q p , n ≥ 0, ãäå c1 =c x( ) − xòî÷í. . (6.1.4)
§ 6.2. Метод Ньютона для уравнений
Этот знаменитый метод – один из наиболее эффективных методов решения самых разных нелинейных задач. Выведем его расчет177
( )
0
f x( )
( )
1
f x( )
0
M( )
xT
2
x( )
1
x( )
0
x( )
Рис. 6.2. Графическая иллюстрация метода Ньютона
ную формулу, исходя из простейших геометрических соображений.
Соответствующая иллюстрация приведена на рис. 6.2.
Пусть x(0) – заданное начальное условие. В точке M(0) с координатами M(0)(x(0), f(x(0))) проведем касательную к графику функции
y = f(x) и за новое приближение x(1) примем абсциссу точки пересечения этой касательной с осью Ox. Далее поступают аналогично, за
приближение x(2) берут абсциссу точки пересечения с осью Ox касательной, проведенной к графику в точке M(1)(x(1), f(x(1))) и так далее.
Уравнение касательной, проведенной к графику y = f(x) в точке (x(n),
f(x(n))), имеет вид
n
n
n
y=
f x( ) + f / x( ) x − x( ) .
( ) ( )(
)
Если положить здесь y = 0, тогда абсцисса точки x(n + 1) пересечения касательной с осью Ox будет удовлетворять этому уравнению,
то есть
n
n
n +1
n
0 =+
f x( ) f / x( ) x( ) − x( ) .
( ) ( )(
)
Отсюда
f (x(n) )
x(n +1) =
x(n) −
, n ≥ 0,
f '(x(n) )
f / (x(n) ) ≠ 0 .
(6.2.1)
Это и есть основная рабочая формула метода Ньютона или метода касательных, получившего свое второе название благодаря указанной геометрической интерпретации.
178
§ 6.3. Сходимость метода Ньютона и трудности его применения
Теорема 6.1. Пусть xk – простой корень уравнения f(x) = 0, в некоторой окрестности которого функция y = f(x) дважды непрерывно дифференцируема. Тогда найдется такая малая σ-окрестность
корня xT, что при произвольном выборе начального приближения
x(0) из этой окрестности итерационная последовательность метода
Ньютона не выходит за пределы этой окрестности и справедлива
оценка
x(
n +1)
2
n
− xT ≤ c x( ) − xT , n ≥ 0,
(6.3.1)
1
где c = .
σ
Это означает, что метод Ньютона сходится с квадратичной скоростью. Грубо говоря, на каждой итерации число верных знаков приближения примерно удваивается.
Простота и высокая скорость сходимости делает метод Ньютона
чрезвычайно привлекательным. Однако имеются две существенные
трудности. Первая из них – необходимость вычисления производной f / ( x ) . Это часто либо невозможно сделать, либо вычисление
f / ( x ) оказывается слишком дорогим. В таких ситуациях прибегают к различным модификациям метода Ньютона. Вторая трудность – его локальная сходимость.
Это значит, что последовательные приближения сходятся к точному решению лишь в малой σ-окрестности точки xT. Неудачный
выбор начального приближения (см. рис. 6.3) может дать расходя-
x
(0)
область σ
xT
x
(1)
x
(2)
Рис. 6.3. Неудачный выбор начального приближения в методе Ньютона
179
щуюся последовательность. Для преодоления этой трудности часто
на практике используют метод Ньютона в сочетании с каким-нибудь медленно, но гарантированно сходящимся методом типа метода бисекции.
§ 6.4. Метод Ньютона решения систем нелинейных уравнений
Решение систем нелинейных уравнений – задача существенно
более сложная, чем уравнения типа f(x) = 0. Пусть дана система n нелинейных уравнений с n неизвестными вида
 f1 ( x1, x2 ,..., xn ) = 0,

 f2 ( x1, x2 ,..., xn ) = 0,

.............................
 fn ( x1, x2 ,..., xn ) = 0.

(6.4.1)
На практике, к сожалению, эта задача встречается гораздо чаще
предыдущей. Как и в случае уравнения с одним неизвестным, отыскание решения начинают с этапа локализации. Для каждого из искомых решений x указывают множество, которое содержит только
одно это решение и расположено в достаточно малой его окрестности. Часто в качестве такого множества выступает параллелепипед
или шар в n-мерном пространстве. Сама задача локализации в большинстве случаев очень сложна, иногда полное решение задачи локализации невозможно. В простейших случаях могут быть использованы графические методы.
В методе Ньютона применяется линеаризация системы (6.4.1).
Пусть по выбранному x
(0)
построены приближения
x
(1)
,x
(2)
,..., x
(k)
.
Заменим в системе (6.4.1) каждую из функций fi(x), i = 1, 2,…, n
линейной частью ее разложения по формуле Тейлора в точке x
 (k) 
∂fi  x 
 (k) 
  x − x( k ) .
fi x ≈ fi  x  + ∑ 
 j
j 



 j =1 ∂xj
( )
180
n
(k)
:
(6.4.2)
Тогда вместо системы (6.4.1) получим

 (k) 
∂f x 

( k )  n 1 

  x − x( k )  =
 f1  x  + ∑
 j
j  0,



 j =1 ∂xj


 (k) 


n ∂f2  x

k
(
)



  x − x( k )  =
+
f
x
 j


∑
j  0,
 2


 j =1 ∂xj

........................................................

 (k) 


n ∂fn  x

k
 ( )

  x − x( k )  =
 fn  x  + ∑
 j
j  0.
∂
x




j

j =1
(6.4.3)
В матричной форме система (6.4.3) будет иметь вид
(k) 
 (k) 
 ( k ) 
f  x  + Φ  x  x − x  =0,





(6.4.4)
где матрица Якоби
( )
 ∂f1 x

 ∂x1

 ∂f2 x

Φ x =
 ∂x1
 ...

 ∂fn x

 ∂x
1

( )
( )
( )
( )
( )
∂f1 x
∂x2
( )
∂f2 x
∂x2
...
( )
∂fn x
∂x2
( )
∂f1 x 

∂xn 

∂f2 x 
...

∂xn .
...
... 

∂fn x 

...
∂xn 
...
( )
(6.4.5)
( )
( )
Если матрица Φ x – невырожденная, то есть det Φ x ≠ 0, то
существует обратная матрица Φ −1 x . Тогда система (6.4.4) имеет
единственное решение, которое и принимается за очередное при-
( )
( k+1)
ближение x
к решению x. Таким образом, приближение x
удовлетворяет равенству
(k) 
 (k) 
 ( k )  ( k+1)
− x  =0.
f  x  + Φ  x  x





( k+1)
(6.4.6)
181
Из (6.4.6), как и в случае одного уравнения, легко выводится итерационная формула метода Ньютона для систем нелинейных уравнений:
( k+1)
x = x
(k)
 (k)   (k) 
− Φ −1  x  f  x . 
 

(6.4.7)
Формула (6.4.7) редко используется для непосредственного вы-
( k+1)
в силу своей трудоемкости из-за необходимости
числения x
обращать матрицу Якоби. Вместо этого часто решается система линейных алгебраических уравнений вида
( k+1)
( k+1)
(k)
 ( k )  ( k+1)
 (k) 
Φ  x  ∆x
=
−f  x , ãäå ∆ x
=
− x . (6.4.8.)
x




Очередное приближение легко находится по формуле
( k+1)
x = x
(k)
+ ∆x
( k+1)
.
(6.4.9)
§ 6.5. Сходимость метода Ньютона
для систем нелинейных уравнений
Теорема 6.2. Пусть в некоторой окрестности решения x системы
(6.4.1) функции fi x , i = 1,2,...,n дважды непрерывно дифференцируемы и матрица Якоби Φ x невырожденная. Тогда найдется
такая малая σ-окрестность решения x, что при произвольном вы-
( )
( )
(0)
боре начального приближения x
из этой σ-окрестности итерационная последовательность метода Ньютона сходится к решению
x, не выходя за пределы σ-окрестности и справедлива оценка
x
( k+1)
−x ≤c x
(k)
2
1 . − x , k ≥ 0, c =
σ
(6.5.1)
По приведенной в начале главы классификации метод Ньютона
сходится с квадратичной скоростью. Практически для окончания
расчетов используют критерий
x
( k+1)
−x
(k)
< ε. (6.5.2)
Все трудности метода, указанные для случая одного уравнения,
сохраняются и здесь. Обостряется проблема нахождения хорошего
182
начального приближения. Кроме того, вместо одной производной
приходится вычислять n2 частных производных, что само по себе
может оказаться весьма сложным делом. В целом решение многомерной задачи значительно сложнее решения одного нелинейного
уравнения.
§ 6.6. Модификации метода Ньютона
Существует большое число модификаций метода Ньютона, позволяющих снизить его трудоемкость. Вот некоторые из них.
a). Упрощенный метод Ньютона.
(
), вычисляемая заново на каждом прибли(0)
жении, заменяется постоянной матрицей A = Φ ( x ). В результате
В нем матрица Φ x
(k)
формулы метода приобретают следующий вид:

( k+1)
 (k) 
=
−f  x ,
 A∆ x



(k)
( k+1)
 ( k+1)
.
x = x + ∆ x
(6.6.1)
Этот метод обладает линейной сходимостью, причем знамена-
(0)
к x. Число итераций
тель прогрессии q тем меньше, чем ближе x
здесь существенно возрастает, однако вычислительные затраты могут оказаться меньше из-за того, что вычисление матрицы Якоби
происходит всего один раз, кроме того в системе (6.6.1) линейные
уравнения решаются с фиксированной матрицей A и различными
правыми частями. Для таких систем существуют специальные экономичные способы их решения.
б). Использование формул численного дифференцирования.
∂fi
Часто вычисление производных
невозможно. В подобных
∂xj
ситуациях используют различные конечно-разностные аппроксимации первых частных производных. Например,
 (k) 
∂fi  x 

 ≈ J( k ) =
ij
∂xj
=
1   (k)
(k) (k)
(k) (k)
(k)
k
k 
f x ,..., xj −1, xj + hj , xj +1,..., xn( )  − fi  x1 ,..., xn( )   . (6.6.2)
( k )  i  1



h
j
183
Формулы метода в этом случае примут вид
 ( k ) ( k+1)
 (k) 
=
−f  x  ,
J ∆x



(k)
( k+1)
 ( k+1)
.
 x = x + ∆x
(6.6.3)
(k)
В этом методе проблему представляет выбор шагов hj . Это так-
(k)
же не простая задача. От выбора hj зависит точность приближе (k) 
ния J(k) к Φ  x , а следовательно, и скорость сходимости.


в). Метод секущих.
(k)
( k−1)
(k)
h
x
− x . Формулы (6.6.2) и (6.6.3) остаВ этом методе=
ются без изменения. Однако, для того чтобы начать вычисления, не-
(0)
(1)
обходимо задать два начальных приближения x
и x . Если они
выбраны удачно, то метод сходится со сверхлинейной сходимостью
5 +1
.
с порядком сходимости p =
2
Пример. Решить систему нелинейных уравнений методом Ньютона с ε = 10–3:
sin ( x + y ) − 1.1x =
0.1,

x2 + y2 =
1.

Здесь две переменные: x1 = x и x2 = y. Вычислим матрицу Якоби
в аналитической форме:

 ∂f1
cos ( x + y ) − 1.1,

 ∂=
x


∂f1

=
cos ( x + y ),
f1 ( x, y=
 ∂y
) sin ( x + y ) − 1.1x − 0.1,
⇒ 

∂f2
f2 ( x, y ) = x2 + y2 − 1.


= 2x,


∂x


∂f2


= 2y.
∂y


184
Итак,
 ∂f1 ( x, y ) ∂f1 ( x, y ) 


∂x
∂y

  cos ( x + y ) − 1.1 cos ( x + y ) .
=
Φ x
=

 ∂f ( x, y ) ∂f ( x, y )  
2x
2y
2
2




∂y
 ∂x

( )
Пусть
x
(0)
 0.1 
(0)
=
, x ≠ 0,
1
0
.


так как могут быть случаи деления на нуль.
Основная формула метода
( k+1)
x = x
(k)
 (k)   (k) 
− Φ −1  x  f  x ,

 

поэтому на каждом шаге необходимо знать
( )
( )
f x è Φ x .
Первый шаг.
 (0) 
=
fx 


  (0)  
 f1  x    sin (1.1) − 0.1   0.7912 


=
=

 
.
  ( 0 )    1.01 − 1   0.0100 
 f2  x  

 
( )
В данном примере матрица Φ x имеет столь простую структуру, что ее можно легко обратить аналитически, а не делать
этого для численной матрицы на каждом шаге. Действительно,
detФ = 2xcos(x + y)–2.2x–2xcos(x + y) = –2.2x,
1  A11
Φ −1 x = 
det Φ  A12
( )
A21 
− cos ( x + y ) 
1  2x
−

=
=
A22 
2.2x  −2x cos ( x + y ) − 1.1 
 1
cos ( x + y ) 
−

2.2x
.
=  1.1
 1
1.1 − cos ( x + y ) 


2.2x
 1.1

185
Отсюда
 ( 0 )   −0.9091 2.0618 
Φ −1  x  =

.

  0.9091 2.9382 
(1)
x= x
(0)
 (0)   (0) 
− Φ −1  x  ⋅ f  x =


 

 0.1   −0.9091 2.0618   0.7912   0.1   −0.6987   0.7987 
=

−
⋅
=

−
=

.
 1.0   0.9091 2.9382   0.0100   1.0   0.7487   0.2513 
Второй шаг.
 (1)   −0.1111 
−1  (1)   −0.9091 0.2832 
fx =
  −0.2989 , Φ  x =
  0.9091 0.3428 .

 

 


Тогда
(2)
x= x
(1)
 (1)   (1) 
− Φ −1  x  ⋅ f  x =


 

 0.7987   −0.9091 0.2832   −0.1111 
=
−
⋅
=
 0.2513   0.9091 0.3428   −0.2989 
 0.7987   0.0164   0.7823 
=
−
 =
.
 0.2513   −0.2035   0.4548 
Третий шаг.
 (2)   −0.0157 
−1  ( 2 )   −0.9091 0.1903 
fx =
  −0.1813 , Φ  x =
  0.9091 0.4488 .

 

 


( 3)
x= x
(2)
 (2)   (2) 
− Φ −1  x  ⋅ f  x =


 

 0.7823   −0.9091 0.1903   −0.0157 
=
−
⋅
=
 0.4548   0.9091 0.4488   −0.1813 
 0.7823   −0.0202   0.8025 
=
−
 =
.
 0.4548   −0.0956   0.5504 
Четвертый шаг.
 ( 3)   −0.0064 
−1  ( 3 )   −0.9091 0.1224 
fx =
  −0.0531 , Φ  x =
  0.9091 0.5006 .

 

 


186
(4)
x= x
( 3)
 ( 3)   ( 3) 
− Φ −1  x  ⋅ f  x =


 

 0.8025   −0.9091 0.1224   −0.0064 
=
−
⋅
=
 0.5504   0.9091 0.5006   −0.0531 
 0.8025   −0.0123   0.8148 
=
−
 =
.
 0.5504   −0.0324   0.5828 
Пятый шаг.
 ( 4 )   −0.0112 
−1  ( 4 )   −0.9091 0.0961 
fx =
  0.0036 , Φ  x =
  0.9091 0.5175 .

 

 


(5)
x= x
(4)
 (4)   (4) 
− Φ −1  x  ⋅ f  x =


 

 0.8148   −0.9091 0.0961   −0.0112 
=
−
⋅
=
 0.5828   0.9091 0.5175   0.0036 
 0.8148   0.0105   0.8043 
=
−
 =
.
 0.5828   −0.0083   0.5911 
Поскольку далее
 (5)   −0.0001 
fx  = 
,

  −0.0013 
вычислительный процесс можно закончить, утверждая, что заданная точность вычисления корней исходной системы достигнута.
§ 6.7. Лабораторная работа № 7.
Решение систем нелинейных уравнений
методом Ньютона в пакете Mathcad
Основная идея метода Ньютона состоит в выделении из уравнений системы f x = 0 линейных частей, которые являются главными при малых приращениях аргументов. Это позволяет свести одну
исходную задачу к решению последовательности задач для линейных систем.
Итерационная формула метода Ньютона для системы нелинейных уравнений (6.4.7) имеет вид
( )
( k+1)
x = x
(k)
 (k)   (k) 
− Φ −1  x  ⋅ f  x .

 

187
Необходимость обращения матрицы первых частных производных при каждой итерации сильно затрудняет решение. Эти затруднения чаще носят технический характер, тем не менее вместо
уравнения (6.4.7) иногда решают систему линейных алгебраических уравнений вида (6.4.8):
  (k) 
( k+1)
 (k) 
= f  x ,
Φ  x  ⋅ ∆ x





k
+
1
k
k
+
1
(
)
(
)
(
)

.
 x = x + ∆x
По методу Ньютона итерационный процесс при наличии хорошего начального приближения сходится с квадратичной скоростью, то
есть если
x
( k+1)
−x
(k)
< ε, то x
( k+1)
− xòî÷í. ≈ ε 2 << ε.
В пакете Mathcad для решения систем нелинейных уравнений
служат конструкции Given-Find и Given-MinErr. С помощью этих
подпрограмм можно решать системы объемом до двухсот уравнений.
Рассмотрим пример. Пусть дана система
tg ( xy + 0.3 ) − x2 =
0,

2

x
+ 2y2 =
1.

2

Вводим программу
ORIGIN: = 1
f1 ( x , y) := tan ( x ⋅ y + 0.3 ) − x
2
2
2
f2 ( x , y) := 0.5 ⋅ x + 2 ⋅ y − 1
d
 f1 ( x , y)
dx
A ( x , y) := 
d
 f2 ( x , y)
 dx
 f1 ( x , y) 

 f2 ( x , y) 
 −0.5 
x0 := 

 1.0 
x: = -0.5
y: = 1.0
f ( x , y) := 
188

d
f1 ( x , y) 
dy


d
f2 ( x , y) 
dy

Given
tan(x·y + 0.3)-x2 ═0
0.5·x2 + 2·y2–1═0
 −0.302 
Find ( x , y) = 

 0.691 
Given
tan(x·y + 0.3)-x2 ═0
0.5·x2 + 2·y2–1═0
 −0.302 
MinErr ( x , y) = 

 0.691 
При задании иных начальных условий получаются другие точки экстремума. Например,
x: = 1.0
y: = 0
Given
tan(x·y + 0.3)-x2 ═0
0.5·x2 + 2·y2–1═0
 1.014 
Find ( x , y) = 

 0.493 
x: = -1.0 y: = 3.0
Given
tan(x·y + 0.3)-x2 ═0
0.5·x2 + 2·y2–1═0
 −2.126 

 0.977 
MinErr ( x , y) = 
Это неудивительно, ибо поверхность, представляющая функцию, равную сумме уравнений исходной системы, имеет множество
локальных экстремумов. Найти решение упрощенным методом
Ньютона по формулам (6.6.1), когда матрица
 (k) 
Φ −1  x 


не перевычисляется на каждом шаге, можно с помощью нескольких операторов.
Ф: = A(x01,x02)
 0.506 0.066 
Φ-1 = 

 0.063 0.258 
(( ) ,( xv ) )
xv 〈1〉 := x0 i =1..11 xv 〈 i +1〉 := xv〈 i〉 -Ф -1 ×f xv〈 i〉
〈 i〉
1
2
189
xv = 1
2
1
2
3
4
5
6
7
-0.5
-0.345
-0.318
-0.308
-0.304
-0.303
-0.303
1
0.738
0.704
0.695
0.692
0.691
...
Наконец, подпрограммы, реализующие вычисления по методу
Ньютона по формулам (6.4.7) и (6.4.8)–(6.4.9), могут быть такими:
Nliniter ( f , A , x0 , ε ) :=
norm ←
x1 ← x0
nom ← 0
while
x0 ⋅ x0
norm > ε
nom ← nom + 1
B ← A ( x1 1 , x1 2)
fun ← −f ( x1 1 , x1 2)
x2 ← lsolve ( B , fun )
norm ←
x2 ⋅ x2
x2 ← x1 + x2
x1 ← x2
x2
190
break
if nom > 20
Параметры этих подпрограмм одинаковы:
 ∂f1
 ∂x
 1
 f1 ( x1, x2 ,..., xn ) 
 ∂f2


f2 ( x1, x2 ,..., xn ) 


=
f f=
x
, A =  ∂x1
 ....................... 
 ...


 f ( x , x ,..., x ) 

n
1
2
n


 ∂fn
 ∂x
 1
( )
∂f1
∂x2
∂f2
∂x2
...
∂fn
∂x2
∂f1
∂xn
∂f2
...
∂xn
... ...
∂fn
...
∂xn
...





, –





размерность системы, x0 – вектор начального приближения, ε- заданная точность вычислений. Приведенные варианты подпрограмм
рассчитаны на систему из двух уравнений с двумя неизвестными,
однако легко переделываются для любого конечного числа неизвестных и уравнений. Для этого нужно лишь перечислить требуемое число аргументов в операторах, вычисляющих вектор f x и
матрицу A внутри подпрограмм.
Вводим конец программы:
( )
ε = 10–3
xx: = Newtsyst(f,A,2,x0,ε)
 −0.302 

 0.691 
xy = 
xy: = Nliniter(f,A,x0,ε)
 −0.302 

 0.691 
xy = 
1 

1 
x0 := 
xy: = Newtsyst(f,A,2,x0,ε)
 1.014 

 0.493 
xy = 
xy: = Nliniter(f,A,x0,ε)
 1.014 

 0.493 
xy = 
Видно, что здесь так же как и в случае с операторными скобками
Given-Find и Given-MinErr точность найденного решения сильно зависит начального приближения. Если начальное приближение плохое, подпрограммы не могут решить систему.
191
Задание № 1. Любым способом, разобранным в этой лабораторной работе, решить методом Ньютона следующую систему уравнений:
 tg ( xy ) = x2 ,
1. 
2
2
1.
0.8x + 2y =
0.8,
cos ( y − 1) + x =
2. 
y
−
cos
x
=
2
.

sin ( x + y ) − 1.3x =
0,
3. 
2
2
x +y =
1.


tg ( xy + 0.4 ) =
x2 ,
5. 
2
2
0.6x + 2y = 1, x > 0, y > 0.
1,
sin ( x + 0.5 ) − y =
4. 
0.
 cos ( y − 2 ) + x =
sin ( x + y )= 1.5x + 0.2,
11. 
x2 + y2 =
1.

0.8,
cos ( y + 0.5 ) + x =
6. 
1.6.
 sin x − 2y =
sin ( x − y ) − xy =
−1,

8. 
3
x2 − y2 =
.

4

 tg ( xy ) = x2 ,
10. 
2
2
1.
0.5x + 2y =
 sin ( x + y ) − 1.6x =
0,
12.  2
2
x + y = 1, x > 0, y > 0.
0,
2y − cos ( x + 1) =
13. 
−0.4.
 x + sin y =
1.5,
 sin ( y + 2 ) − y =
14. 
0.5.
x + cos ( y − 2 ) =
tg ( xy + 0.1) =
x2 ,
15. 
2
2
1.
 x + 2y =
sin ( x + y ) − 1.1x =
0.1,
17. 
x2 + y2 =
1.

tg ( xy + 0.1) =
x2 ,
19. 
2
2
1.
 0.9x + 2y =
cos ( x − 1) + y =
0.8,
16. 
x − cos y =
2.

 tg ( xy ) = x2 ,
21. 
2
2
1.
0.7x + 2y =
1,
cos ( x + 0.5 ) + y =
22. 
2.
 sin y − 2x =
1.5,
 cos y + x =
23. 
1.
2y − sin ( x − 0.5 ) =
tg ( x − y ) − xy =
0,
24. 
2
2
1.
 x + 2y =
 sin ( y − 1) + x =
1.3,
7. 
0.8.
y − sin ( x + 1) =
1,
sin ( y + 1) − x =
9. 
2
y
+
cos
x
=
2
.

192
1.6,
sin ( x − 0.6 ) − y =
18. 
3
x
−
cos
y
=
0
.
9
.

sin ( 2x − y ) − 1.2x =
0.4,
20. 
2
2
1.
 0.8x + 1.5y =
tg ( xy + 0.2 ) =
x2 ,
25. 
2
2
1.
 x + y =
sin ( x − 1) + y =
1.5,
26. 
1.
 x − sin ( y + 1) =
1,
cos ( x − 1) + y =
27. 
1.6.
 sin y + 2x =
0,
2x − cos ( y + 1) =
28. 
−0.4.
 y − sin x =
1.2,
 cos x + y =
29. 
2.
2x − sin ( y − 0.5 ) =
 tg ( xy ) = x2 ,
30. 
2
2
1.
0.6x + 2y =
§ 6.8. Лабораторная работа № 7.
Решение систем нелинейных уравнений
методом Ньютона в пакете Matlab
В пакете Matlab для решения одного нелинейного уравнения
вида f(x) = 0 можно использовать встроенную функцию fzero. Её
алгоритм представляет собой комбинацию метода бисекции, метода секущих и метода квадратичной интерполяции. Обращение
к функции может быть таким:
1). x = fzero(fun, x0).
2). [x, f] = fzero(fun, [a, b]).
3). [x, f, flag, inform] = fzero(fun, x0),
причём fun может задаваться в виде ‘fun_name’, @fun_name. Если
flag = 1, то функции удалось найти интервал локализации, если же
flag = -1, то нет. Параметр inform содержит три поля со следующими
данными: в первом находится количество итераций при поиске корня, во втором – количество обращений к функции fun, в третьем –
наименование алгоритма, использованного для нахождения корня.
Например, вычислим действительные нули функции
f(x) = xe–x + sinx.
>> clear
>> x0=0;
>> x=fzero('x.*exp(-x)+sin(x)',x0)
x = 0
>> [x,f]=fzero('x.*exp(-x)+sin(x)',[-2,1])
x =2.7327e-19
f =5.4655e-19
>> [x,f,flag,inform]=fzero('x.*exp(-x)+sin(x)',[-2,1])
x =2.7327e-19
193
f =5.4655e-19
flag =1
inform =intervaliterations: 0
iterations: 10
funcCount: 12
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [-2, 1]'
Решим в пакете Matlab следующую систему нелинейных уравнений
x3 + y3 =
8xy,

x
ln
y
=
ln
x.

Её система частных производных имеет вид:
∂f
 ∂f1
3x2 − 8y, 1 =
3y2 − 8x,
 ∂x =
∂y


∂f2
1 ∂f
x

=
ln y − , 2 =.

x ∂y y
∂x
Так как из второго уравнения можно выразить y, то систему
можно представить одним нелинейным уравнением
3
1+
1
1
x3 +=
x x 8x x , x >=
0, y x x .
Таким образом, сначала применим к этому уравнению подпрограмму fzero. Вопрос локализации корня остаётся открытым, так
как нет универсальных методов его решения. Лучше всего оценить
корень уравнения
3
1+
1
x3 + x x =
8x x ,
построив график этой кривой. В нашем случае [a0, b0] = [2, 4]. Тогда
>> [x,f,flag,inform]=fzero('x.^3+x.^(3/x)-8*(x.^(1+1/x))',[2,4])
x = 3.2534
f = 0
flag = 1
inform = intervaliterations: 0
iterations: 8
funcCount: 10
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [2, 4]'
194
Далее следуют тексты двух подпрограмм, рассчитывающих значения обеих функций системы нелинейных уравнений, и четырёх
подпрограмм, вычисляющих все частные производные этой системы.
function z1 =f1(x,y)
%Подпрограмма f1 вычисляет первую функцию системы
%двух нелинейных уравнений.
z1=x^3+y^3-8*x*y;
end
function z2=f2(x,y)
%Подпрограмма f2 вычисляет вторую функцию системы
%двух нелинейных уравнений.
z2=x*log(y)-log(x);
end
function z1x=dz1x(x,y)
z1x=3*x^2-8*y;
end
function z1y=dz1y(x,y)
z1y=3*y^2-8*x;
end
function z2x=dz2x(x,y)
z2x=log(y)-1/x;
end
function z2y=dz2y(x,y)
z2y=x/y;
end
Приводятся тексты двух основных подпрограмм, реализующих
метод Ньютона для систем нелинейных уравнений.
function x2=Nwtsst(n,x0,eps)
%%Подпрограмма-функция Nwtsst решает систему нелинейных уравнений
%методом Ньютона путём линеаризации исходной
%системы в окрестности начального приближения по формулам
%(6.4.6-6.4.7). Входные данные: n - порядок системы, x0 - вектор
%начального прибдижения, eps - заданная точность решения.
%Выходной параметр: х2 -координаты точки минимума.
norma=norm(x0);
195
x2=x0;
fun(1)=f1(x2(1),x2(2));
fun(2)=f2(x2(1),x2(2));
nom=0;
while norma>eps
nom=nom+1;
A(1,1)=dz1x(x2(1),x2(2));
A(1,2)=dz1y(x2(1),x2(2));
A(2,1)=dz2x(x2(1),x2(2));
A(2,2)=dz2y(x2(1),x2(2));
B=inv(A);
for i=1:n
a=0;
for j=1:n
a=a+B(i,j)*fun(j);
end;
x2(i)=x2(i)-a;
end;
fun(1)=f1(x2(1),x2(2));
fun(2)=f2(x2(1),x2(2));
norma=norm(fun);
if nom>20
break;
end;
end;
end
function x=Nlntr(n,x0,eps)
%Подпрограмма-функция Nlntr решает систему нелинейных
%уравнений методом Ньютона по формулам (6.4.8-6.9.4)
%с использованием встроенной функции пакета Matlab - lsolve.
%Входные и выходные данные аналогичны параметрам подпрограммы
Nwtsst.
norma=norm(x0);
x2=x0;
nom=0;
while norma>eps
fun=[0;0];
nom=nom+1;
fun(1)=-f1(x2(1),x2(2));
fun(2)=-f2(x2(1),x2(2));
196
A(1,1)=dz1x(x2(1),x2(2));
A(1,2)=dz1y(x2(1),x2(2));
A(2,1)=dz2x(x2(1),x2(2));
A(2,2)=dz2y(x2(1),x2(2));
B=inv(A);
dx=B*fun;
x2=x2+dx;
norma=norm(fun);
x=x2;
if nom>20
break;
end;
end;
end
Далее следует текст основной программы.
>> clear
>> eps=10^-3;
>> n=2;
x0=[3.0;1.0];
>> xx=Nwtsst(n,x0,eps)
xx =3.2534
1.4371
x1=[1.0;1.0];
>> xx1=Nwtsst(n,x1,eps)
xx1 =0.2765 + 0.0000i
0.0096 + 0.0000i
>> xy=Nlntr(n,x0,eps)
xy =3.2534
1.4371
xy1=Nlntr(n,x1,eps)
xy1 =0.2764 - 0.0000i
0.0096 - 0.0000i
Задание № 2. Любым способом, разобранным в этой лабораторной работе, решить методом Ньютона систему уравнений, указанную на стр. 192–193. Номер варианта – это номер Вашей фамилии
в журнале преподавателя.
197
7. ОДНОМЕРНАЯ ОПТИМИЗАЦИЯ ФУНКЦИЙ [9]
§ 7.1. Необходимые условия минимума
и локализация отрезка минимизации исходной функции
Рассмотрим функцию одного переменного y = f(x). В задаче одномерной минимизации её называют целевой функцией. Пусть
x∈X = (–∝, + ∝). Точка x∈X называется точкой глобального минимума, если ∀x∈X выполняется неравенство f ( x ) ≤ f ( x ). Точка
x∈X называется точкой локального минимума, если существует
δ – окрестность точки x, такая, что ∀x∈δ выполняется неравенство
f ( x ) ≤ f ( x ) (см. рис. 7.1). Здесь x5 и x6 – глобальные экстремумы на
[a, b], x1, x2, x3, x4 – локальные экстремумы на [a, b]. Необходимым
условием точки локального экстремума является выполнение равенства f ′ ( x ) = 0. Точка x в этом случае называется стационарной
точкой функции y = f(x).
Большинство алгоритмов минимизации осуществляют лишь
поиск точки локального минимума функции y = f(x). Но чтобы применять подобный алгоритм, вначале надо найти отрезок [a, b], содержащий точку x – точку локального минимума. Этот отрезок
называется отрезком локализации точки x. Не существует общих
методов, позволяющих для любой f(x) найти этот отрезок. В каждом конкретном случае он ищется индивидуальным способом.
Если на отрезке [a, b] существует единственная точка локального
экстремума, то f(x) на отрезке [a, b] называется унимодальной. Унимодальные функции при этом не обязательно должны быть строго
непрерывными (см. рис. 7.2).
y=f(x)
f(x)
x2
a
x1
x6
x3
x4
x5
Рис. 7.1. Глобальные и локальные
экстремумы функции y = f(x)
198
b
x1
x2
Рис. 7.2. Унимодальная f(x)
Теорема 7.1. Если для ∀x∈[a, b] f ′′(x) > 0, то f(x) унимодальна на
[a, b].
Для сужения отрезка локализации точки минимума унимодальной функции справедлива следующая теорема:
Теорема 7.2. Пусть f(x) унимодальна на [a, b] и a≤α<γ<β≤b. Тогда:
1) если f(α)≤f(β), то x ∈ a,β  ;
2) если f(α)≥f(β), то x ∈ α, b  ;
3) если f(α)≥f(γ) и f(γ)≤f(β), то x ∈ α,β  .
Выводы этой теоремы вполне очевидны при рассмотрении условий и следствий на рисунке (см. рис. 7.2). В общем случае для любой функции y = f(x)неизвестно, является ли она унимодальной на
[a, b]. В таких случаях для локализации точки x используют различные
f(x)
нестрогие методы. Например, вычисxi+1 -xi=h
ляют и сравнивают значения f(x0) и
f(x1), где x1 = x0 + h. Если f(x0)>f(x1),
x2
x3
то последовательно вычисляют значеk–1
ния функции в точках xk = x0 + 2 ·h,
x4
x1
k≥2. После обнаружения первой же
точки, где f(xk)≤f(xk + 1) за отрезок лоРис. 7.3. Локализация точки
кализации принимают [xk–1, xk + 1]
экстремума
(см. рис. 7.3).
§ 7.2. Обусловленность задачи минимизации
Пусть x – точка локального экстремума f(x), которая вычисляется с погрешностью. Существует δ – окрестность точки x, в которой приближённые значения f(x∗) удовлетворяют неравенству
f (x) − f (x∗ ) ≤ ∆, то есть ∆ – абсолютная погрешность вычисления f(x)
a =x − ε
в δ – окрестности точки x.
Найдётся также ε – окрестность
b = x +ε
точки x, в которой из-за погрешности
определения f(x) нельзя достоверно
x
определить ту точку, в которой действительно достигается минимум f(x)
b
a
(см. рис. 7.4). Интервал ( x − ε, x + ε )
называется интервалом неопределёнРис. 7.4. Интервал
ности точки x локального минимунеопределённости точки
ма.
экстремума
199
Найдём величину ε – радиуса интервала неопределённости.
Если f(x) дважды непрерывно дифференцируема, то
f (x) ≈ f (x ) +
f ′′ ( x )
2
( x − x )2 ,
так как f ′ ( x ) = 0 в точке минимума. Оценим минимальное расстояние между точками x и x, начиная с которого всегда выполняется
неравенство f ∗ x∗ > f ∗ ( x ), то есть точка x уже не попадёт в интервал неопределённости (здесь f∗ – вычисленное значение функции)
( )
f ∗ ( x ) − f ∗ ( x ) = f ( x ) − f ( x )  + f ∗ ( x ) − f ( x )  − f ∗ ( x ) − f ( x )  ≥

 

≥ f ( x ) − f ( x ) − 2∆ ≈
f ′′ ( x )
2
Тогда, если
( x − x )2 ≥
( x − x )2 − 2∆.
( )
4∆
∗ ∗
∗
, то f x > f ( x ) и
f ′′ ( x )
ε ≈2
∆
.
′′
f (x)
(7.2.1)
Отсюда для x и f(x)
( )≈2
∆ x
∗
(
∆ f∗ ( x )
f ′′ ( x )
).
(7.2.2)
Таким образом, из (7.2.2) точность определения положения точки минимума существенным образом зависит от точности вычисления самой функции y = f(x).
§ 7.3. Методы прямого поиска.
Оптимальный пассивный поиск
Этот метод основан на сравнении значений функции f(x), вычисляемых в точках x1, x2,…,xn. Метод называется методом прямого
поиска, а точки xi – пробными точками.
Пусть x∈X и x1, x2,…,xn – пробные точки. Вычисляем значения
f(x1), f(x2),…, f(xn). За fmin принимается та точка xi, для которой
f ( xi ) = min f ( xk ). Геометрическая интерпретация метода показана
1≤k≤n
200
на рис. 7.5. Пусть a = x0, b = xn + 1, тогда f(xk–1)≥f(xk) и f(xk)≤f(xk + 1), если
xk = x ∗ , то есть x ∈ [ xk−1, xk+1 ]. Отсюда
f(x)
x − xk ≤ max{xk − xk−1, xk+1 − xk } и
x − x ∗ ≤ max xi − xi −1 .
1≤i ≤n
(7.3.1)
Если точки x1, x2,…,xn расположены на отрезке [a, b] равномерно
в соответствии с формулой
xi = a + ih, h =
a
x1 x2 ...
xn b x
Рис. 7.5. Оптимальный
пассивный поиск
∆
, ∆ = b–a,
n +1
то метод с таким выбором кратных точек называется оптимальным
пассивным поиском. Оценка погрешности этого метода имеет вид:
x − x∗ ≤
∆
b−a
= .
n +1 n +1 (7.3.2)
§ 7.4. Методы прямого поиска.
Метод деления отрезка пополам
В этом методе используется принцип последовательного сокращения отрезка локализации, основанной на следующей очевидной
теореме.
Теорема 7.3. Если функция f(x) унимодальна на отрезке [a, b], то
она унимодальна и на любом отрезке [c, d]⊂[a, b].
Пусть [a, b] = [a(0), b(0)].
1. Найдём две симметрично расположенные точки
=
α( )
0
0
0
0
0
a ( ) + b( )
a ( ) + b( )
0
=
− δ, β( )
+ δ,
2
2
b−a
– параметр метода.
2
2. Находим f(α(0)), f(β(0)). Если f(α(0))≤ f(β(0)), то
где 0 < δ <
1
1
a( 0 ) ,β( 0 )  ,
x ∈  a ( ) , b( )  =

 

201
k
a( )
a(
a(
k +1)
α(
k +1)
k +1)
β(
k
b( )
k
β( )
k
α( )
α(
k +1)
k +1)
β(
b(
k +1)
b(
k +1)
k +1)
если
же
f(α(0))>
то
1
1
α( 0 ) , b( 0 )  . Эта проx ∈  a ( ) , b( )  =

 

цедура принимается за очередную
итерацию метода деления отрезка
пополам. k-я итерация имеет вид:
1. Находят
=
α( )
k
Рис. 7.6. Схема алгоритма
деления отрезка пополам
f(β(0)),
=
β( )
k
k
k
a ( ) + b( )
+ δ.
2
k
k
a ( ) + b( )
− δ,
2
2. Находят f(α(k)), f(β(k)).
3. Отрезок локализации определяют по правилу:
+1)   ( k ) ( k ) 
( k+1) , b( k=
a ,β
;
– если f(α(k))≤f(β(k)), то a

 

( k+1) , b( k+1)  = α( k ) , b( k )  (см. рис.
– если же f(α(k))> f(β(k)), то a


 

7.6).
k +1
k
k +1
k
В первом случае x ( ) = α( ) , во втором случае x ( ) = β( ) .
(n)
(n)
(n)
(n)
Если обозначить через ∆ = b –a длину отрезка [a , b(n)], то
справедливо равенство
(n )
n+1) ∆
∆( =
+ δ.
2
Поэтому, если δ мало (δ<∆(n)), то длина вновь полученного отрезка почти вдвое меньше предыдущего. Отсюда происходит название
метода. С помощью метода математической индукции можно доказать, что
( )
∆=
n
∆ − 2δ
2n
+ 2δ.
(7.4.1)
§ 7.5. Методы прямого поиска.
Метод Фибоначчи1
Предыдущий метод на каждом k – шаге итерации вычисляет два
новых значения функции в точках f(α(n)) и f(β(n)). Одна из этих то1
202
Леонардо Фибоначчи Пизанский (1180-1240) – итальянский математик.
чек (и значений функции) в следующей итерации не используется.
Метод Фибоначчи обеспечивает максимальное гарантированное сокращение отрезка локализации при заданном числе n вычислений
функции.
Числа Фибоначчи задаются следующей рекуррентной системой
=
B0 1=
, B1 1,


Bn −1 + B n −2 ,n ≥ 2.
 Bn =
Сам метод состоит из n–1 шагов. Очередной k + 1 шаг аналогичен
такому же шагу итерации метода деления отрезка пополам. Однако
формулы для вычисления α(k) и β(k) здесь несколько иные:
B
B
k
k
k
k
k
k
α( ) = a( ) + n −k−1 ∆( ) , β( ) = a( ) + n −k ∆( ) ,
Bn −k+1
Bn −k+1
∆(k) = b(k)–a(k). Отрезок локализации определяют по тому же правилу:
1. Если f(α(k))≤ f(β(k)), то [a(k + 1), b(k + 1)] = [a(k), β(k)] и β(k + 1) = α(k), а
(k + 1)
α
считается заново,
2. если же f(α(k))> f(β(k)), то [a(k + 1),
k
k
k
k
β( )
a( )
α( )
b( )
b(k + 1)] = [α(k), b(k)] и α(k + 1) = β(k), а β(k + 1)
считается заново.
В первом случае за очередное приk +1
k +1
a ( ) α( )
ближение к точке минимума приk +1
k +1
β( ) b ( )
нимают x(k + 1) = α(k), во втором слуk +1
α( )
(k + 1)
(k)
чае x
= β (см. рис. 7.7). Однако
k +1
k +1
k +1
в любом случае точка x(k + 1) совпадает
a( )
β( )
b( )
с одной из точек
Рис. 7.7. Схема алгоритма
метода Фибоначчи
Bn −k−2 ( k+1)
∆
и
Bn −k+1
B
k +1
k +1
k +1
β( ) = a( ) + n −k−1 ∆( ) .
Bn −k
α(
k +1)
= a(
k +1)
+
В результате выполнения n–1 шагов метода отрезок локализаB
ции уменьшается в n +1 раз, а точка x(n–1) оказывается централь2
ной для последнего отрезка локализации [a(n–1), b(n–1)], при этом
x − x(n −1) ≤
∆
.
Bn +1
(7.5.1)
203
§ 7.6. Методы прямого поиска.
Метод золотого сечения
Термин «золотое сечение» ввёл в употребление Леонардо да Винчи. Золотым сечением отрезка называется такое разбиение отрезка
на две неравные части, что отношение длины всего отрезка к длине
его большей части равно отношению длины большей части к длине
меньшей части отрезка, то есть
[a,b] = [α,b]
[α,b] [a,α ]
и α =a +
2
3+ 5
( b − a ),
β=a +
2
1+ 5
( b − a ).
Действительно
b − a b − α 1+ 5 b − a β − a 1+ 5
= =
, = =
.
2
β−a b −β
2
b−α α−a
При этом точка α осуществляет золотое сечение не только отрезка [a, b], но и отрезка [a, β], то есть
b − a α − a 1+ 5
= =
.
α−a β−α
2
Аналогично, точка β осуществляет золотое сечение не только отрезка [a, b], но и отрезка [α, b].
k + 1-я итерация метода золотого сечения производится аналогично k + 1-й итерации метода Фибоначчи (см. рис. 7.7). Соответствующие формулы имеют вид:
k
k
α ( ) =a ( ) +
2
3+ 5
k
k
k
∆( ) , β( ) =a( ) +
2
1+ 5
k
∆( ) .
При этом какой бы из отрезков [a(k), b(k)] или [α(k), b(k)] не был
бы выбран за очередной за очередной отрезок локализации, точка
x(k + 1) (x(k + 1) = α(k) или x(k + 1) = β(k)) совпадает с одной из точек α(k + 1)
или β(k + 1). Поэтому при очередном шаге достаточно вычислить значение функции лишь в одной недостающей точке.
Поскольку точка x(k) отстоит от концов отрезка [a(k), b(k)] на ве2
n
личину, не превышающую
∆( ) , то верна следующая оценка
1+ 5
погрешности на k – ом шаге
k
x( ) − x ≤
204
2
1+ 5
n
n +1
∆( ) =
∆( ) .
(7.6.1)
Таким образом, метод золотого сечения сходится со скоростью
геометрической прогрессии со знаменателем
2
=
q
≈ 0.62.
1+ 5
§ 7.7. Эффективность методов прямого поиска
В качестве критерия эффективности используется:
1). масштаб уменьшения после n вычислений значения длины
отрезка локализации;
2). величина гарантированной оценки погрешности.
Методы прямого поиска, к сожалению, не очень эффективны.
Самый неэффективный – пассивный поиск, затем следует метод
деления отрезка пополам, потом почти эквивалентные метод Фибоначчи и метод золотого сечения. Сравнение этих методов по двум
данным критериям дано в следующей таблице.
Метод
Длина отрезка локализации
Величина гарантированной оценки погрешности
Оптимальный
пассивный поиск
2
∆
n +1
1
∆
n +1
Метод деления
отрезка пополам
(δ→0)
Метод Фибоначчи
Метод золотого
сечения
1
2
Bn +1
n
≈ 0.5 ⋅ ( 0.71) ∆
n
∆ ≈ ( 0.71) ∆
n
22
n
∆ ≈ 1.7 ⋅ ( 0.62 ) ∆
n −1
 2 


1+ 5 
n
≈ 1.6 ⋅ ( 0.62 ) ∆
n
≈ 0.85 ⋅ ( 0.62 ) ∆
n
≈ ( 0.62 ) ∆
§ 7.8. Методы минимизации гладких функций
Рассмотренные ранее методы минимизации одномерных функций не позволяли извлечь какую-нибудь выгоду из свойства гладкости исследуемых функций. Однако существуют методы, использующие это свойство для повышения своей эффективности. Например,
метод бисекции, который является модификацией метода решения
нелинейных уравнений.
205
1. Метод бисекции. Рассмотрим
сначала стандартный метод бисекции. Он применяется для решения
y = f (x)
уравнения вида f(x) = 0. Пусть [a,
0)
0)
(
(
b] = [a(0), b(0)] – отрезок локализаx
a
ции. Если f(x) непрерывна на [a, b],
x
0
b( )
то при условии, что [a, b] содержит
внутри только один корень, f(a)
Рис. 7.8. Иллюстрация итераций f(b)<0 (см. рис. 7.8). Если принять
метода бисекции
за приближённое значение корня
середину отрезка x(0) = (a(0) + b(0))/2,
то погрешность этого приближения не превысит половины длины
(0)
( 0 ) ( 0 ) / 2. Далее отрезок
отрезка, то есть величины x − x ≤ b − a
локализации уменьшается в два раза и замещается отрезком [a(1),
b(1)] меньшей длины по правилу:
а) [a(1), b(1)] = [a(0), x(0)], если f(a(0))·f(x(0))<0,
б) [a(1), b(1)] = [x(0), b(0)], если f(x(0))·f(b(0))<0.
Середина n-го отрезка – точка x(n) = (a(n) + b(n))/2 даёт приближение к корню x с погрешностью
n
n
b( ) − a ( ) b − a
n
x( ) − x ≤
= .
2
2n +1
f (x)
(
)
Если модифицировать этот метод и применить его к нахождению минимума функции y = f(x), то, так как в стационарной точке
f ′ ( x ) = 0, приходится решать уравнение вида f ′ ( x ) = 0. Алгоритм
вычисления точки минимума точно такой же, как при решении
уравнения f(x) = 0. Пусть найден отрезок локализации [a(n), b(n)].
Тогда:
( )
n
1.1. Находится значение f ′ x( ) .
( )
n
1.2. Если f ′ x( ) < 0, то [a(n + 1), b(n + 1)] = [x(n), b(n)], если же
( )
n
f ′ x( ) ≥ 0, то [a(n + 1), b(n + 1)] = [a(n), x(n)].
1.3. Находится x(n + 1) = (a(n + 1) + b(n + 1))/2.
b−a
n
Метод сходится с погрешностью x( ) − x ≤
, так же как и
n +1
2
в предыдущем случае. Существенным недостатком метода является необходимость вычисления первой производной функции y = f(x).
2. Метод Ньютона. Этот метод подробно описан ранее в предыдущем разделе (см. § 6.4).
206
3). Метод параболической интерполяции. Этот метод, в отличие
от двух предыдущих, не требует знания f ′ ( x ) и f ′′ ( x ) и не использует их значения на отрезке локализации. Однако, так как на каждой
итерации в этом методе для вычисления очередного приближения
строится парабола, необходимо три предыдущих приближения:
x(k–2), x(k–1), x(k) и f(x(k–2), f(x(k–1)), f(x(k)).
Пусть уравнение параболы, проходящей через три вышеупомянутые точки таково:
P2(x) = m(k) + n(k)(x–x(k)) + p(k)(x–x(k))2.
Тогда
( ) (
)
k
k −2

f x( ) − f x( )
k −1
k
 (k)
x( ) − x( )
k)
k)
(
(
f x
⋅
+
,n =
m =
k −1
k −2
k
k −2

x( ) − x( )
x( ) − x( )
(7.8.1)

k −1)
k)
(
(

f x
−f x
k
k −2
x( ) − x( )

+
⋅
,

k −1
k −2
k −1
k
x( ) − x( )
x( ) − x( )

k
−
1
k
k
k
−
2
 f x( ) − f x( )
f x( ) − f x( ) 

1
k)
(
p =
⋅
−
 . (7.8.2)
k −1
k −2 
k −1
k
k
k −2
x( ) − x( )  x( ) − x( )
x( ) − x( )



За очередное приближение x(k + 1) принимается точка, где P2(x)
достигает минимума. Это легко находится, именно, так как
( )
(
(
) ( )
(
) ( ) ( ) (
)
(
)
)
k
( k+1) 2 p( k ) x( k+1) − x( k ) =
P2′ x
=
+ n( ) 0,
то
n( )
k +1)
k
x( =
x( ) −
.
k
2 p( ) k
(7.8.3)
Единственный недостаток метода – необходимость наличия трёх
начальных приближений.
§ 7.9 Лабораторная работа № 8.
Минимизация функций одного переменного в пакете Mathcad
В этой лабораторной работе на примере функции y = x3-x + e–x
реализованы формулы §§ 7.3–7.6. Все формулы очень просты и их
применение в тексте лабораторной работы очевидно. Также просты
207
и используемые программные единицы, реализующие отдельные
алгоритмы по формулам §§ 7.3–7.6.
ORIGIN: = 1
ОПТИМАЛЬНЫЙ ПАССИВНЫЙ ПОИСК
3
f ( x) := x − x + exp( −x)
40
f ( x) 20
0
−5
0
5
x
a:=0
b:=1
∆:=b-a
∆=1
i:=1..100
xi:=-0.01+0.01*i
ymin:=min(y)
ymin=0.14
ymax:=max(y)
ymax=1
xmin:=min(y)
xmin=0
ymax:=max(y)
ynax=0.99
1
x=
0
1
1
2
0.01
2
0.98
3
0.02
3
0.96
4
0.03
4
0.94
5
0.04
5
0.921
6
0.05
6
0.901
7
0.06
7
0.882
8
0.07
8
0.863
9
0.08
9
0.844
10
0.09
10
0.825
11
0.1
11
0.806
12
0.11
12
0.787
13
0.12
13
0.769
14
0.13
14
0.75
15
0.14
15
0.732
16
208
1
1
...
y=
16
...
delta:=10^(-2)
yi:=f(xi)
МЕТОД ДЕЛЕНИЯ ОТРЕЗКА ПОПОЛАМ
Loki( a , b , fa , fb , delta) :=
alfa0 ←
( a + b)
− delta
2
beta0 ←
( a + b)
+ delta
2
fa1 ← f ( alfa0)
fb1 ← f ( beta0)
if fa1 > fb1
a1 ← alfa0
b1 ← b
if fa1 ≤ fb1
a1 ← a
b1 ← beta0
 a1 
 
 b1 
x1: = delotrpopolam(0,1,delta)
x1 = 0.705
i = 1..100
x i: = -5.02 + 0.02*i
y i: = f(x i)
209
1
1
x=
1
- 5
1
28.413
26.948
2
-4.98
2
3
-4.96
3
25.53
4
-4.94
4
24.156
5
-4.92
5
22.827
6
-4.9
6
21.541
7
-4.88
7
20.296
8
-4.86
8
19.093
9
-4.84
9
17.929
10
-4.82
10
16.805
11
-4.8
11
15.718
12
-4.78
12
14.669
13
-4.76
13
13.656
14
-4.74
14
12.678
15
-4.72
15
11.734
16
y=
...
16
...
x2: = delotrpopolam(-5,-3,delta)
x2: = -3.678
МЕТОД ФИБОНАЧЧИ
B1: = 1
Fibb( n) :=
B2: = 1
i: = 3..100
Bn ← 1
return Bn if ( n
1) ∨ ( n
Bn ← 2
return Bn if n
3
B1 ← 1
B2 ← 1
for i ∈ 3 .. n + 1
Bi ← Bi−1 + Bi−2
Bn ← Bn+ 1
Bn
Fib1: = Fibb(5)
210
Bi: = Bi–1 + Bi–2
Fib1 = 8
2)
1
B=
1
1
2
1
3
2
4
3
5
5
6
8
7
13
8
21
9
34
10
55
11
89
12
144
13
233
14
377
15
610
16
...
ε: = 10–2
a = 0
b = 1
ε = 0.01
xx: = MetodFibb(a,b,ε)
xx = 0.712
a: = -5
b: = -3
xx1: = MetodFibb(a,b,ε)
xx1 = -3.679
211
212
МЕТОД ЗОЛОТОГО СЕЧЕНИЯ
213
a: = 0 b: = 1
a = 0 b = 1 ε = 0.01
xx2: = ZolotS(a,b,ε) xx2 = 0.712
a: = -5 b: = -3
xx3: = ZokotS(a,b,ε) xx3 = -3.682
Задание № 1. Выбрать функцию по номеру своего варианта из
следующей таблицы и найти её локальные минимумы по четырём
разобранным методам.
Номер
варианта
Функция
Номер
варианта
Функция
1, 11, 21
1
y=
− 1 − x2 + e x
2
6, 16, 26
y=
−1.2x + 0.8x2 + sin 2x
2, 12, 22
=
y xex + sin x
7, 17, 27
(
)
3, 13, 23
y =x2 + 5 ( x − sin x )
4, 14, 24
5, 15, 25
214
−
x
y = x2 e 5
8, 18, 28
y=
x2 + tan ( x + 0.1)
y=
−4 1 − x2 + ex
9, 19, 29
y =x + x2 + cos ( x − 1)
1
y = x2 e − x
2
10, 20, 30
y = x2e− x + cos ( x + 0.5 )
2
(
)
§ 7.10. Лабораторная работа № 8.
Минимизация функций одного переменного в пакете Matlab
Как всегда, для пакета Matlab приведём сначала тексты всех подпрограмм, используемых в головной программе. Все приведённые
подпрограммы являются полными аналогами соответствующих
подпрограмм из пакета Mathcad, кроме самой первой (см. § 7.9).
Первая подпрограмма вычисляет заданную функцию, минимум
которой ищется.
function yy = fx(x)
yy=x^3-x+exp(-x);
end
function [a1,b1]=Loki(a,b,fa,fb,delta)
alfa0=(a+b)/2-delta;
beta0=(a+b)/2+delta;
fa1=fx(alfa0);
fb1=fx(beta0);
if fa1>fb1
a1=alfa0;
b1=b;
end;
if fa1<=fb1
a1=a;
b1=beta0;
end;
end
function x=delotrpopolam(a,b,delta)
k=1/(10*delta);
a1=a;
b1=b;
for i=1:k
fa1=fx(a1);
fb1=fx(b1);
[a2,b2]=Loki(a1,b1,fa1,fb1,delta);
a1=a2;
b1=b2;
x=(a1+b1)/2;
end;
end
215
function Bn=Fibb(n)
if (n==1) or (n==2)
Bn=1;
end;
if n==3
Bn=2;
end;
B(1)=1;
B(2)=1;
for i=3:n+1
B(i)=B(i-1)+B(i-2);
end;
Bn=B(n+1);
end
function x=MetodFibb(a,b,eps)
m=1/eps;
d(1)=b-a;
n=1;
for i=3:m
B=Fibb(i);
a1=d(1)/B;
if a1>eps
n=i-1;
end;
end;
alf=a+d(1)*Fibb(n-1)/Fibb(n+1);
bet=a+d(1)*Fibb(n)/Fibb(n+1);
fa(1)=fx(alf);
fb(1)=fx(bet);
ak(1)=a;
bk(1)=b;
for i=1:n
k=i-1;
k0=n-k;
k1=k0-1;
k2=k0+1;
if fa(i)>fb(i)
ak(i+1)=alf;
bk(i+1)=bk(i);
216
d(i+1)=bk(i+1)-ak(i+1);
alf=bet;
bet=ak(i+1)+d(i+1)*Fibb(k0)/Fibb(k2);
fa(i+1)=fb(i);
fb(i+1)=fx(bet);
end;
if fa(i)<=fb(i)
ak(i+1)=ak(i);
bk(i+1)=bet;
d(i+1)=bk(i+1)-ak(i+1);
bet=alf;
alf=ak(i+1)+d(i+1)*Fibb(k1)/Fibb(k2);
fa(i+1)=fx(alf);
fb(i+1)=fa(i);
end;
epsilon=bet-alf;
if epsilon<eps
break;
end;
end;
x=(alf+bet)/2;
end
function x=ZolotS(a,b,eps)
m=1/eps;
d(1)=b-a;
a1=2/(3+sqrt(5));
a2=2/(1+sqrt(5));
alf=a+a1*d(1);
bet=a+a2*d(1);
ak(1)=a;
bk(1)=b;
fa(1)=fx(alf);
fb(1)=fx(bet);
for i=1:m
if fa(i)>fb(i)
ak(i+1)=alf;
bk(i+1)=bk(i);
d(i+1)=bk(i+1)-ak(i+1);
alf=bet;
bet=ak(i+1)+a2*d(i+1);
217
fa(i+1)=fb(i);
fb(i+1)=fx(bet);
end;
if fa(i)<=fb(i)
ak(i+1)=ak(i);
bk(i+1)=bet;
d(i+1)=bk(i+1)-ak(i+1);
bet=alf;
alf=ak(i+1)+a1*d(i+1);
fa(i+1)=fx(alf);
fb(i+1)=fa(i);
end;
epsilon=bet-alf;
if epsilon<eps
break;
end;
end;
x=(alf+bet)/2;
end
Далее следует текст основной программы.
>>
>>
>>
>>
>>
%ОПТИМАЛЬНЫЙ ПАССИВНЫЙ ПОИСК
clear
x = -4.0:0.1:1.0;
y = x.^3-x + exp(-x);
plot(x,y,’-*r’),grid
218
>> for i=1:100
x1(i)=-0.01+0.01*i;
y1(i)=fx(x1(i));
end;
>> disp(x1)
0 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700
0.0800 0.0900 0.1000 0.1100 0.1200 0.1300 0.1400 0.1500
0.1600 0.1700 0.1800 0.1900 0.2000 0.2100 0.2200 0.2300
0.2400 0.2500 0.2600 0.2700 0.2800 0.2900 0.3000 0.3100
0.3200 0.3300 0.3400 0.3500 0.3600 0.3700 0.3800 0.3900
0.4000 0.4100 0.4200 0.4300 0.4400 0.4500 0.4600 0.4700
0.4800 0.4900 0.5000 0.5100 0.5200 0.5300 0.5400 0.5500
0.5600 0.5700 0.5800 0.5900 0.6000 0.6100 0.6200 0.6300
0.6400 0.6500 0.6600 0.6700 0.6800 0.6900 0.7000 0.7100
0.7200 0.7300 0.7400 0.7500 0.7600 0.7700 0.7800 0.7900
0.8000 0.8100 0.8200 0.8300 0.8400 0.8500 0.8600 0.8700
0.8800 0.8900 0.9000 0.9100 0.9200 0.9300 0.9400 0.9500
0.9600 0.9700 0.9800 0.9900
>> disp(y1)
1.0000 0.9801 0.9602 0.9405 0.9209 0.9014 0.8820 0.8627
0.8436 0.8247 0.8058 0.7872 0.7686 0.7503 0.7321 0.7141
0.6962 0.6786 0.6611 0.6438 0.6267 0.6098 0.5932 0.5767
0.5605 0.5444 0.5286 0.5131 0.4977 0.4827 0.4678 0.4532
0.4389 0.4249 0.4111 0.3976 0.3843 0.3714 0.3587 0.3464
0.3343 0.3226 0.3111 0.3000 0.2892 0.2788 0.2686 0.2588
0.2494 0.2403 0.2315 0.2231 0.2151 0.2075 0.2002 0.1933
0.1868 0.1807 0.1750 0.1697 0.1648 0.1603 0.1563 0.1526
0.1494 0.1467 0.1443 0.1425 0.1410 0.1401 0.1396 0.1396
0.1400 0.1409 0.1423 0.1442 0.1466 0.1495 0.1530 0.1569
0.1613 0.1663 0.1718 0.1778 0.1844 0.1915 0.1992 0.2075
0.2163 0.2256 0.2356 0.2461 0.2572 0.2689 0.2812 0.2941
0.3076 0.3218 0.3365 0.3519
>> ymin=min(y1)
ymin=0.1396
>> x=0.700
>> %МЕТОД ДЕЛЕНИЯ ОТРЕЗКА ПОПОЛАМ
>> delta=10^(-2);
>> x1=delotrpopolam(0,1,delta)
x1 =0.7053
>> x2=delotrpopolam(-5,-3,delta)
x2 =-3.6781
219
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
%МЕТОД ФИБОНАЧЧИ
a=0;
b=1;
xx=MetodFibb(a,b,eps);
disp(xx)
0.7118
a=-4;
b=-3;
xx1=MetodFibb(a,b,eps);
disp(xx1)
-3.6701
%МЕТОД ЗОЛОТОГО СЕЧЕНИЯ
a=0;
b=1;
xx2=ZolotS(a,b,eps);
disp(xx2)
0.7123
a=-4;
b=-3;
xx3=ZolotS(a,b,eps);
disp(xx3)
-3.6697
Задание № 2. Выбрать из таблицы на стр. 214 свой вариант, предварительно увеличив его номер на 5, и найти все локальные минимумы данной функции.
220
8. ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ ЗАДАЧИ КОШИ
ДЛЯ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
И СИСТЕМ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
§ 8.1. Задача Коши для дифференциального уравнения
первого порядка
Большая часть инженерных задач приводит к законам и правилам, которые формулируются в виде дифференциальных уравнений.
Основная задача, решаемая для таких уравнений, – это задача Коши
или начальная задача. В подавляющем большинстве случаев она решается с использованием вычислительной техники. Рассмотрим методы решения дифференциальных уравнений первого порядка.
Решением обыкновенного дифференциального уравнения первого порядка y/ ( x ) = f ( x, y ( x ) ) называется функция y(x), обращающая это уравнение в тождество при подстановке. График решения
называется интегральной кривой (см. рис. 8.1).
На рис. 8.2 изображено поле направлений, представляющее семейство интегральных кривых уравнения
y/ ( x ) = f ( x, y ( x ) ). (8.1.1)
Задание начального условия – точки M(x0, y0) выделяет из этого
семейства конкретную кривую, дающую частное решение уравнения (8.1.1).
Задача нахождения при x>x0 решения y(x) дифференциального
уравнения (8.1.1), удовлетворяющего начальному условию
y(x0) = y0, (8.1.2)
называется задачей Коши. Чаще всего решение ищут на конечном
заданном отрезке [x0, b].
y (x )
y (x )
α
M (x 0 , y0 )
k = tgα=f ′ ( x , y ) x
Рис.8.1. Интегральная кривая
x
Рис. 8.2. Поле направлений
221
Теорема 8.1. (Теорема существования и единственности решения). Пусть функция f(x, y) определена и непрерывна в области G
и удовлетворяет в ней условию Липшица1 по переменной y, то есть
f ( x, y1 ) − f ( x, y2 ) ≤ c y1 − y2 , c =
const. (8.1.3)
Тогда для любого начального значения y0 существует единственное решение y(x) задачи Коши с заданным начальным условием
y/ = f ( x, y ( x ) ),

 y ( x0 ) = y0 ,
определенное на отрезке [x0, b]⊂G.
На практике для дифференцируемых по y функций f(x, y) условие (8.1.3) заменяется более грубым условием
fy/ ( x, y ) ≤ c, то есть условием ограниченности частной производной.
(8.1.4)
§ 8.2. Численные методы решения задачи Коши.
Основные понятия и определения
Численное решение задачи Коши строится для ее дискретного
аналога. В этом случае отрезок [x0, X] – область непрерывности изh
менения аргумента x заменяется множеством ω – конечным множеством точек x0<x1<…<xN = X, которое называется сеткой. Величина h = xn-xn–1 – шаг сетки – является, как правило, постоянным,
то есть сетки в большинстве случаев равномерные.
h
Функции, определенные лишь в узлах сетки ω , называются
сеточными. Они помечаются индексом h, например, fh, чаще же
h
значение функции f(x) в узлах сетки ω обозначается обычным образом с помощью индекса, например, f(xn) или fn.
В основе построения конкретного численного метода лежит тот
или иной способ замены дифференциального уравнения y/ = f ( x, y )
его дискретным аналогом – уравнением вида
1 k
∑ aj yn+1− j = Φ ( xn , yn+1−k ,..., yn , yn+1,h ),
h j =0
1
222
Рудольф Липшиц (1832 - 1903) - немецкий математик.
(8.2.1)
где yh – значения сеточной функции в k + 1 последовательных точках xn + 1–k,…, xn, xn + 1. Сумма в левой части формулы (8.2.1) рассматривается как разностная аппроксимация производной y/ по
одной из формул численного дифференцирования, а правая часть –
как специальным образом построенная аппроксимация функции
f(x, y).
При нахождении приближения yn + 1 в очередной точке сетки по
формуле (8.2.1) используются найденные ранее значения сеточной
функции yh в k предыдущих точках xn + 1–k,…, xn. Такие методы называются k-шаговыми. При k = 1 уравнение (8.2.1) принимает вид
yn +1 − yn
= Φ ( xn , yn , yn +1, h ). h
(8.2.2)
Соответствующий этой формуле метод называется одношаговым. Вычисление yn + 1 осуществляется здесь с использованием
только одного предыдущего значения yn.
В случае, когда входящая в уравнение (8.2.1) функция Ф не зависит от yn + 1, вычисление yn + 1 не вызывает затруднений и осуществляется по явной формуле
 k

−1
yn +=
1 a0  − ∑ aj yn +1− j + hΦ ( xn , yn +1−k ,..., yn , h )  .
 j =1

(8.2.3)
Соответствующие методы называются явными. Напротив, если
Ф зависит от yn + 1, на каждом шаге приходится решать относительно yn + 1 нелинейное уравнение (8.2.1). Методы, реализующие такой
алгоритм, называются неявными.
§ 8.3. Решение с помощью рядов Тейлора
Начнем с метода, который теоретически пригоден для решения
любых дифференциальных уравнений, но с вычислительной точки
зрения не представляет почти никакого практического интереса.
Его ценность заключается в том, что он дает некоторый эталон для
сравнения различных практически удобных методов.
Запишем разложение функции y(x) в ряд Тейлора в окрестности
точки xn + 1:
y ( xn +1=
) y ( xn + h=)
=yn +
yn/
y//
y///
( xn+1 − xn ) + n ( xn+1 − xn )2 + n ( xn+1 − xn )3 + ..., (8.3.1)
1!
2!
3!
223
где yn( ) есть j-я производная функции y(x) в точке xn. Пусть имеется
приближенное решение уравнения (8.3.1) для n + 1 точки x0, x1,…,
xn, xi = x0 + ih, h = const. Найдем приближенное решение для точки
xn + 1, подставив xn + 1 = xn + h в формулу (8.3.1). Получим
j
yn +1 =yn + hyn/ +
h2 // h3 ///
yn +
yn + ....
2
6
(8.3.2)
Чем больше членов ряда (8.3.2) взять для вычислений, тем точнее будет приближение. В любом случае необходимо вычислять различные производные функции y(x). Из (8.1.1) имеем yn/ = f ( xn , yn ).
Дифференцируя по x, получим
y// =
∂
∂
f ( x, y ) + f ( x, y ) ⋅ y/ или yn// = fx/ + f ⋅ fy/ . ∂x
∂y
(8.3.3)
При этом уравнение (8.3.2) приобретает вид
(
)
( )
h


yn +1 = yn + h  f + fx/ + f ⋅ fy/  + O h3 . (8.3.4)
2


Процедура нахождения решения с помощью ряда Тейлора является одношаговым методом, так как для вычисления yn + 1 требуется
информация только об одной предыдущей точке (xn, yn).
На практике очень трудно иногда найти fx/ и fy/ . Кроме того,
если попытаться получить лучшее приближение, то есть меньшую
ошибку, то необходимо вычислить yn/// , которая равна:
//
//
//
yn/// = fxx
+ 2f ⋅ fxy
+ f 2 ⋅ fyy
+ fx/ ⋅ fy/ + f ⋅ fy/2 . (8.3.5)
Последующие производные становятся еще более сложными, а
их вычисление чаще всего является весьма трудоемкой и даже невыполнимой операцией.
§ 8.4. Методы Рунге – Кутты1
Методы Рунге – Кутты обладают следующими отличительными
свойствами:
1) являются одношаговыми: чтобы найти yn + 1 нужна информация только о предыдущей точке (xn, yn);
1
224
Мартин Вильгельм Кутта (1867-1944) - немецкий физик и математик.
y n+1
L
ε
y=f(x)
yn
M
L : y = y n + yn/ ( x −x n )
xn
h
x n +1
Рис. 8.3. Схема вычислений по методу Эйлера
2) согласуются с рядом Тейлора вплоть до членов порядка hp, где
степень p различна для различных методов и называется порядком
метода;
3) не требуют вычисления производных от f(x, y), а только вычисления функции.
Именно благодаря третьему свойству методы Рунге – Кутты более известны, нежели ряд Тейлора. Однако для вычисления одной
последующей точки решения приходится вычислять f(x, y) несколько раз при различных значениях x и y.
Выведем сначала некоторые формулы на основе геометрических
аналогий. Пусть известна точка M(xn, yn) на искомой кривой. Через эту точку можно провести прямую с тангенсом угла наклона
yn/ = f ( xn , yn ). Тогда следующей можно считать точку, где прямая
L пересечет ординату, проведенную через точку x = xn + 1 = xn + h.
yn + yn/ ( x − xn ), но так как
Уравнение прямой L имеет вид y =
yn/ = f ( xn , yn ) и xn +=
1 xn + h, то
yn +=
(8.4.1)
1 yn + hf ( xn , yn ). 1
Формула (8.4.1) описывает метод Эйлера (см. рис. 8.3) один из
самых старых и широко известных методов численного интегрирования дифференциальных уравнений. Формула (8.4.1) может быть
1
Леонард Эйлер (1707-1783) – швейцарский математик.
225
получена из (8.2.2), если принять Φ ( xn , yn , yn +1, h ) ≡ f ( xn , yn ). Так
как здесь функция Ф не зависит от yn + 1, то метод является явным.
Ошибка интегрирования при x = xn + 1 показана на рисунке 8.3
в виде отрезка ε. Очевидно, что найденное таким образом приближенное решение согласуется с разложением в ряд Тейлора вплоть до
членов порядка h, так что ошибка равна ε = Kh2.
Теорема 8.2. Пусть функция f(x, y) удовлетворяет условию
fy/ ≤ M. Тогда справедливо неравенство
N −1

max yn − yn∗ ≤ exp ( M ( X − x0 ) ) ⋅  y0 − y0∗ + h ∑ ψ k

0≤n ≤ N
k =0


, (8.4.2)

 то есть метод Эйлера устойчив на конечном отрезке. Здесь
1 k
ψn
∑ aj y xn+1− j − Φ ( xn , y ( xn+1−k ),..., y ( xn+1 ),h ) – погрешность
h j =0
аппроксимации дискретного уравнения (8.2.1) на решении y(x).
Метод Эйлера, реализуемый формулой (8.4.1), можно усовершенствовать множеством различных способов. Рассмотрим две модификации: а) исправленный метод Эйлера и б) модифицированный
метод Эйлера.
а). В исправленном методе Эйлера находим средний тангенс угла
наклона касательной для двух точек (xn, yn) и xn + h, yn + hyn/ .
Геометрически процесс нахождения точки (xn + 1, yn + 1) можно проследить по рис. 8.4. С помощью
метода Эйлера находится точка
xn + h, yn + hyn/ , лежащая на
L
прямой L. В этой точке снова выL1
числяется тангенс угла наклона
касательной, на рисунке этому
L1
L
( xn +1 , yn +1 )
значению соответствует прямая
L1. Усреднение двух тангенсов
M (x n , yn )
дает прямую L. Наконец, через
y = f (x)
точку (xn, yn) проводим прямую
L1, параллельную L. Точка,
h
(
)
(
(
xn
xn+1
Рис. 8.4. Исправленный
метод Эйлера
226
)
)
в которой прямая L1 пересечется с ординатой xn + 1 и будет искомой точкой (xn + 1, yn + 1). Тангенс
угла наклона прямой L равен:
Φ ( xn , y
=
n ,h )
(
)
1
f ( xn , yn ) + f xn + h, yn + hyn/ =
, y/ f ( xn , yn ). (8.4.3)
 n
2 
L1
при
этом
записывается
Уравнение
y = yn + ( x − xn ) Φ ( xn , yn , h ). Таким образом,
yn +1 = yn + hΦ ( xn , yn , h )= yn +
(
h
f ( xn , yn ) + f xn + h, yn + hyn/
2 
в виде
). (8.4.4)
Это и есть рабочее уравнение исправленного метода Эйлера.
Выясним, как хорошо этот метод согласуется с разложением
в ряд Тейлора. Для этого запишем разложение в ряд Тейлора для
функции двух переменных в окрестности точки M(xn, yn):
f (=
x, y ) f ( xn , yn ) + ( x − xn )
∂f ( xn , yn )
∂x
+ ( y − yn )
∂f ( xn , yn )
∂y
+ ...
Если положить здесь
x =+
xn h è y =+
yn hyn/ , yn/ =
f ( xn , yn ),
то получим
(
)
( )
f xn + h, yn + hyn/ =f + hfx/ + hf ⋅ fy/ + O h2 .
L
L1∗
L∗
( xn +1 , y n +1 )
M (x n , yn )
y = f ( x)
h 2
xn
h
xn+1
Рис. 8.5. Модифицированный
метод Эйлера
227
Подставляя этот результат в (8.4.3) и производя необходимые
преобразования, будем иметь
h
Φ ( xn , yn , h ) = f + fx/ + f ⋅ fy/ + O h2 ,
2
(
) ( )
что совпадает с (8.3.2) вплоть до членов степени h2. Таким образом,
исправленный метод Эйлера является методом Рунге – Кутты второго порядка.
б). Если в рассмотренном методе усреднялись наклоны касательных, то в модифицированном методе Эйлера усредняются точки
(см. рис. 8.5). Первоначальное построение сделано точно так же, как
и в предыдущем случае – через точку M(xn, yn) проведена прямая
L с тангенсом угла наклона, равным f(xn, yn). Затем взята точка на
h
x xn + . Угол наклона касапересечении этой прямой и ординаты =
2
тельной L∗ в этой точке
h
h 

Φ ( xn , yn , h ) = f  xn + , yn + yn/ . 2
2 

(8.4.5)
Проведем через точку M(xn, yn) прямую L∗1, параллельную L∗.
Пересечение этой прямой с ординатой x = xn + h и даст искомую
точку (xn + 1, yn + 1). Так как уравнение прямой L∗1 можно записать
в виде y = yn + ( x − xn ) Φ ( xn , yn , h ), то
h
h 

yn +1 = yn + hΦ ( xn , yn , h )= yn + hf  xn + , yn + yn/ . (8.4.6)
2
2 

Формула (8.4.6) описывает модифицированный метод Эйлера.
В литературе исправленный метод Эйлера называют иногда методом Эйлера – Коши1, а модифицированный метод – усовершенствованным. Как и в предыдущем случае, можно легко показать,
что модифицированный метод является методом Рунге – Кутты
второго порядка.
Оба рассмотренных метода описываются формулами вида
yn +1 = yn + hΦ ( xn , yn , h ), причем в обоих случаях функция Ф имеет
вид
(
)
Φ ( xn , yn ,=
h ) a1f ( xn , yn ) + a2f xn + b1h, yn + b2hyn/ , =
yn/ f ( xn , yn ). (8.4.7)
1
228
Огюст Луи Коши (1789-1857.) - французский математик.
Для исправленного метода Эйлера
1

,
a=
1 a=
2
2

 b=
1 b=
2 1,
а для модифицированного
=
, a2 1,
a1 0=

1

.
1 b=
2
 b=
2
Методы Рунге – Кутты третьего и четвертого порядков можно
вывести совершенно аналогично тому, как это делалось при выводе
методов первого и второго порядков. Общая идея вывода формулы
метода Рунге – Кутты любого заданного порядка состоит в следующем.
Пусть y(x) – решение дифференциального уравнения
y/ ( x ) = f ( x, y ( x ) ), удовлетворяющее условию y(xn) = yn. Проинтегрируем уравнение y/ = f ( x, y ) по x от xn до xn + 1, получим
xn +1
∫
y/ ( x ) dx =
xn +1
xn
∫ f ( x, y ( x ) ) dx.
xn
По формуле Ньютона – Лейбница1
xn +1
∫
y/=
( x ) dx y ( xn+1 ) − y ( xn ).
xn
Тогда
yn +=
1 yn +
xn +1
∫ f ( x, y ( x ) ) dx.
xn
(8.4.8)
Если бы интеграл в формуле (8.4.8) вычислялся точно, то она
была бы основной рабочей формулой всех методов численного интегрирования дифференциальных уравнений. В действительности
1 Готфрид Вильгельм Лейбниц (1646–1716) – немецкий математик, создатель
дифференциального исчисления.
229
используют приближенную формулу, заменяя интеграл квадратурной суммой.
Введем на отрезке [xn, xn + 1] m вспомогательных узлов
) x + a h, x( =
) x + a h,..., x( =
) x + a h,
xn( =
n
1
n
n
2
n
n
m
1
2
m
где 0≤a1≤a2≤…≤am≤1. Тогда интеграл в уравнении (8.4.8) можно за1
2
m
менить квадратурной суммой с узлами xn( ) , xn( ) ,..., xn( ) , то есть
( )
m
i
i
y ( xn +1 ) ≈ y ( xn ) + h ∑ ci f  xn( ) , y xn( ) .


i =1
( )
(8.4.9)
Здесь неизвестны значения y xn( ) . Применяя формулу (8.4.8),
получим
i
( )
xn( )
i
i
y xn( ) =
y ( xn ) + ∫ f ( x, y ( x ) ) dx, i =
2,3,...,m.
xn
Заменим для каждого i входящий в эту формулу интеграл соот1
2
m
ветствующей ему квадратурной суммой с узлами xn( ) , xn( ) ,..., xn( ) :
( )
( )

2
1
1
y xn( ) ≈ y ( xn ) + hb21f  xn( ) , y xn( ) ,






( 3)
 (1)
(1) 
 (2)
(2)  
y xn ≈ y ( xn ) + h  b31f  xn , y xn  + b32f  xn , y xn  ,



............................................................................


i −1
(8.4.10)

i
j
j
y xn( ) ≈ y ( xn ) + h ∑ bij f  xn( ) , y xn( ) ,




j =1

 .............................................................................
m −1

m
j
j

y xn( ) ≈ y ( xn ) + h ∑ bmj f  xn( ) , y xn( ) .



j =1

( )
( )
( )
( )
( )
( )
( )
Формулы (8.4.10) позволяют последовательно вычислять приближения к значениям
( ) ( )
( )
2
3
m
y xn( ) , y xn( ) ,..., y xn( ) .
230
Пусть
( )
(
)
=
yn( ) y=
xn( ) , kn( ) f xn( ) , yn( ) .
i
i
i
i
i
Тогда формулу (8.4.8) можно переписать в виде
m

i
yn +1 =
yn + hkn , kn =

∑ ci kn( ) ,

i =1

1)
1) (1)
1
(
(
(
=
kn
f=
xn , yn , yn ) yn ,



) f x(2) , y(2) , y(2=
) y + hb k(1) ,
 k(2=
n
n
n
n
n
21 n

 ..........................................................

m −1
 (m )
(m )
( j)
(m ) (m )
kn = f xn , yn , yn = yn + h ∑ bmj kn .

j =1
(
(
(
)
)
(8.4.11)
)
i
Если исключить отсюда величины yn( ) , получим
m

i
yn +1 =
yn + hkn , kn =

∑ ci kn( ) ,

i =1

1)
(
kn = f ( xn , yn ),


(2) f x + a h, y + hb k(1) ,
 kn =
2
21 n
n
n

...................................................

m −1


 (m )
j

=
+
+
k
f
x
a
h
,
y
h
bmj kn( ) .
∑
n
m
n
 n


j =1


 (
)
(8.4.12)
Выбор конкретных значений параметров ci, ai и bi осуществляется по-разному и дает ту или иную модификацию методов Рунге –
Кутты. Приведем рабочие формулы метода четвертого порядка. Он
применяется настолько широко, что в литературе называется просто «методом Рунге – Кутты» без всяких указаний на тип или порядок. Этот классический метод Рунге – Кутты описывается системой
следующих шести уравнений:
231
(
)
1 1

2
3
4
yn + hkn , kn = kn( ) + 2kn( ) + 2kn( ) + kn( ) ,
yn +1 =
6

1)
(

kn = f ( xn , yn ),

h
h 1 

2

kn( ) = f  xn + , yn + kn( ) ,
(8.4.13)

2
2



h
h 2 

3

kn( ) = f  xn + , yn + kn( ) ,

2
2



4
3
(
)
(
)

kn = f xn + h, yn + hkn .

(
)
Ошибка метода ε = Kh5, при его использовании функцию необходимо вычислять четырежды.
§ 8.5. Анализ ошибок, возникающих при использовании
методов Рунге – Кутты
Один из серьезных недостатков методов Рунге – Кутты состоит
в отсутствии простых способов оценки ошибки интегрирования.
Все же без некоторой оценки ошибки трудно правильно выбрать величину шага интегрирования h. Применим так называемый принцип Рунге.
T
Пусть yn( ) есть точное решение дифференциального уравнения
/
y = f ( x, y ) при x = x0 + nh. Тогда для метода Рунге – Кутты, описываемого формулами (8.4.13), справедлива следующая оценка погрешности:
ε
h
 
2
h
 
h
yn 2  − yn( )
=p
,
2 −1
(8.5.1)
h
T
где yn( ) – приближение к точному решению yn( ) , вычисленное с шаh
 
yn 2 
h
h
 
 
h
T
гом h,
– такое же приближение с шагом , ε  2  = yn( ) − yn 2  .
2
Так как для метода, описываемого формулами (8.4.13), p = 4, то
h
 h

 
1   2 
h
2

(8.5.2)
ε =
yn − yn( )  .

15 

 232
Формула (8.5.1) выведена в предположении, что на каждом шаге
интегрирования допускается погрешность, приблизительно про(T ) y( h ) + Kh5 , что справедливо для
порциональная hp + 1, то есть y=
n
n
достаточно гладких функций. Таким образом, ошибка интегрирования в предположении, что y(5)(x) практически постоянна, равна:
h
 
ε 2  =
 h

1   2 
h
Kh =
yn − yn( )  .

15 


5
Это довольно точная оценка, однако для ее использования необходимо вычислять решение дважды.
Предложено несколько полуэмпирических критериев смены
шага и выбора оптимального шага интегрирования при условии достижения заданной точности. Например, используется такое оценочное правило: если
2
3
kn( ) − kn( )
1
2
kn( ) − kn( )
достаточно велико (обычно больше нескольких сотых), то шаг интегрирования необходимо уменьшить.
Существуют более точные методы оценки погрешности интегрирования, основанные на использовании для контроля точности
двух различных методов Рунге – Кутты. Один из самых эффективных – метод Рунге – Кутты – Фельберга. В этом методе для оценки
погрешности метода пятого порядка используются формулы метода
четвертого порядка точности, причем на одном шаге интегрирования требуется всего лишь шесть вычислений значений правой части f(x, y).
§ 8.6. Методы прогноза и коррекции
Отличительной чертой методов Рунге – Кутты является то, что
при вычислении следующей точки (xn + 1, yn + 1) используется информация только о предыдущей (xn, yn). Зато приходится вычислять
значение правой части в нескольких промежуточных точках. Это
нерационально, поскольку при налаженном процессе интегрирования имеется дополнительная информация – предыдущие точки
решения.
233
Рассмотрим общую идею группы методов, известных в литературе под названием «методов прогноза и коррекции». Как ясно из названия, вначале «предсказывается» значение yn + 1, а затем используется тот или иной метод для «корректировки» этого значения. Эту
же формулу можно использовать сколько угодно раз для повторной
корректировки уже скорректированного значения yn + 1.
Для демонстрации основных идей метода можно использовать
для прогноза формулу любого метода численного интегрирования.
Воспользуемся формулой второго порядка
(0)
y=
n +1 yn −1 + 2hf ( xn , yn ),
(8.6.1)
0
где индекс ( ) означает исходное приближение к yn + 1. Непосредственно из написанной формулы следует, что с ее помощью нельзя
вычислить, например, y1, ибо для этого потребовалась бы точка,
расположенная перед начальной точкой y0. Чтобы начать решение
по методу прогноза и коррекции, часто используется метод Рунге –
Кутты.
Геометрически предсказание сводится к тому, что находится угол наклона касательной в точке (xn, yn) (см. левую половину
рис. 8.6). После этого через точку (xn–1, yn–1) проводится прямая L,
(0)
параллельная L1. Предсказанное значение yn +1 будет расположено
там, где прямая L пересечется с абсциссой x = xn + 1. Скорректируем теперь предсказанное значение. Вычислим наклон касательной
(0)
в точке  xn +1, yn +1 . Эта касательная изображена на правом ри
L . Усредним тангенсы углов наклона прямых
сунке и обозначена
2
L1 и L2 и получим прямую L∗. Наконец, проведем через точку (xn,
L2
L1
L3
L∗
L
(0 ) 
x
 n +1 , y n +1 


y = f (x)
y = f (x)
h
xn−1
 x , y (1) 
 n +1 n +1 


L1
h
h
xn
xn+1
xn−1
xn
xn+1
Рис. 8.6. Корректировка решения методами прогноза и коррекции
234
yn) прямую L3, параллельную L∗, и точка пересечения этой прямой
(1)
с абсциссой x = xn + 1 даст новое приближение  xn +1, yn +1 .


Это значение вычисляется по формуле
h
(1)
(0) 
yn +1 =
yn + f ( xn , yn ) + f  xn +1, yn +1   .
2

 (8.6.2)
В общем случае i-е приближение, очевидно, будет находиться таким образом:
h
(i)
( i −1) 
yn +1 =
yn + f ( xn , yn ) + f  xn +1, yn +1   .
2

 (8.6.3)
Итерационный процесс можно прекратить, когда
( i +1)
(i)
yn +1 − yn +1 < ε .
(8.6.4)
К настоящему времени разработано много методов прогноза и
коррекции разных порядков, обеспечивающих очень большую точность решения. В некоторых из них по заданной точности предусмотрен автоматический выбор шага и автоматический выбор порядка
метода.
§ 8.7. Сравнение методов
Методы Рунге – Кутты.
1. В этих методах используется информация только об очередной
точке решения, поэтому с их помощью можно начинать решение.
2. По той же самой причине приходится многократно вычислять
функцию f(x, y).
3. Методы этой группы позволяют очень легко менять величину
шага h.
4. При использовании этих методов трудно получить оценку
ошибки интегрирования.
Методы прогноза и коррекции.
1. Так как в этих методах используется информация о ранее вычисленных точках решения, то с их помощью нельзя начать решение.
2. Из-за использования информации о ранее вычисленных точках методы этой группы более экономичны по затратам машинного
времени.
235
3. При любом изменении величины шага h приходится временно
возвращаться к методам Рунге – Кутты.
4. В качестве побочного продукта вычислений получается хорошая оценка ошибки интегрирования.
Как всегда, наиболее целесообразным является использование
при решении практических задач комбинации этих двух методов.
Пример. Методом Рунге – Кутты с шагом h = 0.1 найти на отрезке
[0, 0.3] решение следующего дифференциального уравнения:
cosbx
y/ =
a + y2
с начальным условием y(0) = 0, a = 1.4, b = 2.6.
Обозначим через yi приближенное значение решения в точке xi.
Формулы метода:
1 (1)

(2)
( 3) ( 4 )
yi hki , ki = ki + 2ki + 2ki + ki ,
yi +1 =+
6


1
(
)

ki = f ( xi , yi ),


h
h (1) 

(2)

ki = f  xi + , yi + ki ,

2
2



h
h
3
2


(
)
(
)

ki = f  xi + , yi + ki ,

2
2



4
3
(
)
(
)

ki = f  xi + h, yi + hki .



(8.7.1)
Все вычисления удобно располагать по схеме, указанной в таблице.
i
0
x
y
x0
k
(1)
y0
k0
x0 +
h
2
h (1)
y0 + k0
2
k0
x0 +
h
2
h (2)
y0 + k0
2
k0
x0 + h
( 3)
y0 + hk0
(2)
( 3)
(4)
k0
∆y
(1)
k0
(2)
2k0
( 3)
2k0
(4)
k0
∆y
1
236
x1
y1
Она заполняется следующим образом.
1. Записываем в первой строке x0, y0, вычисляем f(x0, y0) и зано(1)
сим в таблицу в качестве k0 .
2. Для второй строки вычисляем
x0 +
h
h (1)
и y0 + k0 ,
2
2
затем находим
h
h (1) 

f  x0 + , y0 + k0 
2
2


(2)
и записываем в качестве k0 .
3. Находим
h (2)
y0 + k0 ,
2
вычисляем
h
h (2) 

f  x0 + , y0 + k0 
2
2


( 3)
и записываем в таблицу на место k0 .
( 3)
4. Записываем в четвертой строке x0 + h и y0 + hk0 , затем находим
(4)
( 3)
k0 = f  x0 + h, y0 + hk0 .


5. Суммируем числа, стоящие в столбце ∆y, делим на шесть и заносим в таблицу в качестве ∆y0.
6. Вычисляем x1 = x0 + h, y1 = y0 + ∆y0. Затем все вычисления необходимо повторить с пункта 1, принимая за начальную точку (x1,
y1). Для контроля правильности выбора шага h рекомендуется вычислять дробь
(2)
θ=
ki
(1)
ki
( 3)
− ki
(2)
− ki
.
Величина θ не должна превышать двух – трех сотых. В противном случае шаг h следует уменьшить.
237
i
0
x
y
k
θ
∆y
0.00
0.000000
0.714286
0.14286
0.05
0.035714
0.707614
1.415228
0.05
0.035381
0.707626
1.415252
0.10
0.070763
0.687818
0.687818
0.10
0.705431
0.509261
0.509262
0.15
0.730894
0.478185
0.956370
0.15
0.729340
0.478747
0.957494
0.20
0.753306
0.441084
0.0018
0.705431
1
0.441084
0.0018
0.477368
2
0.20
1.182799
0.310045
0.310045
0.25
1.198301
0.280714
0.561428
0.25
1.196835
0.281062
0.562124
0.30
1.210905
0.248026
0.248026
0.0012
0.280270
3
0.30
1.463069
§ 8.8. Лабораторная работа № 9.
Методы интегрирования обыкновенных
дифференциальных уравнений в пакете Mathcad
Существует большое число методов приближенного решения
дифференциальных уравнений, основанных на самых различных
идеях. Численные методы дают приближенное решение y(x) в виде
таблицы значений y1, y2,…, yn в точках x1, x2,…, xn.
Простейшим методом численного интегрирования дифференциального уравнения первого порядка y/ = f ( x, y ), удовлетворяющего
начальному условию y(x0) = y0, является метод Эйлера. В нем величины yi вычисляются по формуле
x0 + ih, i =
0,1,2,...
xi =

 yi +1= yi + hf ( xi , yi ).
Метод Эйлера относится к группе одношаговых, в которых для
расчета точки (xi + 1, yi + 1) требуется информация только о последней
вычисленной точке (xi, yi). Геометрическая интерпретация метода
изложена в § 8.4.
238
В среде Mathcad имеется тринадцать встроенных функций решения дифференциальных уравнений и систем (задача Коши, краевая
задача, уравнения в частных производных). Самая употребительная из них – rkfixed, в которую заложен метод Рунге – Кутты четвертого порядка с постоянным шагом. Подпрограммы для метода
Эйлера нет из-за его низкой точности. Формулы метода Эйлера настолько просты, что вычисления по ним можно организовать с помощью дискретной переменной.
Рассмотрим пример. Решим задачу Коши для дифференциального уравнения
/
y=
cos ( x − y ) +
1.25y
при y(0) = 0.
1.5 + x
Введем начало программы
ORIGIN: = 1
a: = 0 b: = 1 h: = 0.1 y1: = 0
f ( x , y) := cos ( x − y) + 1.25 ⋅
y
1.5 + x
i: = 1..11 x i: = a + h*(i-1)
i: = 2..11 y i: = y i–1 + h*f(x i–1,y i–1)
xT
yT
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
0.000 0.100 0.208 0.323 0.445 0.575 0.710 0.852 0.999 1.152 1.308
Аналогичного результата можно достигнуть, введя подпрограмму, реализующую формулы (8.4.1) метода Эйлера:
Eiler ( y0 , a , b , h , f) :=
n←
b−a
h
z1 , 1 ← a
z1 , 2 ← y0
for
i ∈ 2 ..
n+1
zi , 1 ← zi−1 , 1 + h
zi , 2 ← zi−1 , 2 + h ⋅ f ( zi−1 , 1 , zi−1 , 2)
z
z1: = Eiler(y1,0,1,0.1,f)
239
1.5
1
yi
z1
〈2〉
0.5
0
0
0.2
0.4
x i , z1
0.6
〈1〉
0.8
1
1
2
3
4
z1 = 5
6
7
8
9
10
11
1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
2
0
0.1
0.208
0.323
0.445
0.575
0.71
0.852
0.999
1.152
1.308
Минимальная переделка подпрограммы позволяет запрограммировать исправленный и модифицированный метод Эйлера по
формулам (8.4.4) и (8.4.6).
Ieiler ( y0 , a , b , h , f) :=
n←
b−a
h
z1 , 1 ← a
z1 , 2 ← y0
for
i ∈ 2 ..
n+1
zi , 1 ← zi−1 , 1 + h
c ← f ( zi−1 , 1 , zi−1 , 2)
d ← f ( zi , 1 , zi−1 , 2 + h ⋅ c)
zi , 2 ← zi−1 , 2 +
z
Meiler ( y0 , a , b , h , f) :=
n←
h
⋅ ( c + d)
2
b−a
h
z1 , 1 ← a
z1 , 2 ← y0
for
i ∈ 2 ..
n+1
zi , 1 ← zi−1 , 1 + h
c ← f ( zi−1 , 1 , zi−1 , 2)


d ← f  zi−1 , 1 +
h
h 
, zi−1 , 2 +
⋅ c
2
2 
zi , 2 ← zi−1 , 2 + h ⋅ d
z
240
z2: = Ieiler(y1,a,b,h,f)
z3: = Meiler(y1,a,b,h,f)
1
2
1
2
1
0
0
1
0
0
2
0.1
0.104
2
0.1
0.104
3
0.2
0.216
3
0.2
0.216
4
0.3
0.335
4
0.3
0.336
z2 = 5
0.4
0.462
0.462
0.5
0.595
z3 = 5
0.4
6
6
0.5
0.596
7
0.6
0.735
7
0.6
0.736
8
0.7
0.88
8
0.7
0.881
9
0.8
1.031
9
0.8
1.032
10
0.9
1.187
10
0.9
1.188
1
1.346
11
1
1.348
11
Обратимся теперь к средствам пакета Mathcad. Для решения
обыкновенных «неособенных» дифференциальных уравнений
здесь используются две функции rkfixed и Rkadapt, реализующие
метод Рунге – Кутты четвертого порядка с постоянным и переменным шагом. Набор параметров у этих подпрограмм одинаков:
rkfixed(y, a, b, n, f), где y = y(x0), a и b - начало и конец интервала инb−a
, f(x,
тегрирования, n – число точек и, следовательно, шаг h =
n
y) – правая часть дифференциального уравнения. Несмотря на то
что при решении дифференциального уравнения функция Rkadapt
использует переменный шаг, она тем не менее представляет ответ
для n точек, находящихся на одинаковом расстоянии друг от друга,
b−a
.
равном h =
n
Вводим следующую часть программы:
yy1: = 0
fun ( x , yy ) := cos ( x − yy ) + 1.25 ⋅
yy
1.5 + x
z4: = rkfixed(yy1,a,b,10,fun)
z5: = rkfixed(yy1,a,b,20,fun)
z44: = Rkadapt(yy1,a,b,10,fun)
241
1
z4 =
2
1
0
0
1
0
0
2
0.1
0.104
2
0.1
0.104
3
0.2
0.216
3
0.2
0.216
4
0.3
0.336
4
0.3
0.336
5
0.4
0.463
5
0.4
0.463
6
0.5
0.596
6
0.5
0.596
7
0.6
0.736
7
0.6
0.736
8
0.7
0.882
8
0.7
0.882
9
0.8
1.033
9
0.8
1.033
10
0.9
1.188
10
0.9
1.188
1
1.348
11
1
1.348
11
1
2
1
0
0
2
0.05
0.051
3
0.1
0.104
4
0.15
0.159
5
0.2
0.216
6
0.25
0.275
7
z5 = 8
0.3
0.336
0.35
0.398
9
0.4
0.463
10
0.45
0.528
11
0.5
0.596
12
0.55
0.665
13
0.6
0.736
14
0.65
0.808
15
0.7
0.882
16
0.75
...
i: = 1..10
Er1 i :=
242
2
1
( z4〈2〉 ) i − ( z5〈2〉 ) 2 ⋅ i
z44 =
errRKF :=
max ( Er1 )
15
errRKF: = 5.291×10–3
1
1
0.051
2
0.055
3
0.059
4
0.063
Er1 = 5
0.066
6
0.069
7
0.072
8
0.075
9
0.077
10
0.079
1.5
z1
z4
z5
〈2〉
1
〈2〉
〈2〉
z44
〈2〉
0.5
0
0
0.2
z1
〈1〉
0.4
0.6
0.8
〈1〉
〈1〉
〈1〉
, z44
, z5
, z4
Обращение к rkfixed с h1 = 0.1 и h2 = 0.05 сделано для оценки
погрешности интегрирования по правилу Рунге (8.5.2). errRKF –
оценка погрешности.
На данном учебном примере, конечно, невозможно оценить выгоды использования функции Rkadapt вместо rkfixed. В более
сложных случаях Rkadapt решает уравнение более точно и быстро.
Даже в этом примере точность решения по Rkadapt выше, чем по
rkfixed. Это видно из следующей таблицы:
243
x
z4
0.1
0.1040989
0.2
0.2161356
0.3
0.3357322
0.4
0.4625076
0.5
0.5960572
z5
0.1040990
0.2161359
0.3357326
0.4625081
0.5960578
z44
0.1040990
0.2161359
0.3357326
0.4625081
0.5960571
x
z4
0.6
0.7359363
0.7
0.8816484
0.8
1.0326377
0.9
1.1882891
1.0
1.3479326
z5
0.7359370
0.8816491
1.0326386
1.1882900
1.3479335
z44
0.7359371
0.8816492
1.0326386
1.1882901
1.3479336
В заключение приведем подпрограмму RGK, реализующую формулы (8.4.13) метода Рунге – Кутты четвертого порядка. Далее, как
и в предыдущем случае, произведена оценка погрешности по правилу Рунге и даны графики полученных решений.
z6: = RGK(y1,a,b,0.1,f)
z7: = RGK(y1,a,b,0.05,f)
244
i: = 1..100
Er2 i :=
( z6〈2〉 ) i − ( z7〈2〉 ) 2 ⋅ i
errRGK :=
max ( Er2 )
15
errRGK = 5.291×10–3
1.5
z4
z6
z7
〈2〉
1
〈2〉
〈2〉
0.5
0
0
0.2
0.4
0.6
0.8
〈1〉
〈1〉
〈1〉
z4
, z6
, z7
Задание № 1. Решить заданное дифференциальное уравнение
первого порядка методом Эйлера и Рунге – Кутты четвертого порядка на отрезке x∈[0, 1] с шагом h = 0.1 и оценить погрешность интегрирования по правилу Рунге.
1 + 0.2y sin x − y2 , y ( 0 ) =
0.1.
1. y/ =
/
cos ( x + y ) + 0.5 ( x − y ), y ( 0=
2. y=
) 0.
cos x
0.2.
3. y/ =− 0.5y2 , y ( 0 ) =
x +1
(
)
1 − y2 cos x + 0.6y, y ( 0 ) =
0.
4. y/ =
1 + 0.4y sin x − 1.5y2 , y ( 0 ) =
1.
5. y/ =
cos y
0.
6. y/ =+ 0.3y2 , y ( 0 ) =
x+2
=
y/ cos (1.5x + y ) + ( x − y ), =
y ( 0 ) 0.5.
7.
245
0.5y
, y ( 0 ) =0.3.
8. y/ =1 − sin ( x + y ) +
x+2
cos y
0.
9. y/ = + 0.1y2 , y ( 0 ) =
1.5 + x
10. y/ = 0.6 sin x − 1.25y2 + 1, y ( 0 ) = 1.
1
1
z6 =
2
2
1
0
0
2
0.05
0.051
3
0.1
0.104
4
0.15
0.159
5
0.2
0.216
1
0
0
6
0.25
0.275
2
0.1
0.104
7
0.336
3
0.2
0.216
z7 = 8
0.3
0.35
0.398
4
0.3
0.336
9
0.4
0.463
5
0.4
0.463
10
0.45
0.528
6
0.5
0.596
11
0.5
0.596
7
0.6
0.736
12
0.55
0.665
8
0.7
0.882
13
0.6
0.736
9
0.8
1.033
14
0.65
0.808
10
0.9
1.188
15
0.7
0.882
1
1.348
16
0.75
...
11
y/ cos ( 2x + y ) + 1.5 ( x − y ), y=
11. =
( 0 ) 0.1.
0.1y
1−
− sin ( 2x + y ), y ( 0 ) =
0.5.
12. y/ =
x+2
cos y
− 0.1y2 , y ( 0 ) =
0.2.
13. y/ =
1.25 + x
1 + 0.8y sin x − 2y2 , y ( 0 ) =
0.5.
14. y/ =
=
y/ cos (1.5x + y ) + 1.5 ( x − y ), =
y ( 0 ) 1.
15.
0.3y
, y ( 0 ) =0.
16. y/ =1 − sin ( 2x + y ) +
x+2
246
cos y
− 0.5y2 , y ( 0 ) =
0.1.
17. y/ =
1.75 + x
18. y/ =1 + (1 − x ) sin y − ( 2 + x ) y, y ( 0 ) =0.5.
(
)
0.8 − y2 cos x + 0.3y, y ( 0 ) =
0.
19. y/ =
1 + 2.2 sin x + 1.5y, y ( 0 ) =
0.
20. y/ =
y′ cos ( x + y ) + 0.75(x − y), y ( 0=
21. =
) 0.3.
22. y′ =1 − sin (1.25x + y ) +
0.5y
, y ( 0 ) =0.5.
x+2
cos y
0.
23. y/ =− 0.3y2 , y ( 0 ) =
x+2
0.1y
, y ( 0 ) =1.
24. y/ =1 − sin (1.75x + y ) +
x+2
cos y
− 0.5y2 , y ( 0 ) =
0.
25. y/ =
1.25 + x
26.
=
y/ cos (1.5x + y ) − 2.25 ( x + y ), =
y ( 0 ) 2.
cos y
1.
27. y/ = − 1.25y2 , y ( 0 ) =
1.5 + x
28. y/ =1 − ( x − 1) sin y + 2 ( x + y ), y ( 0 ) =0.5.
1.75y
, y ( 0 ) =0.
29. y/ =1 − sin ( 0.75x − y ) +
x +1
1.25y
/
=
cos ( x − y ) +
, y (0
30. y=
) 0.5.
1.5 + x
§ 8.9. Лабораторная работа № 9.
Методы интегрирования обыкновенных
дифференциальных уравнений в пакете Matlab
В этом пакете имеется обширная линейка подпрограмм, интегрирующих ОДУ или системы ОДУ. Это подпрограммы ode11, ode
15, ode23, ode 45. Все они реализуют методы Рунге-Кутты различ247
ных порядков. Рассмотрим и используем подпрограмму ode45, реализующую этот метод четвёртого порядка для так называемых
«нежёстких» дифференциальных уравнений или систем дифференциальных уравнений. Самое простое обращение к этой подпрограмме имеет вид [x,Y] = ode45(‘имя_функции’, [f0 fn], y0). Параметры: входные – имя функции, вычисляющей правую часть дифференциального уравнения y′ = f ( x, y ), можно также задать в виде @
имя_функции; [f0 fn] – начало и конец интервала интегрирования
по аргументу дифференциального уравнения, y0 – начальные условия; выходные – x –текущее значение аргумента, Y – вектор-столбец, соответствующий интегрируемой переменной. Как всегда, вначале приводятся тексты подпрограмм, используемых в основной
программе. Подпрограммы исправленного и модифицированного
метода Эйлера не приводятся. При желании они могут быть легко
восстановлены по аналогии с соответствующими подпрограммами
пакета Mathcad. Остальные подпрограммы таковы:
function f=ffun(x,y)
%Функция вычисляет правую часть дифференциального
%уравнения лабораторной работы № 9.
a=cos(x-y);
b=1.25*y/(1.5+x);
f=a+b;
end
function z=Eiler(a,b,h,y0)
%Подпрограмма Eiler решает дифференциальное
%уравнение первого порядка методом Эйлера.
%параметры подпрограммы аналогичны параметрам
%соответствующей подпрограммы в пакете Mathcad
n=(b-a)/h;
z(1,1)=a;
z(1,2)=y0;
for i=2:n+1
z(i,1)=z(i-1,1)+h;
z(i,2)=z(i-1,2)+h*ffun(z(i-1,1),z(i-1,2));
end;
end
function z=RGK(a,b,h,y0)
%Подпрограмма RGK интегрирует дифференциальное уравнение
%вида y/=f(x,y) методом Рунге-Кутты 4-го порядка
248
%с постоянным шагом. Параметры: a, b - начало и конец интервала
%интегрирования, h - шаг, y0 - на чальные условия дифференциального
%уравнения, z - вектор результата.
%n=(b-a)/h;
z(1,1)=a;
z(1,2)=y0;
for i=2:n+1
k1=ffun(z(i-1,1),z(i-1,2));
c=z(i-1,1)+h/2;
d=z(i-1,2)+h/2*k1;
k2=ffun(c,d);
d=z(i-1,2)+h/2*k2;
k3=ffun(c,d);
z(i,1)=z(i-1,1)+h;
k4=ffun(z(i,1),z(i-1,2)+h*k3);
c=1/6*(k1+2*(k2+k3)+k4);
z(i,2)=z(i-1,2)+h*c;
end;
end
Далее следует текст основной программы. В нашем случае этот
текст может быть таким, если рассматривать то же уравнение, что и
в предыдущем параграфе.
>>
>>
>>
>>
>>
xx
clear
y0=0;
fspan=[0 1];
[x,Y]=ode45(@ffun,fspan,y0)
xx=x'
= 0
0.0001 0.0001 0.0002 0.0002 0.0005 0.0007 0.0010
0.0012 0.0025 0.0037 0.0050 0.0062 0.0125 0.0188 0.0250
0.0313 0.0563 0.0813 0.1063 0.1313 0.1563 0.1813 0.2063
0.2313 0.2563 0.2813 0.3063 0.3313 0.3563 0.3813 0.4063
0.4313 0.4563 0.4813 0.5063 0.5313 0.5563 0.5813 0.6063
0.6313 0.6563 0.6813 0.7063 0.7313 0.7563 0.7813 0.8063
0.8313 0.8563 0.8813 0.9063 0.9313 0.9485 0.9657 0.9828
1.0000
>> yy=Y'
yy = 0
0.0001 0.0001 0.0002 0.0002 0.0005 0.0007 0.0010
0.0012 0.0025 0.0037 0.0050 0.0062 0.0126 0.0189 0.0253
0.0318 0.0577 0.0841 0.1110 0.1384 0.1663 0.1947 0.2235
0.2528 0.2826 0.3129 0.3436 0.3747 0.4063 0.4383 0.4708
0.5037 0.5370 0.5707 0.6048 0.6392 0.6741 0.7094 0.7450
249
0.7810 0.8174 0.8541 0.8911 0.9284 0.9661 1.0041 1.0424
1.0810 1.1198 1.1589 1.1983 1.2379 1.2653 1.2927 1.3203
1.3479
Шаг интегрирования подпрограмма ode45 выбирает автоматически, в нашем случае он переменный, что видно по массиву xx.
>> a=0;
>> b=1;
>> h=0.1;
>> y0=0;
>> z=Eiler(a,b,h,y0)
z = 0
0
0.1000
0.1000
0.2000
0.2078
0.3000
0.3231
0.4000
0.4455
0.5000
0.5747
0.6000
0.7103
0.7000
0.8520
0.8000
0.9993
0.9000
1.1516
1.0000
1.3084
>> zz=RGK(a,b,h,y0)
zz=
0
0
0.1000
0.1041
0.2000
0.2161
0.3000
0.3357
0.4000
0.4625
0.5000
0.5961
0.6000
0.7359
0.7000
0.8816
0.8000
1.0326
0.9000
1.1883
1.0000
1.3479
Задание № 2. Решить заданное на стр. 245–247 дифференциальное уравнение первого порядка методом Эйлера и Рунге – Кутты
четвертого порядка на отрезке x∈[0, 1] с шагом h = 0.1 и оценить погрешность интегрирования по правилу Рунге.
250
§ 8.10. Решение задачи Коши
для систем обыкновенных дифференциальных уравнений
Как правило, на практике приходиться решать задачу Коши не
для одного дифференциального уравнения, а для системы вида
 y/ ( x ) = f1 ( x, y1 ( x ), y2 ( x ),..., yn ( x ) ),
 1
 y/ ( x ) = f ( x, y ( x ), y ( x ),..., y ( x ) ),
2
1
2
n
 2
.....................................................
 /
 yn ( x ) = fn ( x, y1 ( x ), y2 ( x ),..., yn ( x ) ).
(8.10.1)
Здесь y1(x), y2(x),…, yn(x) – искомые функции, значения которых
подлежат определению на [x0, X]. В момент x = x0 задаются начальные условия
 y1 ( x0 ) = y10 ,

 y2 ( x0 ) = y20 ,

....................
 yn ( x0 ) = yn0 ,

(8.10.2)
определяющие начальное состояние системы (8.10.1).
T
Введем
вектор-функции
y ( x ) = ( y1 ( x ), y2 ( x ),..., yn ( x ) ) ,
( ( ) ( )
( ))
T
T
f ( x, y ) = f1 x, y , f2 x, y ,..., fn x, y
и вектор y0 = ( y10 , y20 ,..., yn0 ) .
Тогда задачу Коши (8.10.1), (8.10.2) можно записать в компактной
форме:
y/ x = f x, y ,
 ( )
(8.10.3)

 y ( x0 ) = y0 .
Теорема 8.3. (Теорема существования и единственности решения). Пусть вектор – функция f x, y определена и непрерывна
в области GX и удовлетворяет условию Липшица
( )
( )
(
) (
)
f x, y1 − f x, y2 ≤ L y1 − y2 , =
L const, L > 0,
(8.10.4)
для ∀x∈[x0, X] и произвольных y1, y2 . Тогда для каждого начального значения y0 существует единственное решение y ( x ) задачи
Коши, определенное на отрезке [x0, X].
251
Если функции f1, f2,…, fn непрерывно дифференцируемы по y1,
y2,…, yn, то условие (8.10.4) эквивалентно условию fy/ x, y ≤ L, где
матрица Якоби
( )
fy/
( )
( )
f1/y2 x, y
( )
fn/y2
 f /y x, y
1 1
 f / x, y
x, y =  2 y1

...

 fn/y x, y
 1
( )
f2/y2
( )
( x,y )
( )
( )
... f1/yn x, y 

... f2/yn x, y 
. (8.10.5)

...
...

... fn/yn x, y 
 ...
( x,y )
( )
На практике методы решения задачи Коши одного уравнения
можно использовать и для систем, причем уравнения претерпевают минимальные изменения. Следует лишь заменить в расчетных
T
формулах числа yi на векторы yi = ( y1, y2 ,..., yn ) , а функцию f – на
вектор – функцию f.
Например, расчетная формула метода Эйлера yi + 1 = yi + hf(xi, yi)
применительно к системе (8.10.3) примет вид
(
)

yi +=
1 yi + hf xi , yi èëè

 y1,i +=
1 y1i + hf1 ( xi , y1i , y2i ,..., yni ),

 y2,i=
+1 y2i + hf2 ( xi , y1i , y2i ,..., yni ),

.....................................................
 yn,i=
+1 yni + hfn ( xi , y1i , y2i ,..., yni ).

(8.10.6)
Метод Рунге – Кутты четвертого порядка точности (8.4.13) порождает следующие формулы:

1  (1)
(2)
( 3) ( 4 ) 
yi hki , ki = ki + 2ki + 2ki + ki ,
 yi +1 =+
6



1
2
1
h
h
( )
( )
( )

ki = f xi , yi , ki = f  xi + , yi + ki ,

2
2



 ( 3)
h
h (2) 
(4)
( 3) 


ki = f  xi + , yi + ki , ki = f  xi + h, yi + hki .
2
2





(
)
(8.10.7)
Теория численных методов решения задачи Коши для систем
дифференциальных уравнений имеет много общего с соответствующей теорией решения задачи Коши для одного дифференциального
уравнения.
252
§ 8.11. Сведение задачи Коши для уравнения n-го порядка
к задаче Коши для системы уравнений первого порядка
Рассмотрим дифференциальное уравнение n-го порядка в норn
n −1
мальной форме y( ) ( x ) = f x, y ( x ), y/ ( x ),..., y( ) ( x ) с начальными
условиями
(
)
 y ( x0 ) = y10 ,
 /
 y ( x0 ) = y20 ,
 ...................

 (n −1)
( x0 ) = yn0 . y
(8.11.1)
Положим
=
y1 ( x ) y=
( x ), y2 ( x ) y/ ( x=
),..., yn ( x ) y(
n −1)
( x ).
Кроме того, очевидно, что yk ( x ) = yk/−1 ( x ), например,
=
y2 ( x )=
y/ ( x ) y1/ ( x )=
, y3 ( x ) =
y// ( x )
y/ ( x ) ) ( =
y1/ ( x ) )
(=
/
/
y2/ ( x )
и так далее. Тогда уравнение (8.11.1) с заданными начальными условиями примет вид

y1/ ( x ) = y2 ( x ),


y2/ ( x ) = y3 ( x ),

...................


yn/ −1 ( x ) = yn ( x ),

 /
yn ( x ) = f ( x, y1 ( x ), y2 ( x ),..., yn ( x ) ). (8.11.2)
Начальные условия в новых обозначениях будут выглядеть так:
 y1 ( x0 ) = y10 ,

 y2 ( x0 ) = y20 ,

...................
 yn ( x0 ) = yn0 .

(8.11.3)
Чаще всего при необходимости решить уравнение (8.11.1) его
приводят к виду (8.11.2) и (8.11.3), а далее решают систему дифференциальных уравнений. Редко, но бывают случаи, когда сведение
253
к системе (8.11.2) не требуется. Обычно иными способами решают
дифференциальные уравнения специального вида.
Пример. Методом Рунге- Кутты решить дифференциальное урав y (1.5 ) = 1,
нение y// − xy/ + 2xy =
0.8 с начальными условиями  /
на
y (1.5 ) = 2,
отрезке x∈[1.5, 1.8] с шагом h = 0.1.
Сведем это уравнение к системе дифференциальных уравне/
ний первого порядка. Пусть
=
y ( x ) y=
1 ( x ), y ( x ) y2 ( x ). Тогда
(
)
/
y/ ( x ) = y1/ ( x ) = y2 ( x ), y// ( x ) = y/ ( x ) = y2/ ( x ) = 0.8 − 2xy1 + xy2 . Таким образом, нужная система имеет вид

y1/ ( x ) = y2 ( x ),
 /
0.8 − 2xy1 ( x ) + xy2 ( x ),
y2 ( x ) =
(8.11.4)
 y1 (1.5 ) = 1,

y2 (1.5 ) = 2.
(8.11.5)
при начальных условиях
Удобнее всего все вычисления для y1(x) и y2(x) помещать в одну
таблицу. Опишем подробно последовательность действий при заполнении этой таблицы при i = 0.
1. При i = 0 записываем x0 = 1.5, а в столбец (y1(xi), y2(xi)) заносим
y1(x0) = 1, y2(x0) = 2. Вычисляем
(1)

k0 =
=
) y=
y1 f1 ( x0 , y10 , y20
20 2,

 1
k0( )y =
f2 ( x0 , y10 , y20 ) =
0.8 − 2x0 y10 + x0 y20 =
0.8.
2

(1)
Эти величины k0 y заносим также в столбец ∆f, так как в формуле интегрирования они используются с множителем единица.
h
2. Для x = x0 + = 1.55 в столбце (y1(xi), y2(xi)) записываем
2
h (1)

y
 10 + 2 k0 y1 = 1 + 0.05 ⋅ 2 = 1.100000,

y20 + h k(1)y =+
2 0.05 ⋅ 0.8 =
2.040000.

2 0 2
Вычисляем для следующего столбца и записываем в него
(2)
k0
254
y1
h 
h 1  
h
2

= 2.040000, k0( )y = 0.8 − 2 ⋅  x0 +  ⋅  y10 + k0( )y  +  x0 +  ⋅
2
1
2 
2
2

 
h (1) 

 y20 + k0 y2 = 0.8 − 2 ⋅ 1.55 ⋅ 1.10 + 1.55 ⋅ 2.04= 0.552000.
2


(2)
(2)
В столбец ∆f записываем k0 y1 и k0 y2 с множителем два (см.
формулы (8.4.13)).
3. Следующие две строки таблицы заполняются аналогично пунh
1.55. Для столбца
кту два. Именно, в столбец x записываем x0 + =
2
(y1(xi), y2(xi)) находим
h (2)

1 + 0.05 ⋅ 2.040000 =
1.102000,
 y10 + 2 k0 y1 =

y20 + h k(2)y =
2 + 0.05 ⋅ 0.552000 =
2.027600.

2 0 2
Для следующего столбца вычисляем величины
( 3)
k0
( 3)
k0
y2=
y1
=
y20 +
h (2)
k y =
y2 =
2.027600,
2 0 2
0.8 − 2 ⋅ 1.55 ⋅ 1.102 + 1.55 ⋅ 2.0276= 0.526580.
( 3)
( 3)
Наконец, в столбец ∆f ставим числа 2k0 y1 и 2k0 y2 .
4. В столбец записываем x0 + h = 1.60. В столбец (y1(xi), y2(xi)) записываем
 y + hk( 3) =+
1.202760,
 10
0 y1 1 0.1 ⋅ 2.027600 =

3
y20 + hk0( )y =+
2 0.1 ⋅ 0.526580 =
2.052658.
2

Далее вычисляем коэффициенты
(4)
k0 y=
y=
2 2.052658,
1
(4)
k0
y2=
0.8 − 2 ⋅ 1.60 ⋅ 1.202760 + 1.60 ⋅ 2.052658= 0.235421.
Записываем эти же значения в столбец ∆f.
(1−4 ) и
5. Используя найденные значения коэффициентов k0
y1
(1−4 ) вычисляем
k0
y2
1  (1)
(2)
( 3)
(4) 
=
∆y1
 k y + 2k0 y1 + 2k0 y1 + k0=
y1 
6 0 1

1
=
(2.000000 + 4.080000 + 4.055200 + 2.052658=) 2.031310.
6
Аналогично ∆y2 = 0.532096.
255
6. Для i = 1 находим
x1 = x0 + h = 1.60, y1 ( x1 ) = y1 ( x0 ) + ∆y1 = 1 + 2.031310 = 3.031310,
y2 ( x1 ) = y2 ( x0 ) + ∆y2 = 2 + 0.532096 = 2.532096.
Далее все вычисления повторяются до достижения x = xn = 1.8.
Результаты помещены в следующую таблицу:
i
x
0
1.50
1.55
1.55
1.60
1
1.60
1.65
1.65
1.70
2
1.70
1.75
1.75
(1−4 )
∆f
1
2
1.100000
2.040000
1.102000
2.027690
1.202760
2.052658
3.031310
2
0.8
2.040000
0.552000
2.027600
0.526580
2.052658
0.235421
2.532096
2
0.8
4.080000
1.104000
4.055200
1.053160
2.052658
0.235421
2.532096
2.532096
-4.864838
-4.864838
(y1(xi),
y2(xi))
ki
4.727786
1.80
2.288854
4.577708
-5.844510
-11.689020
3.145753
1.996629
3.993258
1.996629
-6.286547
-12.573094
3.230973
1.903441
1.903441
2.167751
1.903441
-6.949459
-6.949459
-6.012735
5.199061
-3.480639
-3.480639
-3.480639
-22.793893 -22.793893
5.025029
-4.620334
-4.620334
-24.642168 -49.284336
4.968044
-4.712747
-5.964185
0.513897
-28.264811
256
2.031310
0.532096
2.288854
-9.240668
-9.425494
-5.964185
-4.685164
-5.964185 -26.955562 -26.955562 -24.784118
3
1
∑ αk
6
3.157915
-4.712747 -24.835461 -49.670922
1.80
∆=
y
§ 8.12. Лабораторная работа № 10.
Численное интегрирование систем
дифференциальных уравнений первого порядка в пакете
Mathcad
Задача Коши для отдельного дифференциального уравнения
решается сравнительно редко. Чаще приходится интегрировать
систему обыкновенных дифференциальных уравнений. Дифференциальные уравнения высших порядков также легко сводятся к системе уравнений. Если задано уравнение
n
n −1
y( ) = f x, y x , y/ x ,..., y( ) x
(
( )
( )
( )
)
с начальными условиями
( ) x
/
=
y ( x0 ) y=
=
( 0 ) yn0 ,
10 , y ( x0 ) y20 ,..., y
n −1
то стандартная замена переменных
=
y1 ( x ) y=
( x ), y2 ( x ) y/ ( x=
),..., yn ( x ) y(
n −1)
(x)
приводит это уравнение к системе n дифференциальных уравнений
первого порядка:

y1/ ( x ) = y2 ( x ),


y2/ ( x ) = y3 ( x ),

.....................


yn/ −1 ( x ) = yn ( x ),

 /
yn ( x ) = f ( x, y1 ( x ), y2 ( x ),..., yn ( x ) ) с начальными условиями
(8.12.1)
=
y1 ( x0 ) y=
=
yn ( x0 ) yn0 .
10 , y2 ( x0 ) y20 ,...,
Интегрирование систем дифференциальных уравнений в пакете
Mathcad проводится теми же функциями, которые описаны в предыдущей лабораторной работе, поскольку задача Коши для уравнений сводится при использовании этих же функций к решению
задачи Коши для систем.
Численное решение этой задачи состоит в построении таблицы приближенных значений yi,1, yi,2 ,..., yi,k , i = 1,2,...,n решения
y1 ( x ), y2 ( x ),..., yn ( x ) на отрезке [x0, xk] в узлах сетки x0, x1,…, xk.
257
Пусть
Y ( x ) = ( y1 ( x ), y2 ( x ),..., yn ( x ) ) ,
T
T
Y 0 = ( y10 , y20 ,..., yn0 ) ,
(
Y / ( x ) = y1/ ( x ), y2/ ( x ),..., yn/ ( x )
(
)
T
,
)
F x, Y = ( f1 ( x, y1,..., yn ), f2 ( x, y1,..., yn ),..., fn ( x, y1,..., yn ) ) ,
T
где Y ( x ) – решение системы, Y 0 – вектор начальных условий;
F x, Y – вектор правых частей системы. Тогда исходная система
дифференциальных уравнений первого прядка (8.12.1) в векторной
форме перепишется в виде
(
)
(
)
Y / = F x, Y ,


 Y ( x0 ) = Y 0 .
(8.12.2)
Рассмотрим пример. Пусть x∈[1,5],
 y/ = sin ( xy1y2 y3 ),
y1 (1) = 0,
 1
 /
− cos ( xy1 + y3 ), y2 (1) =
−0.3,
y2 =
 /
−( y + y + y )
y3 (1) = 1.
 y3 = e 1 2 3 ,
Воспользуемся всеми встроенными программами интегрирования систем обыкновенных дифференциальных уравнений, которыми располагает система Mathcad.
Введем программу вычислений.
ORIGIN: = 1
a: = 1 b: = 5
 0.5 
y :=  −0.3 

 1


 sin ( x ⋅ y1 ⋅ y2 ⋅ y3) 


−cos ( x ⋅ y1 + y3) 
 exp − y + y + y 
 ( 1 2 3) 

f ( x , y) := 
258
z: = rkfixed(y,a,b,10,f)
1
z=
2
3
4
1
1
0.5
-0.3
1
2
1.4
0.43
-0.282
1.117
3
1.8
0.36
-0.191
1.224
4
2.2
0.318
-0.047
1.315
5
2.6
0.342
0.163
1.386
6
3
0.543
0.493
1.434
7
3.4
0.78
0.798
1.458
8
3.8
0.654
0.998
1.476
9
4.2
0.441
1.339
1.492
10
4.6
0.34
1.707
1.506
5
0.292
2.048
1.516
11
z1: = Rkadapt(y,a,b,10,f)
1
2
3
4
1
1
0.5
-0.3
1
2
1.4
0.43
-0.282
1.117
3
1.8
0.36
-0.191
1.224
4
2.2
0.318
-0.047
1.315
z1 = 5
2.6
0.342
0.163
1.386
6
3
0.545
0.495
1.434
7
3.4
0.796
0.81
1.458
8
3.8
0.642
1.036
1.475
9
4.2
0.42
1.39
1.491
10
4.6
0.275
1.781
1.505
5
0.203
2.13
1.514
3
4
11
z2: = Bulstoer(y,a,b,10,f)
1
z2 =
2
1
1
0.5
-0.3
1
2
1.4
0.43
-0.282
1.117
3
1.8
0.36
-0.191
1.224
4
2.2
0.318
-0.047
1.315
5
2.6
0.342
0.163
1.386
6
3
0.545
0.495
1.434
7
3.4
0.795
0.809
1.458
8
3.8
0.642
1.036
1.475
9
4.2
0.42
1.39
1.491
10
4.6
0.275
1.781
1.505
5
0.203
2.13
1.514
11
259
Приведены результаты вычислений по всем трем используемым
программам и графики решений.
3
z
z
z
〈2 〉
〈3 〉
2
〈4 〉
z2
z2
z2
〈2 〉
1
〈3 〉
〈4 〉
0
−1
1
2
z
3
〈1 〉
4
5
Последняя функция Bulstoer решает задачу Коши на отрезке
[a, b] методом Булирша – Штера. Он является методом рациональной экстраполяции, главным достоинством которого является то,
что для достижения высокой точности не требуется многократного перевычисления правых частей интегрируемых уравнений. Это
особенно удобно, когда правые части уравнений сложны. Основная
идея метода рациональной экстраполяции заключается в следующем. Сначала находится некоторое приближенное решение рассматриваемых уравнений в точках hk, например, по методу Эйлера;
затем рассчитывается улучшенное приближение путем экстраполяции рациональными функциями, например, многочленами по специальным вычислительным схемам.
Для сложных систем, насчитывающих десятки дифференциальных уравнений, основной выигрыш при применении метода Булирша – Штера, помимо точности, заключается в заметном сокращении времени вычислений.
260
Видно, что функция rkfixef по y1 и y2 на конце интервала интегрирования дает уже неудовлетворительный результат, что объясняется слишком большим шагом интегрирования h = 0.5.
Рассмотрим еще один метод интегрирования так называемых
«жестких» систем дифференциальных уравнений. Эти системы
характерны тем, что, несмотря на медленное изменение функций,
определяющих решение, расчеты приходится вести с очень мелким
шагом. Все попытки увеличить шаг и тем самым уменьшить время
решения задачи приводят лишь к катастрофически большому росту
погрешности. Термин «жесткий» происходит из механики, где численное решение некоторых систем дифференциальных уравнений
требует разного шага интегрирования по разным искомым функциям. Численное решение «жестких» задач требует применения специальных неявных методов.
В пакете Mathcad подобные системы решаются с помощью функций Stiffb и Stiffr, которые имеют те же параметры, что и функция
rkfixed. Кроме того, задается информация о скорости изменения
вектора правых частей уравнений (8.12.2), то есть матрица Якоби
правых частей:
( )
 ∂f1 x, y


∂x

 ∂f2 x, y
J ( x, y ) = 
∂x

...

 ∂fn x, y


∂x

( )
( )
( )
∂f1 x, y
∂y1
( )
∂f2 x, y
∂y1
...
( )
∂fn x, y
∂y1
( )
∂f1 x, y 

∂yn 

∂f2 x, y 
...

∂yn .

...
...

∂fn x, y 

...
∂yn 
...
( )
( )
261
Введем следующую часть программы:
z3: = Stiffb(y,a,b,10,f,J)
z3 =
1
3
4
1
0.5
-0.3
1
2
1.4
0.43
-0.282
1.117
3
1.8
0.36
-0.191
1.224
4
2.2
0.318
-0.047
1.315
5
2.6
0.342
0.163
1.386
6
3
0.545
0.495
1.434
7
3.4
0.796
0.809
1.458
8
3.8
0.643
1.036
1.475
9
4.2
0.42
1.39
1.491
10
4.6
0.275
1.781
1.505
5
0.203
2.13
1.514
2
3
4
11
z4: = Stiffr(y,a,b,10,f,J)
z4 =
2
1
1
1
1
0.5
-0.3
1
2
1.4
0.43
-0.282
1.117
3
1.8
0.36
-0.191
1.224
4
2.2
0.318
-0.047
1.315
5
2.6
0.342
0.164
1.387
6
3
0.548
0.497
1.435
7
3.4
0.796
0.811
1.459
8
3.8
0.641
1.038
1.477
9
4.2
0.418
1.392
1.493
10
4.6
0.274
1.783
1.506
5
0.202
2.132
1.516
11
3
z3
z3
z3
z4
z4
z4
〈2〉
〈3〉
2
〈4〉
〈2〉
1
〈3〉
〈4〉
0
−1
262
1
2
〈1〉
z3
3
4
5
Функция Stiffb использует алгоритм Булирша – Штера, функция Stiffr – алгоритм Розенброка, подробно описанный в специальной литературе.
Приведем, наконец, текст подпрограммы, реализующий метод
Рунге – Кутты четвертого порядка с постоянным шагом для систем
дифференциальных уравнений с параметрами, полностью аналогичными параметрам функции rkfixed:
z5: = RGKsyst(y,a,b,10,f)
1
2
3
4
1
1
0.5
-0.3
1
2
1.4
0.43
-0.282
1.117
3
1.8
0.36
-0.191
1.224
4
2.2
0.318
-0.047
1.315
z5 = 5
2.6
0.342
0.163
1.386
6
3
0.543
0.493
1.434
7
3.4
0.78
0.798
1.458
8
3.8
0.654
0.998
1.476
9
4.2
0.441
1.339
1.492
10
4.6
0.34
1.707
1.506
5
0.292
2.048
1.516
11
Сравнение матриц z и z5 показывает, что результаты расчета по
подпрограммам rkfixed и RGKsyst практически одинаковы.
Задание № 1. С помощью любой из разобранных в лабораторной
работе подпрограмм решить задачу Коши для системы дифференциальных уравнений на заданном отрезке:
1
 /
 y1 = 2 + sin y y ,
( 1 3)

y1 ( 0 ) = 1,
 /
3
1. =
, x ∈ [0, 2], y2=
( 0 ) 0,
y2
3 + cos ( y1y2 y3 )

y3 ( 0 ) = 0.

1
/
,
 y3 =
2 + e− y1y2

 y/ 3 xy1y3 + y2 ,
=
y1 ( 0.5 ) = −2,
 1
 / 3
−1,
2. y2 =y1 + y2 + y3 , x ∈ [0.5, 0.1], y2 ( 0.5 ) =

/
sin y1
y3 ( 0.5 ) = 0.5.
,
 y3 = y2e
263


−( y1 + y2 )
/
,
 y1 = xe
y1 ( 0 ) = −1,

/
y2 = y1y2 y3 ,
x ∈ [0, 3], y2 ( 0 ) = 0.3,
3. 

y3 ( 0 ) = 0.45.
y/ sin  x  ⋅ y ,
=
2
 3
 y2 + 1 
 1


=
y/ xy1 + x2 y2 y3 ,
y1 ( 2 ) = 0,
 1

4.  y2/ =
0,
−y1 − y2 + y32 , x ∈ [2, 5], y2 ( 2 ) =
 /
y3 ( 2 ) = 1.
y3 ln 1 + y12 y22 ,
=
(
)
RGKsyst ( y , a , b , n , f) :=
h←
( b − a)
n
z1 , 1 ← a
k ← rows ( y)
for
i ∈ 1 ..
k
for
i ∈ 2 ..
n+1
z1 , i+1 ← yi
h1 ← zi−1 , 1 +
h
2
k1 ← f ( zi−1 , 1 , y)
T
yT ← k1
for
j ∈ 1 ..
(
y1 ← yT
k
〈j〉
)1
dj ← zi−1 , j+1 +
k2 ← f ( h1 , d)
h
⋅ y1
2
T
yT ← k2
for
j ∈ 1 ..
(
y1 ← yT
k
〈j〉
)1
dj ← zi−1 , j+1 +
k3 ← f ( h1 , d)
h
⋅ y1
2
T
yT ← k3
for
264
j ∈ 1 ..
(
k
y1 ← yT
〈j〉
)1
dj ← zi−1 , j+1 + h ⋅ y1
k4 ← f  h1 +

h
, d 
2

k3 ← f ( h1 , d)
T
yT ← k3
for
j ∈ 1 ..
k
〈 〉
y1 ← ( yT j ) 1
dj ← zi−1 , j+1 + h ⋅ y1
k4 ← f  h1 +

for
j ∈ 1 ..
dj ←
h

, d 
2

k
1
⋅ k1 j + 2 ⋅ ( k2 j + k3 j) + k4 j
6 
zi , j+1 ← zi−1 , j+1 + h ⋅ dj
yj ← zi , j+1
zi , 1 ← h1 +
z
h
2
 y/ = 1 + y2 + y2 ,
1
2
1,
y1 ( −1) =
 1
 /
5.  y2 =sin ( xy1y2 y3 ), x ∈ [ −1, 1], y2 ( −1) =−1,
 /
y3 ( −1) =
−2.
− cos ( xy1 + y3 ),
y3 =

 y/ = e−( y1 + y2 + y3 ) ,
y1 ( 0 ) = −1,
1


6.  y2/ =
arctg ( xy1y3 ),
x ∈ [0, 3], y2 ( 0 ) =
−1,
 /
y3 ( 0 ) = −2.
y3 = sin ( arctg ( y1y3 ) ),
 =
y/ 2y1 + y2 y3 ,
y1 ( 0 ) = 0.2,
 1

7.  y2/ = y1y2 y3 + y12 , x ∈ [0, 4], y2 ( 0 ) = 0,
 /
2
y3 ( 0 ) = 0.
y3 = xy1 + y2 − y3 ,
 y/ sin ( y1y2 + y3 ),
=
y1 ( 0.3 ) = −0.4,
 1

sh ( xy1 + y2 y3 ), x ∈ [0.3, 2], y2 ( 0.3 ) =
−0.4,
8.  y2/ =
 /
y3 ( 0.3 ) = 1.
=
y3 ch ( xy1y2 + y3 ),
y/ = xe−( y1 + y2 ) ,
y1 ( 0 ) = 0,
 1

9.  y2/ =
1,
y1y2 y3 ,
x ∈ [0, 3], y2 ( 0 ) =
 /
2
2
y3 ( 0 ) = −3.
 y=
3 x + y2 ,
265
y/ = cos ( y1y2 y3 ),
y1 ( 2 ) = 0.5,
 1
 /
y2 ( 2 ) = 1,
10.  y2 = y1 + y2 + y3 , x ∈ [2, 5],
 /
y3 ( 2 ) = −0.3.
=
 y3 sin ( y1 + y3 ),
 y/ sin ( y1 + y3 ),
=
y1 ( 0 ) = 0,
 1
 /
11. y2 = cos ( y1y2 y3 ), x ∈ [0, 3], y2 ( 0 )= 1,
 /
y3 ( 0 ) = −1.
 y3 = y1 + y2 + y3 ,
(
)
=
y/ ln 1 + y12 y22 ,
 1
y1 ( 0 ) = 1,
 /
2
12. y2 =
1,
xy1 + x y2 y3 , x ∈ [0, 2], y2 ( 0 ) =
 /
2
=
0
0
.
y
3( )
−y1 − y2 − y3 ,
 y3 =

=
y/ 2y1 + y2 y3 ,
y1 ( −2 ) =
−1,
 1
 /
2
13.  y2 =y1y2 y3 + y1 , x ∈ [ −2, 2], y2 ( −2 ) =−5,
 /
1.
y3 ( −2 ) =
2
2
y3 = 1 + y1 + y2 ,
 y/ = y y y ,
1 2 3
y1 ( 0 ) = 0,
1


/
2
2
14.  y2 =
x + y2 ,
x ∈ [0, 2], y2 ( 0 ) =
−0.5,
 /
2
2
0
y
=
3 ( ) 0.5.
=
y3 ln x + y1 ,
(
)
 y/ sin ( y1 + y3 ),
=
1,
y1 ( −1) =
 1
 /
x ∈ [ −1, 1], y2 ( −1) =−1,
15.  y2 =cos ( y1y2 y3 ),
 /
y3 ( −1) =
−2.
− cos ( xy1 + y3 ),
y3 =
 /
1
,
y1 = arctg
2
1 + x + y22

y1 (1) = −1,

1
/
16.  y
1) 0,
,
=
x ∈ [1, 3], y2 (=
2
1 + x2 + y22

y3 (1) = 1.
 /
3
 y3 =
,

1 + y12 + y22 + y32
266

 x 
y1/ sin 
=
⋅y ,
 1 + y2  2

1 

y1 ( 0 ) = 1,

x ∈ [0, 3], y2 ( 0 ) =1,
17.  y2/ =3 xy1y3 + y2 ,
 / 3
y3 ( 0 ) = 1.
 y3 = y1 + y2 + y3 ,

 /
y = sin ( y y y ),
1 2 3
y1 (1) = 0,
 1
 /
2
18.  y2 =
0,
ln x + y32 , x ∈ [1, 4], y2 (1) =

y3 (1) = 0.
 y3/ = e− y1y2y3 ,
(
)
 y/ = y2esin y1 ,
y1 ( 0 ) = 0,
 1

cos xy
19. y2/ = y3 e ( 2 ) , x ∈ [0, 2], y2 ( 0 ) = 0,
 /
sin( y1y2y3 )
y3 ( 0 ) = 0.
,
 y3 = e
 y/ sh ( xy1 + y2 y3 ),
=
y1 (1) = 0,
 1

ch ( xy1y2 + y3 ), x ∈ [1, 4], y2 (1) =
−1,
20. y2/ =
 /
y3 (1) = 0.4.
=
 y3 sin ( y1y2 + y3 ),
y/ = xy1 + y2 − y32 ,
y1 ( −1) =
−1,
 1
 /
2
1
3
1
,
,
,
y
=
y
+
y
y
x
∈
−
y
−
=
21.  2
[
] 2 ( ) 1,
1
2 3
 /
2
2.
y3 ( −1) =
=
 y3 y1y2 y3 + y1 ,
=
y/ 2y1 + y2 y3 ,
y1 ( −1) =
−1,
 1
 /
2
22.  y2 =y1y2 y3 + y1 , x ∈ [ −1, 2], y2 ( −1) =−5,
 /
1.
y3 ( −1) =
2
2
y3 = 1 + y1 + y2 ,
(
)
y/= ln x + y2 + y2 ,
1
3
 1
y1 (1) = 0,
 /
23.  y=
1) 1,
y2 (=
2 sh ( xy1y2 ) + y3 , x ∈ [1, 4],
 /
2
y3 (1) = −1.
 y3 =y1 + 3y2 − xy3 ,

267
=
y/ xy1 + x2 y2 y3 ,
y1 ( 0 ) = −0.3,
 1
 /
2
−y1 − y2 + y3 , x ∈ [0, 3], y2 ( 0 ) =
0.5,
24.  y2 =
 /
−( y1 + y2 )
y3 ( 0 ) = 1.
,
 y3 = xe
 y/ = arctg ( xy y ),
1 3
y1 (1) = 0,
 1
 /
25. y2 =
−0.3,
sin ( arctg ( y1y3 ) ), x ∈ [1, 4], y2 (1) =

y3 (1) = 1.
 y3/ = e−( y1 + y2 + y3 ) ,
y/ x ( y + y sin y ),
=
1
2
3
y1 (1) = 0,
 1
 /
x cos ( y2 + y3 ), x ∈ [1, 3], y2 (1) =
26.  y2 =
−0.5,

y3 (1) = 0.5.
y3/ ln x2 + y12 ,
=
(
)
 y/ = y y y ,
1 2 3
y1 ( 0 ) = 0,
1


/
27.  y2 =
x2 + y12 ,
x ∈ [0, 4], y2 ( 0 ) =
−0.5,
 /
2
2
y3 ( 0 ) = 0.5.
=
y3 ln x + y2 ,
(
)
 =
y/ 2y1 + y2 y3 ,
y1 ( 0 ) = 0.2,
 1

28.  y2/ = y1y2 y3 + y12 , x ∈ [0, 4], y2 ( 0 ) = 0,
 /
2
y3 ( 0 ) = 0.
y3 = xy1 + y2 − y3 ,
(
)
=
y1/ ln x2 + y12 ,

0,
y1 ( −1) =
 /
29.  y2 =arctg ( xy1y3 ),
x ∈ [ −1, 3], y2 ( −1) =−1,
 /
1.
y3 ( −1) =
y3 = sin ( arctg ( y1y3 ) ),

 y/ sin y1 ⋅ cos3 y2 ,
=
0,
y1 ( −1) =
 1
 /
30.=
( −1) 0,
 y2 x cos y1 ⋅ cos y3 , x ∈ [ −1, 3], y2=
 /
0.
y3 ( −1) =
y=
3 sin ( x − y2 − y3 ),
268
§ 8.13. Лабораторная работа № 10.
Численное интегрирование систем
дифференциальных уравнений первого порядка в пакете Matlab
Для систем дифференциальных уравнений первого порядка при
их интегрировании используются те же встроенные подпрограммыфункции, что и для отдельных уравнений первого порядка. Решим
с их помощью ту же систему, как в предыдущем параграфе. Именно
 y=
 0.5 
1′ sin(x ⋅ y1 ⋅ y2 ⋅ y3 ),



− cos(x ⋅ y1 + y3 ), с начальными условиями y =  −0.3 .
 y2′ =

 1.0 


y3′ = exp(−(y1 + y2 + y3 ))
Приведём как всегда в начале лабораторной работы тексты двух
подпрограмм. Одна из них вычисляет правые части системы дифференциальных уравнений, вторая интегрирует систему методом Рунге-Кутты четвёртого порядка, так же как встроенная подпрограмма
пакета Matlab – ode45.
function f=fnfun(x,y)
%Подпрограмма fnfun вычисляет правые части интегрируемой
%системы дифференциальных уравнений. x, y – параметры сис%темы, вектор-столбец f содержит значения правых частей.
f=zeros(3,1);
f(1)=sin(x*y(1)*y(2)*y(3));
f(2)=-cos(x*y(1)+y(3));
f(3)=exp(-(y(1)+y(2)+y(3)));
end
function z=RGKsyst(a,b,n,y)
%Подпрограмма RGKsyst интегрирует систему обыкновенных
%дифференциальных уравнений методом Рунге-Кутты четвёр%того порядка с постоянным шагом. Параметры: a, b %промежуток интегрирования, n - число точек на [a, b],
%y - вектор начальных условий. В массиве z находится
%вектор-столбец значений аргумента и векторы-столбцы
%значений всех функций на заданные значения аргумента.
h=(b-a)/n;
z(1,1)=a;
[k,k1]=size(y);
for i=1:k
z(1,i+1)=y(i);
end;
269
for i=2:n+1
h1=z(i-1,1)+h/2;
k1=fnfun(z(i-1,1),y);
yT=k1';
for j=1:k
y1=yT(1,j);
d(j)=z(i-1,j+1)+h/2*y1;
end;
k2=fnfun(h1,d);
yT=k2';
for j=1:k
y1=yT(1,j);
d(j)=z(i-1,j+1)+h/2*y1;
end;
k3=fnfun(h1,d);
yT=k3';
for j=1:k
y1=yT(1,j);
d(j)=z(i-1,j+1)+h*y1;
end;
k4=fnfun(h1+h/2,d);
for j=1:k
d(j)=1/6*(k1(j)+2*(k2(j)+k3(j))+k4(j));
z(i,j+1)=z(i-1,j+1)+h*d(j);
y(j)=z(i,j+1);
end;
z(i,1)=h1+h/2;
end;
end
Далее следует текст основной программы и распечатка полученных результатов.
>>
>>
>>
xx
clear
[x,Y]=ode45(@fnfun,[1 5],[0.5 -0.3 1.0]);
xx=x'
= 1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000
1.8000 1.9000 2.0000 2.1000 2.2000 2.3000 2.4000 2.5000
2.6000 2.7000 2.8000 2.9000 3.0000 3.0612 3.1223 3.1835
3.2447 3.3059 3.3670 3.4282 3.4894 3.5409 3.5924 3.6439
3.6954 3.7532 3.8109 3.8686 3.9263 3.9801 4.0339 4.0878
4.1416 4.1954 4.2493 4.3031 4.3569 4.4025 4.4481 4.4937
270
4.5393
4.8366
5.0000
>>YY=Y
YY= 0.5000
0.4842
0.4670
0.4487
0.4300
0.4112
0.3929
0.3756
0.3597
0.3455
0.3336
0.3244
0.3183
0.3159
0.3182
0.3261
0.3416
0.3670
0.4067
0.4651
0.5453
0.6045
0.6648
0.7190
0.7607
0.7863
0.7963
0.7924
0.7792
0.7638
0.7443
0.7216
0.6965
0.6665
0.6348
0.6020
0.5686
4.5775 4.6157 4.6538 4.6920 4.7281 4.7643 4.8005
4.8720 4.9073 4.9427 4.9780 4.9835 4.9890 4.9945
-0.3000
-0.3039
-0.3018
-0.2943
-0.2818
-0.2648
-0.2439
-0.2193
-0.1914
-0.1602
-0.1258
-0.0882
-0.0471
-0.0021
0.0473
0.1021
0.1631
0.2317
0.3100
0.3985
0.4953
0.5564
0.6153
0.6692
0.7164
0.7570
0.7925
0.8248
0.8558
0.8822
0.9094
0.9382
0.9689
1.0062
1.0466
1.0904
1.1374
1.0000
1.0300
1.0596
1.0887
1.1172
1.1451
1.1722
1.1984
1.2238
1.2481
1.2715
1.2937
1.3147
1.3346
1.3532
1.3704
1.3863
1.4006
1.4133
1.4243
1.4336
1.4385
1.4427
1.4465
1.4500
1.4531
1.4561
1.4590
1.4617
1.4641
1.4663
1.4686
1.4708
1.4733
1.4758
1.4783
1.4807
271
>>
>>
>>
zz
0.5374
1.1839
1.4829
0.5066
1.2327
1.4850
0.4767
1.2834
1.4871
0.4480
1.3356
1.4892
0.4205
1.3888
1.4912
0.3948
1.4424
1.4932
0.3715
1.4963
1.4951
0.3501
1.5499
1.4969
0.3329
1.5950
1.4984
0.3173
1.6397
1.4999
0.3033
1.6838
1.5013
0.2904
1.7273
1.5027
0.2802
1.7633
1.5038
0.2707
1.7989
1.5049
0.2619
1.8340
1.5059
0.2538
1.8687
1.5069
0.2464
1.9012
1.5079
0.2394
1.9332
1.5088
0.2330
1.9649
1.5097
0.2269
1.9962
1.5106
0.2211
2.0265
1.5114
0.2156
2.0564
1.5122
0.2106
2.0859
1.5130
0.2057
2.1152
1.5138
0.2050
2.1197
1.5139
0.2042
2.1242
1.5140
0.2035
2.1287
1.5141
0.2027
2.1332
1.5143
a=1;
b=5;
n=10;
y0=[0.5;-0.3;1.0];
zz=RGKsyst(a,b,n,y0)
=
1.0000
0.5000
-0.3000
1.4000
0.4299
-0.2817
1.8000
0.3596
-0.1913
2.2000
0.3182
-0.0471
2.6000
0.3416
0.1628
3.0000
0.5428
0.4928
3.4000
0.7797
0.7984
3.8000
0.6543
0.9981
4.2000
0.4413
1.3388
272
1.0000
1.1173
1.2238
1.3148
1.3864
1.4338
1.4580
1.4756
1.4922
4.6000
5.0000
0.3401
0.2917
1.7065
2.0479
1.5059
1.5158
Задание № 2. С помощью любой из разобранных в лабораторной
работе подпрограмм решить задачу Коши для системы дифференциальных уравнений, приведённых на стр. 263–268 на заданном
там же отрезке.
273
Библиографический список.
1. Амосов А. А., Дубинский Ю. А., Копченова Н. В. Вычислительные методы для инженеров. М.: Высшая школа, 1994.
2 Демидович Б. П., Марон И. А. Основы вычислительной математики. М.: Наука, 1970.
3. Бахвалов Н. С., Лапин А. В., Чижонков Е. В. Численные методы в задачах и упражнениях. М.: Высшая школа, 2000.
4. Mathcad 6.0 Plus. Финансовые, инженерные и научные расчеты в среде Windows 95. М.: Филинъ, 1996.
5. Плис А. И., Сливина Н. А. Mathcad: математический практикум. М.: Финансы и статистика, 1999.
6. Воробьева Г. Н., Данилова А. Н. Практикум по вычислительной математике. М.: Высшая школа, 1990.
7. Потёмкин В. Г. Вычисления в среде Matlab. М.: ДИАЛОГМИФИ, 2004.
8. Шапорев С. Д. Методы вычислительной математики и их приложения. Спб.: СМИОПресс, 2003.
9. Дэннис Дж., Шнабель Р. Численные методы безусловной оптимизации и решения нелинейных уравнений. М.: Мир, 1988.
274
СОДЕРЖАНИЕ
1. ЭЛЕМЕНТАРНАЯ ТЕОРИЯ ПОГРЕШНОСТЕЙ;
ВЫЧИСЛИТЕЛЬНЫЕ ЗАДАЧИ, МЕТОДЫ И АЛГОРИТМЫ.........
§ 1.1. Источники и классификация погрешностей
результата численного эксперимента............................ § 1.2. Погрешности чисел.................................................... § 1.3. Погрешности арифметических операций....................... § 1.4. Погрешности функций [3]........................................... § 1.5. Определение абсолютной
и относительной погрешностей приближенных чисел.
Оценка погрешностей результата................................. § 1.6. Лабораторная работа № 1.
Вычисление абсолютной и относительной погрешности
функции при заданных значениях аргумента
в пакетах Mathcad и Matlab.......................................... § 1.7. Корректность вычислительной задачи [1]...................... § 1.8. Обусловленность вычислительной задачи [1].................. § 1.9. Вычислительные методы, их классификация................. 2. ПРИБЛИЖЕНИЕ ФУНКЦИЙ................................................
§ 2.1. Задача приближения функций..................................... § 2.2. Интерполяция обобщенными многочленами.................. § 2.3. Полиномиальная интерполяция. Многочлен Лагранжа... § 2.4. Погрешность интерполяции......................................... § 2.5. Конечные разности и их свойства................................. § 2.6. Разделенные разности и их свойства............................. § 2.7. Интерполяционный многочлен Ньютона....................... § 2.8. Лабораторная работа № 2.
Интерполирование и экстраполирование данных.
Интерполяционные многочлены Лагранжа и Ньютона
в пакете Mathcad [4, 5]................................................ § 2.9. Лабораторная работа № 2.
Интерполяционные многочлены Лагранжа и Ньютона
в пакете Matlab [7]...................................................... § 2.10. Интерполяционные формулы Гаусса,
Стирлинга и Бесселя................................................... 3. МЕТОД НАИМЕНЬШИХ КВАДРАТОВ И СПЕЦИАЛЬНЫЕ
ИНТЕРПОЛЯЦИОННЫЕ МНОГОЧЛЕНЫ [8]..............................
§ 3.1. Постановка задачи и вывод формул
метода наименьших квадратов..................................... § 3.2. Лабораторная работа № 3.
Аппроксимация функции одного переменного
по методу наименьших квадратов в пакете Mathcad........ § 3.3. Лабораторная работа № 3.
Аппроксимация функции одного переменного
по методу наименьших квадратов в пакете Matlab........... § 3.4. Глобальная полиномиальная интерполяция................... 3
3
4
6
8
11
22
25
26
27
30
30
30
31
34
35
37
39
40
53
62
67
67
73
81
84
275
§ 3.5. Многочлены Чебышева............................................... § 3.6. Решение задачи минимизации оценки погрешности........ § 3.7. Локальная интерполяция............................................ § 3.8. Сплайны, их свойства и построение.............................. § 3.9. Погрешность приближения кубическими сплайнами...... § 3.10. Лабораторная работа № 4.
Аппроксимация функций кубическими сплайнами
в пакете Mathcad........................................................ § 3.11. Лабораторная работа № 4.
Аппроксимация функций кубическими сплайнами в пакете
Matlab...........................................................................
4. ЧИСЛЕННОЕ ДИФФЕРЕНЦИРОВАНИЕ
И ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ.........................................
§ 4.1. Простейшие формулы численного дифференцирования
для первой производной.............................................. § 4.2. Формулы численного дифференцирования
для второй производной.............................................. § 4.3. Формулы численного дифференцирования,
основанные на интерполяции алгебраическими
многочленами............................................................ § 4.4. Обусловленность формул численного дифференцирования
........................................................................... 121
§ 4.5. Простейшие квадратурные методы
численного интегрирования......................................... § 4.6. Оценка погрешностей простейших квадратурных
формул..................................................................... § 4.7. Квадратурные формулы интерполяционного типа........... § 4.8. Квадратурные формулы Гаусса.................................... § 4.9. Лабораторная работа № 5.
Численное дифференцирование
и численное интегрирование функций в пакете Mathcad.. § 4.10. Лабораторная работа № 5.
Численное дифференцирование
и численное интегрирование функций в пакете Matlab.... 5. РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ
АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ...........................................
§ 5.1. Нормы векторов и матриц и их свойства........................ § 5.2. Обусловленность задачи решения
системы линейных алгебраических уравнений............... § 5.3. Метод Гаусса (схема единственного деления).................. § 5.4. Метод прогонки......................................................... § 5.5. Метод простых итераций............................................. § 5.6. Сходимость метода простых итераций........................... § 5.7. Метод Зейделя........................................................... § 5.8. Сходимость метода Зейделя......................................... § 5.9. Лабораторная работа № 6.
Решение систем линейных алгебраических уравнений
методом простых итераций в пакете Mathcad................. 276
86
90
92
93
100
103
112
116
116
119
120
124
129
132
133
136
142
147
147
150
151
155
158
160
161
162
165
§ 5.10. Лабораторная работа № 6.
Решение систем линейных алгебраических уравнений
методом простых итераций в пакете Matlab.................... 6. ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ
НЕЛИНЕЙНЫХ УРАВНЕНИЙ И СИСТЕМ.................................
§ 6.1. Решение нелинейных уравнений [9].............................. § 6.2. Метод Ньютона для уравнений..................................... § 6.3. Сходимость метода Ньютона и трудности его применения.. § 6.4. Метод Ньютона решения систем нелинейных уравнений... § 6.5. Сходимость метода Ньютона
для систем нелинейных уравнений............................... § 6.6. Модификации метода Ньютона.................................... § 6.7. Лабораторная работа № 7.
Решение систем нелинейных уравнений
методом Ньютона в пакете Mathcad............................... § 6.8. Лабораторная работа № 7.
Решение систем нелинейных уравнений
методом Ньютона в пакете Matlab................................. 7. ОДНОМЕРНАЯ ОПТИМИЗАЦИЯ ФУНКЦИЙ [9].....................
§ 7.1. Необходимые условия минимума
и локализация отрезка минимизации исходной функции..
§ 7.2. Обусловленность задачи минимизации.......................... § 7.3. Методы прямого поиска. Оптимальный пассивный поиск..
§ 7.4. Методы прямого поиска. Метод деления отрезка пополам.. § 7.5. Методы прямого поиска. Метод Фибоначчи.................... § 7.6. Методы прямого поиска. Метод золотого сечения............ § 7.7. Эффективность методов прямого поиска........................ § 7.8. Методы минимизации гладких функций....................... § 7.9 Лабораторная работа № 8.
Минимизация функций одного переменного в пакете
Mathcad.................................................................... § 7.10. Лабораторная работа № 8.
Минимизация функций одного переменного
в пакете Matlab.......................................................... 8. ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ ЗАДАЧИ КОШИ
ДЛЯ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
И СИСТЕМ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ....................
§ 8.1. Задача Коши для дифференциального уравнения
первого порядка......................................................... § 8.2. Численные методы решения задачи Коши.
Основные понятия и определения................................. § 8.3. Решение с помощью рядов Тейлора............................... § 8.4. Методы Рунге – Кутты................................................ § 8.5. Анализ ошибок, возникающих при использовании
методов Рунге – Кутты................................................ § 8.6. Методы прогноза и коррекции...................................... § 8.7. Сравнение методов..................................................... 172
176
176
177
179
180
182
183
187
193
198
198
199
200
201
202
204
205
205
207
215
221
221
222
223
224
232
233
235
277
§ 8.8. Лабораторная работа № 9.
Методы интегрирования обыкновенных
дифференциальных уравнений в пакете Mathcad............ § 8.9. Лабораторная работа № 9.
Методы интегрирования обыкновенных
дифференциальных уравнений в пакете Matlab.............. § 8.10. Решение задачи Коши для систем обыкновенных
дифференциальных уравнений.................................... § 8.11. Сведение задачи Коши для уравнения n-го порядка
к задаче Коши для системы уравнений первого порядка.. § 8.12. Лабораторная работа № 10.
Численное интегрирование систем
дифференциальных уравнений первого порядка в пакете
Mathcad.................................................................... § 8.13. Лабораторная работа № 10.
Численное интегрирование систем
дифференциальных уравнений первого порядка
в пакете Matlab.......................................................... 269
Библиографический список.......................................................
274
278
238
247
251
253
257
Учебное издание
Шапорев Сергей Дмитриевич
ЧИСЛЕННЫЕ МЕТОДЫ
ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ
Учебное пособие
Публикуется в авторской редакции
Компьютерная верстка А. Н. Колешко
Сдано в набор 06.03.17. Подписано к печати 24.04.17. Формат 60 × 84 1/16.
Усл. печ. л. 12,61. Тираж 50 экз. Заказ № 158.
Редакционно-издательский центр ГУАП
190000, Санкт-Петербург, Б. Морская ул., 67
Документ
Категория
Без категории
Просмотров
18
Размер файла
5 183 Кб
Теги
05a7b321b2, shaporev
1/--страниц
Пожаловаться на содержимое документа