numerki 1 sprawko

Sprawozdanie ćw. 1

Bartłomiej Łaszek 152133

Adam Tondel 153019

data wykonania: czwartek 04.03.2010

grupa 3c4 godzina 10:15


Wstęp

Różniczkowanie numeryczne to nic innego jak aproksymacja pochodnych analitycznych. Nie są one jednak często stosowane w obliczeniach komputerowych – jeżeli mamy dostęp do komputera łatwiej jest nam policzyć pochodną metodą analityczną aniżeli numeryczną. Jednak metody numeryczne nie są zupełnie bezużyteczne – świetnie nadają się do obliczeń, gdy funkcja ma wartość dyskretną.

W metodach numerycznych istnieją trzy różnice pozwalające do oszacowania różniczki w punkcie w oparciu o różne dane. Możemy wyszczególnić różnicę centralną, progresywna (przednią), oraz różnicę regresywną (wsteczną). Różnica przednia służy do szacowania wartości pochodnej w danym punkcie na podstawie danych znajdujących się za tym punktem. Analogicznie różnica wsteczna służy do szacowania wartości pochodnej w danym punkcie na podstawie danych znajdujących się przed tym punktem. Różnica centralna szacuje wartość pochodnej na podstawie danych symetrycznie rozłożonych po obu stronach punktu, dla którego szacowana jest pochodna.

Różniczkowanie numeryczne jest stosunkowo rzadko stosowane do obliczeń ze względu na dużą wrażliwość na wszelkiego rodzaju błędy. W przypadku liczenia różniczki metodami numerycznymi trzeba wziąć pod uwagę 2 rodzaje błędów – błąd obcięcia oraz błąd zaokrąglenia wyników. Błąd obcięcia jest następstwem szacowania pochodnych na podstawie ograniczonej liczby wyników. Zauważyć można, że błąd ten początkowo jest proporcjonalny do długości kroku h, może to w nas wzbudzić chęć zmniejszania tego kroku do bardzo małych wartości, jednak jest to niebezpieczne podejście, ponieważ schodząc z wielkością kroku coraz niżej, jesteśmy zmuszeni do odejmowania od siebie liczb bliskich sobie, oraz dzielenia także przez bardzo małą liczbę, co sprawia, że zdobyte wyniki będą obarczone dużymi błędami zaokrągleń. Powodem tego zjawiska jest fakt, że każde narzędzie obliczeniowe ma określoną ilość cyfr jakie może przechowywać, tzw. precyzja liczby.

Cel ćwiczenia:

Celem ćwiczenia jest praktyczne zapoznanie się z metodami różnicowymi obliczania przybliżonego pochodnych funkcji, zapoznanie się z rodzajami błędów występującymi przy tego typu obliczeniach oraz wyznaczanie kroku optymalnego dla obliczania pochodnej numerycznej.

Skrypt uruchomieniowy z programu MatLAB

x=2;

k=55;

f0=sqrt(x);

h=1;

fp=1/(2*sqrt(2));

for i=1:k

h(i)=4/2^i;

end

cd=(sqrt(x+h)-sqrt(x-h))./(2*h);

bc=abs(cd-fp);

bmc=((h.^2)*(3/(8*x^(5/2)))/6);

plot(log(h),log(bc),'black')

hold on;

plot(log(h),log(bmc),'red')

pd=(sqrt(x+h)-sqrt(x))./h;

bp=abs(pd-fp);

bmp=((h.*(-1/(4*x^(3/2)))/3)+((h.^2)*(3/(8*x^(5/2)))/6))

figure;

plot(log(h),log(bp),'black')

hold on;

plot(log(h),log(bmp),'red')

funkcja dla jakiej liczymy pohodną jest następująca:


$$f\left( x \right) = \sqrt{2}$$

Otrzymane wartości obliczone w MatLAB’ie dla różnicy centralnej – wartość różnicy centralnej w zależności od kroku, gdzie krok jest ciągiem geometrycznym (H=Ho/2):

0.500000000000000

0.366025403784439

0.356393958692601

0.354248688935409

0.353726319793640

0.353596567416014

0.353564181339110

0.353556088063613

0.353554064947360

0.353553559180966

0.353553432740171

0.353553401130057

0.353553393227457

0.353553391251808

0.353553390757952

0.353553390634261

0.353553390603338

0.353553390596062

0.353553390596062

0.353553390596062

0.353553390537854

0.353553390596062

0.353553390596062

0.353553390596062

0.353553391061723

0.353553390130401

0.353553388267756

0.353553391993046

0.353553399443626

0.353553384542465

0.353553354740143

0.353553414344788

0.353553533554077

0.353553295135498

0.353552818298340

0.353551864624023

0.353553771972656

0.353553771972656

0.353561401367188

0.353546142578125

0.353576660156250

0.353637695312500

0.353759765625000

0.353515625000000

0.353515625000000

0.353515625000000

0.355468750000000

0.351562500000000

0.359375000000000

0.343750000000000

0.312500000000000

0.375000000000000

0.250000000000000

0.500000000000000

Błąd całkowity dla różnicy centralnej :

0.146446609406726

0.012472013191165

0.002840568099327

0.000695298342136

0.000172929200366

0.000043176822740

0.000010790745836

0.000002697470339

0.000000674354087

0.000000168587692

0.000000042146897

0.000000010536783

0.000000002634184

0.000000000658534

0.000000000164678

0.000000000040987

0.000000000010064

0.000000000002788

0.000000000002788

0.000000000002788

0.000000000055419

0.000000000002788

0.000000000002788

0.000000000002788

0.000000000468450

0.000000000462873

0.000000002325518

0.000000001399772

0.000000008850353

0.000000006050809

0.000000035853131

0.000000023751514

0.000000142960803

0.000000095457776

0.000000572294934

0.000001525969250

0.000000381379383

0.000000381379383

0.000008010773914

0.000007248015149

0.000023269562976

0.000084304719226

0.000206375031726

0.000037765593274

0.000037765593274

0.000037765593274

0.001915359406726

0.001990890593274

0.005821609406726

0.009803390593274

0.041053390593274

0.021446609406726

0.103553390593274

0.146446609406726

Błąd metody dla różnicy centralnej:

0.044194173824159

0.011048543456040

0.002762135864010

0.000690533966002

0.000172633491501

0.000043158372875

0.000010789593219

0.000002697398305

0.000000674349576

0.000000168587394

0.000000042146849

0.000000010536712

0.000000002634178

0.000000000658545

0.000000000164636

0.000000000041159

0.000000000010290

0.000000000002572

0.000000000000643

0.000000000000161

0.000000000000040

0.000000000000010

0.000000000000003

0.000000000000001

0.000000000000000

Wykres jaki otrzymaliśmy z podanych wyników jest następujący:

Wyniki otrzymane dla różnicy progresywnej:

0.292893218813452

0.317837245195782

0.333850535422189

0.343145750507619

0.348195290705840

0.350833588182592

0.352183008026472

0.352865540926288

0.353208796317972

0.353380925483634

0.353467115968670

0.353510242753828

0.353531814040252

0.353542601657864

0.353547995960980

0.353550693234865

0.353552041902731

0.353552716245758

0.353553053399082

0.353553221968468

0.353553306194954

0.353553348453715

0.353553369175643

0.353553379885852

0.353553384542465

0.353553384542465

0.353553384542465

0.353553384542465

0.353553384542465

0.353553354740143

0.353553295135498

0.353553295135498

0.353553295135498

0.353552818298340

0.353551864624023

0.353549957275391

0.353553771972656

0.353546142578125

0.353546142578125

0.353515625000000

0.353515625000000

0.353515625000000

0.353515625000000

0.353515625000000

0.353515625000000

0.351562500000000

0.351562500000000

0.343750000000000

0.343750000000000

0.312500000000000

0.250000000000000

Błąd całkowity różnicy progresywnej:

0.060660171779821

0.035716145397492

0.019702855171084

0.010407640085654

0.005358099887433

0.002719802410682

0.001370382566802

0.000687849666986

0.000344594275302

0.000172465109640

0.000086274624604

0.000043147839446

0.000021576553021

0.000010788935410

0.000005394632294

0.000002697358408

0.000001348690543

0.000000674347515

0.000000337194191

0.000000168624805

0.000000084398320

0.000000042139558

0.000000021417631

0.000000010707421

0.000000006050809

0.000000006050809

0.000000006050809

0.000000006050809

0.000000006050809

0.000000035853131

0.000000095457776

0.000000095457776

0.000000095457776

0.000000572294934

0.000001525969250

0.000003433317883

0.000000381379383

0.000007248015149

0.000007248015149

0.000037765593274

0.000037765593274

0.000037765593274

0.000037765593274

0.000037765593274

0.000037765593274

0.001990890593274

0.001990890593274

0.009803390593274

0.009803390593274

0.041053390593274

0.103553390593274

0.103553390593274

0.353553390593274

0.353553390593274

Błąd metody różnicy progresywnej:

0.014731391274720

0.018414239093400

0.011969255410710

0.006675161671357

0.003510214327179

0.001798265536465

0.000909922361451

0.000457658579030

0.000229503639091

0.000114920406940

0.000057502350318

0.000028761711871

0.000014383490114

0.000007192403601

0.000003596366437

0.000001798224377

0.000000899122478

0.000000449563812

0.000000224782549

0.000000112391435

0.000000056195758

0.000000028097889

0.000000014048947

0.000000007024474

0.000000003512237

0.000000001756119

0.000000000878059

0.000000000439030

0.000000000219515

0.000000000109757

0.000000000054879

0.000000000027439

0.000000000013720

0.000000000006860

0.000000000003430

0.000000000001715

0.000000000000857

0.000000000000429

0.000000000000214

0.000000000000107

0.000000000000054

0.000000000000027

0.000000000000013

0.000000000000007

0.000000000000003

0.000000000000002

0.000000000000001

0.000000000000000

Wykres do tego przypadku przedstawiony jest poniżej:

Wzory z jakich korzystaliśmy podczas obliczeń:

Różnica centralna:

Różnica progresywna:

Błąd metody różnicy centralnej (błąd obcięcia):

Błąd metody różnicy progresywnej (błąd obcięcia):

Wnioski:

Zgodnie z założeniami teoretycznymi, schodzenie z wartością h do bardzo małych wartości nie przybliża nas wcale do dokładniejszej wartości naszych obliczeń – dla każdej z metod istnieje krok optymalny w okolicach którego wartość naszych obliczeń jest najbardziej dokładna. Punkt ten dla naszego przypadku dla różnicy centralnej jak i progresywnej jest podobny i waha się w granicach od 1 * 10−11  do 1 * 10−12 dla różnicy progresywnej i 1 * 10−12  do 1 * 10−14 dla różnicy centralnej, a więc z krokiem możemy zejść naprawdę nisko. Poniżej tej wartości widać wyraźnie błędy zaokrągleń – wykres zaczyna rosnąć. Błąd obcięcia systematycznie spada – jest to ściśle związane z krokiem h, gdyż we wzorze jest on w liczniku, zatem będzie on coraz mniejszy. Ostatnią rzeczą o jakiej należy wspomnieć jest fakt, że w różnicy centralnej schodzimy o wiele niżej z błędem niż w przypadku różnicy progresywnej.


Wyszukiwarka