POLITECHNIKA ŁÓDZKA | Imię, nazwisko, nr indeksu: Karol Tatar 177588 |
Wydział: Elektryczny Termin: poniedizałek 815-1000 |
|
---|---|---|---|
LABORATORIUM METOD NUMERYCZNYCH |
|||
Temat: : „Błędy w obliczeniach numerycznych” | Ocena: |
Zad.1 Oblicz wartość wielomianu korzystając ze wzoru (x-1)10, oraz schematu Hornera i wzoru P10(x) = c10x10…+c2x + c1.
W celu otrzymania rozwiązania napisano następującą m-funckje:
function [y1,y2,y3]=wielomian(c,x)
for i=1:length(x)
y1(i)=(x(i)-1)^10;
y2(i)=c(1)*x(i)^10+c(2)*x(i)^9+c(3)*x(i)^8+c(4)*x(i)^7+c(5)*x(i)^6+c(6)*x(i)^5+c(7)*x(i)^4+c(8)*x(i)^3+c(9)*x(i)^2+c(10)*x(i)+c(11);
y3(i)=(((((((((c(1)*x(i)+c(2))*x(i)+c(3))*x(i)+c(4))*x(i)+c(5))*x(i)+c(6))*x(i)+c(7))*x(i)+c(8))*x(i)+c(9))*x(i)+c(10))*x(i)+c(11);
end
Z wiersza poleceń wpisano:
>> c=[1,-10,45,-120,210,-252,210,-120,45,-10,1];
>> x=linspace(0.95,1.05,100);
>> [y1,y2,y3]=wielomian(c,x)
>> figure(1)
>> plot(x,y1,'r')
>> hold on
>> grid on
>> plot(x,y2,'g')
>>plot(x,y3,’y’);
>> y4=polyval(c,x);
>> plot(x,y4,'b');
>> legend('(x-1)^{10}','c_{10}*x^{10}+..+c_{11}', 'Schemat Hornera','polyval')
>> title('Wykres przebiegu wielomianu w zalezności od zastosowanej metody')
>> title('Przebieg wielomianu w zalezności od zastosowanej metody')
>> ylabel('y')
>> xlabel('x')
Otrzymujemy następujący wykres
Zad.2 Dla funkcji f(x) = ex2 + 1 podanego x0 oraz h0 dla 40 punktów policzyć różnice centralną i progresywną. Obliczyć dokładną wartość pochodnej oraz wykresy błędów
W celu rozwiązania zadania napisano następujący m-plik.
x=0.5;
h0=0.3;
for i=1:40
h(i)=h0*2^(-i+1);
c(i)=(exp((x+h(i))^2+1)-exp((x-h(i))^2+1))/(2*h(i));
p(i)=(exp((x+h(i))^2+1)-exp(x^2+1))/(h(i));
end
prim=exp(0.25+1);
for i=1:40
ec(i)=((prim-c(i))/prim)*100;
ep(i)=((prim-p(i))/prim)*100;
end
figure(1);
loglog(h,abs(ec),'r');
hold on;
loglog(h,abs(ep),'g')
legend('\epsilon_c','\epsilon_p')
grid on;
[hop,l1]=min(log(abs(ep)));
[hoc,l2]=min(log(abs(ec)));
text(h(l1-1),exp(hop),'\leftarrow \epsilon_{pmin}');
text(h(l2-1),exp(hoc),'\leftarrow \epsilon_{cmin}');
title('Wykresy błędó dla różnicy centralnej i progresywnej');
ylabel('\epsilon');
xlabel('h_i');
fprintf('Dokładna wartości pochodnej w punkcie x_0 funkcji wynosi %.8f, przy uzyciu roznicy progresywnej dla optymalnego kroku %.8f pochodna wynosi %.8f, dla roznicy centralnej i kroku optymalnego %.8f pochodna wynosi %.8f',prim,h(l1),p(l1),h(l2),c(l2));
wart1=p(4);
wart2=p(5);
delta12=(p(5)-p(4))/5;
wart12=p(5)+delta12;
wart3=p(6);
delta23=(p(6)-p(5))/5;
wart23=p(6)+delta23;
delta13=(wart23-wart12)/17;
wart13=wart23+delta13;
display('Ekstrapolacja Richardsona dla różnicy progresywnej');
fprintf('%.8f %.8f\n',h(4),p(4))
fprintf('%.8f %.8f %.8f %.8f \n',h(5),p(5),delta12,wart12)
fprintf('%.8f %.8f %.8f %.8f %.8f %.8f \n',h(6),p(6),delta23,wart23,delta13,wart13)
cwart1=c(4);
cwart2=c(5);
cdelta12=(c(5)-c(4))/5;
cwart12=c(5)+cdelta12;
cwart3=c(6);
cdelta23=(c(6)-c(5))/5;
cwart23=c(6)+cdelta23;
cdelta13=(cwart23-cwart12)/17;
cwart13=cwart23+cdelta13;
display('Ekstrapolacja Richardsona dla różnicy centralnej')
fprintf('%.8f %.8f\n',h(4),c(4))
fprintf('%.8f %.8f %.8f %.8f \n',h(5),c(5),cdelta12,cwart12)
fprintf('%.8f %.8f %.8f %.8f %.8f %.8f \n',h(6),c(6),cdelta23,cwart23,cdelta13,cwart13)
Otrzymano następujący wykres:
Dokładna wartości pochodnej w punkcie x0 funkcji wynosi 3.49034296, przy użyciu różnicy progresywnej dla optymalnego kroku 0.00000001 pochodna wynosi 3.49034299, dla różnicy centralnej i kroku optymalnego 0.00000458 pochodna wynosi 3.49034296.
Dla trzech kolejlych wartości h tzn.:1/12,1/24,1/48, dokonano ekstrapolacji iteracyjnej Richardsona
różnica progresywna
h | PD(h) | $$\frac{}{2^{2} + 1}$$ |
$$\frac{}{2^{4} + 1}$$ |
||
---|---|---|---|---|---|
1/24 | 3.69259760 | ||||
1/48 | 3.58996470 | -0.02052658 | 3.56943812 | ||
1/96 | 3.53978681 | -0.01003557 | 3,52975124 | -0.00233452 | 3.52741671 |
Uzyskany wynik obarczony jest błędem:
$$\varepsilon_{p} = \frac{3.52741671 - 3.49034296}{3.49034296}*100\% = 1,06218072\%$$
różnica centralna
h | CD(h) | $$\frac{}{2^{2} + 1}$$ |
$$\frac{}{2^{4} + 1}$$ |
||
---|---|---|---|---|---|
1/24 | 3.49607396 | ||||
1/48 | 3.49177483 | -0.0010746 | 3.49070021 | ||
1/96 | 3.49070087 | -0.0002147 | 3.49049390 | -0.00001213 | 3.49048176 |
Uzyskany wynik obarczony jest błędem:
$$\varepsilon_{p} = \frac{3.49048176 - 3.49034296}{3.49034296}*100\% = 0,00397668\%$$
Wnioski
Zmień wartości w tabeli
Przelicz wartości błędów względenych