ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.04.2021
Просмотров: 733
Скачиваний: 1
> mdp(0.000001,6.0,6.5);
6.236101151
> mdp(0.000001,3.0,3.5);
3.253282547
2.7.2.
Метод хорд
> restart;
> hord:=proc(eps,a,b)
# eps — точность, с которой необходимо вычислить корни уравнений;
# a,b — границы отрезка, в котором находится один корень
local i,x0,x1,l,r;
# i — переменная цикла
# x0,x1 — два последовательных приближения к точному решению
# l,r — концы отрезка
# задаем левую и правую границы отрезка, который содержит корень
l:=a; r:=b;
# вычисление первого приближения к корню
x0:=l-(f(l)*(r-l))/(f(r)-f(l));
if f(x0)<>0 then
#переопределение границ отрезка
if f(l)*f(x0)<0 then r:=x0 else l:=x0 end if
else x0:=evalf(x0); print(x0) end if;
# вычисление второго приближения к корню
x1:=l-(f(l)*(r-l))/(f(r)-f(l));
for i from 1 while abs(x1-x0)>=eps do
if f(x1)<>0 then
# переопределение границ отрезка
if f(l)*f(x1)<0 then r:=x1 else l:=x1; end if
else x1:=evalf(x1); print(x1) end if;
x0:=x1;
# вычисление последующего приближения к корню
x1:=l-(f(l)*(r-l))/(f(r)-f(l));
end do;
x1:=evalf(x1); print(x1);
end proc;
# задаем функцию корни которой необходимо найти
> f:=x1-> x1ˆ 3-sin(x1);
11
# построение графика функции, для локализации корня функции
графическим способом
> plot(f(x),x=-1..1);
Рис. 5. График функции
f
(
x
) =
x
1
3
−
sin
x
1
Проверим работу процедуры
> hord(0.0001,-0.2,0.3);
0.
> hord(0.0001,0.8,1.0);
0.9286243615
> hord(0.0001,-1.0,-0.8);
-0.9286243615
2.7.3.
Метод Ньютона
> restart;
> newt:=proc(a,eps)
# a — левая граница отрезка, в котором находится один корень
# eps — точность, с которой необходимо вычислить корни уравнений
local i,x0,x1,df,y;
# i — переменная цикла
# x0, x1 — два последующих приближения к корню
# df — производная функции
f
(
x
) = 0
# y — переменная в уравнении производной от функции
f
(
x
)
# в качестве первого приближения к корню выбирается левая грани-
ца отрезка
12
x0:=a;
# нахождение производной функции в точке
df:=y->subs(x=y,diff(f(x),x));
x1:=evalf(x0-f(x0)/df(x0)); # второе приближение к корню
for i from 1 while abs(x1-x0)<eps do
x0:=x1;
# вычисление последующих приближений к корню
x1:=x0-f(x0)/df(x0);
end do;
x1:=evalf(x1); # вывод результата
end proc;
Зададим функцию корни которой необходимо найти
> f:=x-> exp(x)*xˆ 3-cos(x)*sin(x);
> plot(f(x),x=-2..1); # построение графика функции, для локализа-
ции корней функции графическим способом
Рис. 6. График функции
f
(
x
) =
x
3
e
x
−
cos
x
sin
x
Проверим работу процедуры
> newt(-1.1,0.0001);
-1.071336962
> newt(-0.1,0.0000001);
0.0031947103
> newt(0.5,0.00001);
0.7378792875
13
3.
Аппроксимация функций
3.1.
Постановка задачи
Пусть некоторая величина
y
является функцией аргумента
x
, но яв-
ная связь между
y
и
x
неизвестна (либо известная зависимость
y
=
f
(
x
)
слишком громоздка для численных расчетов). Допустим, что в результа-
те экспериментов получена таблица значений
{
x
i
, y
i
}
, требуется же по-
лучить значения
y
в других точках, отличных от узлов
x
i
. Эта проблема
решается в задаче о приближении (аппроксимации) функции: функцию
f
(
x
)
, явный вид которой неизвестен, требуется приближенно заменить
некоторой функцией
ϕ
(
x
)
(наз. аппроксимирующей), так чтобы откло-
нение от
f
(
x
)
в заданной области было наименьшим. Построенная таким
образом аппроксимация называется точечной (примеры: интерполирова-
ние, среднеквадратичное приближение и т.д.)
Одним из основных типов точечной аппроксимации является интер-
полирование: для заданной функции
f
(
x
)
строится интерполирующая
функция
ϕ
(
x
)
, принимающая в заданных точках
x
i
те же значения
y
i
,
что и функция
f
(
x
)
:
ϕ
(
x
i
) =
y
i
,
i
= 0
,
1
, ... , n
(24)
причем
x
i
6
=
x
k
при
i
6
=
k
,
x
i
– узлы интерполяции.
Интерполирующая функция может строиться сразу для всего рас-
сматриваемого интервала
x
– глобальная интерполяция, или отдельно
для разных частей этого интервала – кусочная (локальная) интерполя-
ция. Если полученная функция
ϕ
(
x
)
применяется для нахождения значе-
ния функции
f
(
x
)
за пределами отрезка, содержащего узлы, то говорят
об экстраполяции.
Рассмотрим использование в качестве функции
ϕ
(
x
)
интерполяцион-
ного многочлена
ϕ
(
x
) =
P
m
(
x
) =
a
0
+
a
1
x
+
a
2
x
2
+
...
+
a
m
x
m
.
(25)
При глобальной интерполяции мы будем использовать все
n
+ 1
уравне-
ний системы (24), что позволяет найти
n
+1
коэффициент, откуда следу-
ет, что максимальная степень интерполяционного многочлена –
m
=
n
:
P
n
(
x
) =
a
0
+
a
1
x
+
a
2
x
2
+
...
+
a
n
x
n
.
(26)
14
Подставляя (26) в (24) получаем:
a
0
+
a
1
x
0
+
a
2
x
2
0
...
+
a
n
x
n
0
=
y
0
a
0
+
a
1
x
1
+
a
2
x
2
1
...
+
a
n
x
n
1
=
y
1
...
(27)
a
0
+
a
1
x
n
+
a
2
x
2
n
...
+
a
n
x
n
n
=
y
n
(27) – система линейных алгебраических уравнений относительно неиз-
вестных коэффициентов
a
i
. Определитель такой системы отличен от ну-
ля, если среди узлов
x
i
нет совпадающих. Следовательно, в этом случае
система (27) имеет единственное решение. Решив систему (27), построим
интерполяционный многочлен. Такой метод построения носит название
метода неопределенных коэффициентов.
Недостатки метода:
– при большом количестве узлов получается высокая степень
многочлена,
– привязка к узлам интерполяции, которые, если они получены в резуль-
тате измерений, могут содержать случайные погрешности.
Другой способ – подбор наиболее простой аппроксимирующей функ-
ции, график которой проходит максимально близко от узлов.
Мера отклонения функции
ϕ
(
x
)
от заданной функции
f
(
x
)
:
S
=
n
X
i
=0
|
ϕ
(
x
i
)
−
y
i
|
2
.
(28)
Метод наименьших квадратов состоит в подборе аппроксимирующей функ-
ции так, чтобы
S
было наименьшим.
3.2.
Интерполирование
Рис. 7. КЛИ
Кусочно-линейная интерполяция
КЛИ состоит в том, что заданные точки
(
x
i
, y
i
)
соединяются прямолинейными отрезка-
ми, и функция
f
(
x
)
приближается ломанной с
вершинами в узлах. Всего имеется
n
интервалов
(
x
i
−
1
, x
i
)
, для каждого из них интерполяцион-
ным многочленом является уравнение прямой,
проходящей через две точки.
Например, для
i
-го интервала уравнение
прямой, проходящей через точки
(
x
i
−
1
, y
i
−
1
)
и
(
x
i
, y
i
)
имеет вид:
15