Добавил:
ИВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

chisl_methods_lab3

.docx
Скачиваний:
1
Добавлен:
16.09.2023
Размер:
55.08 Кб
Скачать

Лабораторная работа №3

Интерполяция функций. Интерполяционные полиномы Лагранжа, Ньютона.

Пусть есть прибор, который в дискретные моменты времени выдает сигнал по закону . Допустим, наблюдатель зарегистрировал пять отсчетов в моменты времени . Задачей наблюдателя (который не знает закона выдачи сигнала) яsвляется получение приближенного значения функции на отрезке [0,1] в любой момент времени.

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

function y = interpol( X, Y, x)

for i=1:length(X-1)

if (x>=X(i) && x<=X(i+1))

k=(Y(i+1)-Y(i))/(X(i+1)-X(i));

y=Y(i)+k*(x-X(i));

return; end; end; end

f=@(t)sin(pi*t); i=0:4; Ti=i./4; Fi=f(Ti);

intf=@(x)(interpol(Ti, Fi, x));

X=[0 1/6 1/3 1/2];

Y=zeros(size(X));

YR=zeros(size(X));

for i=1:length(X)

Y(i)=intf(X(i));

YR(i)=f(X(i));

end

[X; Y; YR; abs(Y-YR)]

hold on; grid on;

fplot(f, [0 1]);

fplot(intf, [0 1], 'r');

plot(Ti, Fi, '*');

Постройте по заданным пяти точкам интерполяционный многочлен Лагранжа или Ньютона и, используя его, найдите значения функции в точках . Сравните результаты со значениями, полученными при линейной интерполяции, и значениями синуса в этих точках. Постройте графики синуса и интерполяционного многочлена. Какую максимальную ошибку мы допускаем при аппроксимации синуса данным полиномом? Сравните экспериментальную погрешность с теоретической.

function y = interpol2( X, Y, x )

A=repmat(X.', 1, length(X)).^repmat([0:length(X)-1], length(X), 1);

M=A\Y.';

y=(repmat(x', 1, length(X)).^repmat([0:length(X)-1], length(x), 1))*M;

end

f=@(t)sin(pi*t);

i=0:4;

Ti=i./4;

Fi=f(Ti);

X=[0:0.05:1];

Y=interpol2(Ti, Fi, X);

hold on; grid on;

plot(X, Y, 'r');

fplot(f, [0 1]);

plot(Ti, Fi, '*');

Найдите значение интерполяционного полинома при . Почему оно так сильно отличается от значения синуса в этой точке?

function yy = newton(x, y, xx)

N = length(x);

DIFF = y;

for k = 1 : N-1

for i = 1: N - k

DIFF(i) = (DIFF(i+1) - DIFF(i)) / (x(i+k) - x(i));

end

end

yy = DIFF(1) * ones(size(xx));

for k = 2 : N

yy = DIFF(k) + (xx - x(k)) .* yy;

end

>> newton(x,y,2)

ans =

8.4710

>> sin(pi*2)

ans =

-2.4493e-016

Задайте функцию на отрезке [-1, 1] в десяти равноотстоящих точках. Сравните значения функции и интерполяционного полинома при x=0.95. Постройте графики функции и полинома на заданном отрезке и объясните поведение интерполяционного полинома. Посмотрите, что будет происходить при постепенном увеличении числа узлов интерполяции и подумайте, как можно избавиться от получившегося эффекта.

syms z

x = -1:.2:1;

f=1/(1+25*z^2);

y = 1./(1+25*x.^2) ;

xi = .95;

yi = newton(x,y,xi);

plot(x,y,'o','linewidth',2);

hold on;

plot(xi,yi,'*k','linewidth',3);

hold on;

xi=x(1):0.01:x(length(x));

yi = newton(x,y,xi);

plot(xi,yi,'k-');

plot(xi,abs(subs(f,xi)-yi),'g-');

grid on;

plot([min(x) max(x)],[0 0],'-k');

max(abs(subs(f,xi)-yi))

xlabel('x');

ylabel('y');

ezplot('1/(1+25*x^2)',[-2 2]);

axis equal

Шаг 0.2

ans =

1.9156

Шаг 0.1

ans =

58.5855

Шаг 0.05

ans =

1.0437e+005

Для одной половины с шагом 0.1

5

Соседние файлы в предмете Численные методы