Материал: Спецглавы высшей математики. численные методы. Пантелеев И.Н

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

»N=8;

»i = 1:N;

»x (i) = 2*pi / (N-1)*(i-1);

»y = sin (x) ;

2.Задайте значения абсцисс точек, в которых вычисляется значение интерполяционного полинома.

» М=1000; » j = 1:M;

» x (j) = 2*pi / (N-1)*(i-1)

» Y=sin (X) ; % вычисление точных значений интерполируемой функции

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

» yy=spline(x,y,X);

4.Визуализируйте результаты сплайн-интерполяции и разности между точными и интерполированными значениями

(рис. V.6, V.7).

» plot(x,y, 'o'.X ,yy); » plot(X.Y-yy);

5.Вычислите и визуализируйте значения первых производных сплайна (рис. V.8).

» m=1:М-1

» yyl(m) = (yy(m+l)-yy(m))/(2*pi/(M-l)); » plot(X(m),yyl(m))

6.Вычислите и визуализируйте значения вторых производных сплайна (рис. V.9).

» m=1:М-2;

» уу2(m)=(yyl(m+1)-yyl(m))/(2*pi/(M-1)); » plot (X (m) ,уу2(m))

Рис. V.6. Визуализация исходных данных и результатов сплайн-интерполяции

129

128

Рис. V.7. Разность между точными и интерполированными значениями функции f (х) = sin (x)

Рис. V.8. Первая производная, вычисленная по численным значениям, полученным сплайн-интерполяцией

130

Рис. V.9. Вторая производная, вычисленная по численным значениям, полученным сплайн-интерполяцией

Рис. V.10. Третья производная, вычисленная по численным значениям, полученным сплайн-интерполяцией

131

7. Вычислите и визуализируйте значения третьих производных

» N=8;

сплайнов (рис. V.10).

» i=l:N;

» ууЗ (т) = (уу2 (m+1)-уу2 (m)) / (2*pi/ (M-1)) ; » plot(X(т),ууЗ);

» x(i)=2*pi/(N-l)*(i-1);

» m=1:М-3;

» y=sin(x);

Как видно из рис. V.7—V.10, первая и вторая производные

 

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

2. Задайте значения абсцисс точек, в которых вычисляется

высокого порядка производные — разрывными функциями.

значение интерполяционного полинома.

5.6. Решение задачи одномерной интерполяции средствами

» М=1000;

» j=l:M,

 

пакета MATLAB

» X(j)=2*pi/(M-l)*(j-1);

Для решения задачи одномерной сплайн-интерполяции в

» Y=sin(X); % вычисление точных значений интерполируемой

пакете MATLAB используется функция interp 1 (), имеющая

функции

следующий синтаксис:

 

yi = interpi (х,у,xi) — линейная интерполяция табличных

3. Вычислите интерполируемые значения функции в узлах

значений х, у в точках, абсциссы которых находятся в векторе

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

xi.

 

данные и точные интерполированные значения (рис. V.11)

yi = interpi (у,xi) — линейная интерполяция табличных

» yi=interpl(x,y,X);

значений у в точках, абсциссы которых находятся в векторе xi

» plot(x,y,'о1,X,Y,X,yi)

в предположении, что

 

x=l:length(у).

 

yi = interpi (х,у,xi,method) — интерполяция линейных значений

 

с использованием выбранного метода интерполяции.

 

Возможные значения переменной method:

 

'nearest' — интерполяция с использованием ближайших

 

узлов;

 

'linear' — линейная интерполяция (по умолчанию);

 

'spline' — интерполяция кубическим сплайном;

 

'pchip' — интерполяция полиномами Эрмита третьей степени;

 

' cubic' — аналогично pchip.

 

Пример 5.6. Решить задачу интерполяции для функции f (х) =

 

sin

(х), заданной таблично в восьми точках на интервале

 

[0, 2π], используя встроенную функцию пакета MATLAB

 

interpi ().

 

1.

Задайте табличные значения интерполируемой функции.

Рис. V.11. Исходные данные и результат линейной интерполяции

 

 

132

133

 

VI. ЧИСЛЕННОЕ ДИФФЕРЕНЦИРОВАНИЕ И ИНТЕГРИРОВАНИЕ

В данном разделе рассмотрим формулы численного дифференцирования и интегрирования (формулу прямоугольников, формулу трапеций, формулу Симпсона), погрешности данных формул, изложим основные идеи вычисления определенных интегралов методом Монте-Карло, обсудим использование соответствующих функций пакета

MATLAB.

6.1. Численное дифференцирование функций, заданных аналитически

По определению производная функции f(x) равна:

f ' (x) lim

f (x x) f (x)

(VI.1)

x

0

 

Переходя в (VI.1) от бесконечно малых разностей к конечным,

получаем

приближенную

формулу

численного

дифференцирования:

f (x x) f ()x

 

 

 

f ' (x)

.

(VI.2)

 

 

 

 

x

 

 

 

Формула (VI.2) позволяет построить простой вычислительный алгоритм:

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

2.Задать значение приращения Ах.

3.Вычислить производную в соответствие с формулой (VI.2). Замена бесконечно малых приращений конечными является причиной возникновения ошибки. Для оценки ее величины

разложим функцию f(x) в точке x x в ряд Тэйлора:

f (x x) f (x)

f ' (x)

x

f '' (x)

( x)2

 

f (2)

( x)n (VI.3)

1!

2!

n!

 

 

134

 

 

 

 

 

 

 

 

 

Подставив (VI.3) в (VI.2) и приведя подобные члены, получим:

f ' (x) f ' (x)

f '' (x)

x

(VI.4)

2!

 

 

 

Из (VI.4) видно, что все члены начиная со второго, определяют отличие численного значения производной от ее точного значения. Основной член погрешности равен

f '' (x) x / 2!, т. к. данный член ~ x , говорят, что формула

(VI.2) имеет первый порядок точности по x .

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

f ' (x)

f (x x) f (x x)

.

(VI.5)

 

 

2 x

 

Для оценки точности данной формулы необходимо удержать первые четыре члена в разложении в ряд Тэйлора:

 

 

 

1

 

 

 

x

 

 

 

( x)

2

 

 

( x)

3

 

 

f

' (x)

f (x) f '

(x)

f '' (x)

 

f ''' (x)

 

 

 

 

1!

2!

3!

 

 

 

 

 

2 x

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

x

 

 

 

( x)

2

 

 

( x)

3

 

 

 

f (x) f ' (x)

f '' (x)

 

f '''

(x)

 

.

(VI.6)

 

1!

2!

 

3!

 

 

2 x

 

 

 

 

 

 

 

 

 

 

 

Раскрыв в (VI.6) скобки и приведя подобные члены, получаем:

f ' (x)

f ' (x) f ''' (x)

( x)2

 

(VI.7)

3!

 

 

 

 

Из (VI.7) видно, что основной член погрешности равен f ''' ( x )( x )2 / 3! , т. к.

данный член ~ ( x)2 , говорят, что формула (VI.5) имеет

второй порядок точности по x .

Пример VI.1. Вычислить значения производной функции f(x) = sin(0.01x2) на интервале [0, 10π], используя пакет MATLAB.

135

Решение:

» f = inline ('sin(0.01*х.^2)'); % задание дифференцируемой функции

» dx=0.01; % шаг изменения координатной сетки » x=0:dx:10*pi; % вычисление координат узлов

»yf=feval (f ,x); % вычисление значений функции в узлах % выполнение процедуры численного дифференцирования

»N=length(x);

»m=l:N-l;

»df(m)=(yf(m+1)-yf(m))/dx;

»plot(df) % визуализация производной функции (рис. VI.1)

»fl=inline('0.02*x.*cos(0.01*x.^2)'); % задание функции,

%описывающей первую производную

»ya=feval(£l,x); % вычисление значений первой производной

%по аналитической формуле

»plot(x(m),abs(yf(m)-уа(m)); % визуализация разности между

%численными и аналитическими

%значениями производной (рис. VI.2)

Рис. VI.1. График производной функции f (x) = sin (0.01x2)

Аналогичным образомпоступаютпри вычислении производных высшихпорядков.

Отметим, что для аппроксимации производных конечными разностями в пакете MATLAB имеется функция diff(), синтаксис которой имеет следующийвид:

diff(x) — возвращает конечные разности, вычисленные по смежным элементам вектора х. Длина вектора, возвращаемого функцией diff(x), на единицу меньше длины вектора х. Если х

— матрица, то возвращает матрицу, содержащую конечные разности, вычисленные по каждому столбцу;

diff (x,n) — возвращает конечные разности л-го порядка;

diff (x,n,dim) — возвращает конечные разности n-ro порядка по столбцам (dim=i) или строкам матрицы.

Рис. VI.2. Разность между точными и численными значениями производных функции f (х) = sin (0.01x2)

137

136

Источник: https://studfile.net/preview/16565850/