Grzegorz Pasek 171604
METODY NUMERYCZNE – SPRAWOZDANIE NR 5
·Aproksymacja średniokwadratowa za pomocą wielomianów
Zad 1. Rozwiązanie układu DTDa = DTf dla różnych węzłów i funkcji z zadania poprzedniego i dla funkcji bazowej φi(x) = xi dla x=0,…,9=m.
Zaimplementowałem następujący sposób rozwiązania równania: clear all
%x=a:(b-a)/l:b; % wezly rownoodlegle z listy 4
for i=1:1:l+1
x(i)=(a-b)*cos((2*i-1)*pi/(2*l+2))/2 + (a+b)/2; % wezly Czebyszewa z l4
end
for p=1:1:l+1
%f(p,1)=exp(x(p)); % f1 z listy 4
f(p,1)=1./(1+x(p).^2); % f2 z listy 4
end
for i=1:1:l+1%tworzenie wersow macierzy zadanie pierwsze f(x)=x^i
for j=1:1:10 %tworzenie kolumn
D(i,j)=x(i)^(j-1);
end
end
b=D'*f;
V=D'*D;
A=[V b];
[n, n] = size(V);
n;
%wyzerowanie pod przekatna - postac trojkatna
for i = 1:n-1 %
for j = i+1:n
w = A(j,i)/A(i, i);
b(j) = b(j) - w*b(i);
for k = i:n
A(j,k) = A(j,k) - w*A(i,k);
end
end
end
%%
% wektor rozwiazan
r = b;
% petla przez wszystkie wiersze od ostatniego bn
for i = n:-1:1
% petla przez wszystkie pola niezerowe od prawej strony
for j = n:-1:i+1
r(i) = r(i) - A(i,j)*r(j);
end
r(i) = r(i)/A(i,i); % jako wektor
end
for q=1:1:size(x,2) % do zadania 1
F(q)=r(1,1)*x(q)^0+r(2,1)*x(q)^1+r(3,1)*x(q)^2+r(4,1)*x(q)^3+r(5,1)*x(q)^4+r(6,1)*x(q)^5+r(7,1)*x(q)^6+r(8,1)*x(q)^7+r(9,1)*x(q)^8+r(10,1)*x(q)^9;
end
Porównanie wyników działania metody(funkcja normalna – linia ciągła, funkcja aproksymowana – punkty)
f(x)=exp(x)
50 węzłów
węzły równoodległe węzły czebyszewa
100 węzłów
węzły równoodległe węzły czebyszewa
f(x)=$\frac{1}{1 + x^{2}}$
50 węzłów
węzły równoodległe węzły czebyszewa
100 węzłów
węzły równoodległe węzły czebyszewa
Widać, że oba sposoby węzłowe bardzo dobrze aproksymują funkcję. Co więcej inaczej niż w zadaniu z poprzedniej listy – nie obserwujemy tak dużych efektów Rungego. To samo spostrzeżenie tyczy się następnej metody – przybliżania wielomianami czebyszewa. Poniżej kod, oraz wyniki symulacji dla 50 oraz 100 węzłów.
Program uzupełniłem o następujący kod:
%% Wielomiany czebyszewa
for ll=1:1:l+1
s(ll)=2/(b-a)*x(ll)+(a+b)/(a-b);
end
for i=1:1:l+1%tworzenie wersow macierzy zadanie drugie f(x)=Tk(x)
D(i,1)=1;
D(i,2)=s(i);
D(i,3)=2*s(i)^2-1;
D(i,4)=4*s(i)^3-3*s(i);
D(i,5)=8*s(i)^4-8*s(i)^2+1;
D(i,6)=16*s(i)^5-20*s(i)^3+5*s(i);
D(i,7)=32*s(i)^6-48*s(i)^4+18*s(i)^2-1;
D(i,8)=64*s(i)^7-112*s(i)^5+56*s(i)^3-7*s(i);
D(i,9)=128*s(i)^8-256*s(i)^6+160*s(i)^4-32*s(i)^2+1;
D(i,10)=256*s(i)^9-576*s(i)^7+432*s(i)^5-120*s(i)^3+9*s(i);
end
(…)
for i=1:1:size(x,2) % do zadania 2
F(i)=r(1,1)*1+r(2,1)*s(i)+r(3,1)*(2*s(i)^2-1)+r(4,1)*(4*s(i)^3-3*s(i))+r(5,1)*(8*s(i)^4-8*s(i)^2+1)+r(6,1)*(16*s(i)^5-20*s(i)^3+5*s(i))+r(7,1)*(32*s(i)^6-48*s(i)^4+18*s(i)^2-1)+r(8,1)*(64*s(i)^7-112*s(i)^5+56*s(i)^3-7*s(i))+r(9,1)*(128*s(i)^8-256*s(i)^6+160*s(i)^4-32*s(i)^2+1)+r(10,1)*(256*s(i)^9-576*s(i)^7+432*s(i)^5-120*s(i)^3+9*s(i));
end
Poniżej wyniki takich samych symulacji jak dla poprzedniego zadania.
f(x)=exp(x)
50 węzłów
węzły równoodległe węzły czebyszewa
100 węzłów
węzły równoodległe węzły czebyszewa
f(x)=$\frac{1}{1 + x^{2}}$
50 węzłów
węzły równoodległe węzły czebyszewa
100 węzłów
węzły równoodległe węzły czebyszewa
Zadanie 3.