SPRAWOZDANIE
METODY NUMERYCZNE
ĆWICZENIE 3
Interpolacja
i aproksymacja
Hubert Łuczak 171376
Tomasz Szumko 171423
Zadanie 1
M-funkcja licząca wielomian metodą rodziny trójkątnej:
c(1)=y(1);
for i=2:1:size(x,2)
b=0;
m=1;
l=0;
for j=1:1:i-1
m=m*(x(i)-x(j));
end
for j=1:1:i-1
a=1;
for k=1:1:j-1
a=a*(x(i)-x(k));
end
b=b+c(j)*a;
end
l=y(i)-b;
c(i)=l/m;
end
x1(1)=0;
n=size(x,2);
h=size(c,2);
for i=1:n
x1(i+1)=x(i);
end
x=x1;
w=zeros(1,n);
for i=1:n
a1=size(w);
a=a1(2);
q=[1 -x(i)];
p=w;
for j=1:a
p(i+j)=0;
for k=1:2
w(1)=1;
if k>1,
w(j+k-1)=p(j+k-1)+p(j)*q(k);
end
end
end
l=1;
for z=(n-i+1):n
W(i,z)=w(l);
l=l+1;
end
end
clear i
for i=1:h
W(i,:)=W(i,:)*c(i);
end
Z(1,:)=W(n,:);
for i=1:h-1
Z(1,:)=Z(1,:)+W(i,:);
end
Z
Błąd dla wielomianu stopnia 30:
x=[-6:0.3:3];
for i=1:1:31
y(i)=cos(x(i))*exp(-x(i)/3);
end
w=polyfit(x,y,30);
for i=1:300
x(i)=(-6)+(9*i/300);
error(i)=polyval(w,(x(i)))-(cos(x(i))*exp(-x(i)/3));
end
plot(x,error)
Dla wielomianu stopnia 30 wyznaczony błąd ma mikroskopijna wartość.
Błąd dla wielomianu stopnia 50:
x=[-4:0.2:6];
for i=1:1:51
y(i)=x(i)/(sqrt(1+(x(i)^2)));
end
w=polyfit(x,y,30);
for i=1:300
x(i)=(-4)+(10*i/300);
error(i)=polyval(w,(x(i)))-(x(i)/(sqrt(1+(x(i)^2))));
end
plot(x,error)
Dla wielomianu stopnia 50 wyznaczony błąd ma niewielką wartość. Dla wielomianiu stopnia 30 błąd był znacznie większy (rzędu 200-300 na krańcach przedziału).
Zadanie 2
x=[0:0.1:1];
y=0.5625*exp(x)+0.529;
fi0=ones(1,size(x,2));
for i=1:1:size(x,2)
fi1(i)=exp(x(1,i));
end
macierzfi=[fi0;fi1];
for k=1:1:2
for j=1:1:2
K(k,j)=macierzfi(k,:)*macierzfi(j,:)';
L(k,1)=macierzfi(k,:)*y';
end
end
A=inv(K)*L
%generowanie zaburzeń
zab1=(2*rand(11,1)-1)/100;
zab2=(10*rand(11,1)-5)/100;
zab3=(20*rand(11,1)-10)/100;
zab4=(50*rand(11,1)-25)/100;
Y=ones(11,4);
Y(:,1)=(1+zab1).*y';
Y(:,2)=(1+zab2).*y';
Y(:,3)=(1+zab3).*y';
Y(:,4)=(1+zab4).*y';
%zaburzenie +/- 1%
for k=1:1:2
for j=1:1:2
K(k,j)=macierzfi(k,:)*macierzfi(j,:)';
L(k,1)=macierzfi(k,:)*Y(:,1);
end
end
B=inv(K)*L
%zaburzenie +/- 5%
for k=1:1:2
for j=1:1:2
K(k,j)=macierzfi(k,:)*macierzfi(j,:)';
L(k,1)=macierzfi(k,:)*Y(:,2);
end
end
C=inv(K)*L
%zaburzenie +/- 10%
for k=1:1:2
for j=1:1:2
K(k,j)=macierzfi(k,:)*macierzfi(j,:)';
L(k,1)=macierzfi(k,:)*Y(:,3);
end
end
D=inv(K)*L
%zaburzenie +/- 25%
for k=1:1:2
for j=1:1:2
K(k,j)=macierzfi(k,:)*macierzfi(j,:)';
L(k,1)=macierzfi(k,:)*Y(:,4);
end
end
E=inv(K)*L
%wykresy
hold on
plot(x,y,'k')
plot(x,Y(:,1),'o')
x=[0:0.01:1];
YY=B(1,1)*exp(x)+B(2,1);
plot(x,YY,'r--')
Wykresy:
Na poszczególnych wykresach zostały przedstawione funkcje bez zaburzeń (linia ciągła), węzły (o) oraz funkcje po zaburzeniu (linia przerywana).
Zaburzenie +/- 1%
Zaburzenie +/- 5%
Zaburzenie +/- 10%
Zaburzenie +/- 25%