ЧМ_3
.docxНикитиной Софии ИВТ-24
Лабораторная работа №3
Интерполяция функций. Интерполяционные полиномы Лагранжа, Ньютона.
Скрипт:
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 = interpol( 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=interpol(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 = 2.0643
>> sin(pi*2)
ans = -2.4493e-16
syms z
x = -1:.2:1; %шаг 0.2
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