Metody numeryczne
Laboratorium
Temat ćwiczenia: Teoria błędów
Grupa 5
sekcja 1, podsekcja 1
Pietrzyk Marcin
Wieczorek Krzysztof
Pierwsze trzy zadania opierały się na obliczeniach dotyczących trójkąta prostokątnego o
przyprostokątnych a i b, przeciwprostokątnej c, polu P oraz wysokości h opuszczonej na
przeciwprostokątną.
Danymi we wszystkich trzech zadaniach były długości przyprostokątnych a i b oraz ich
błędy Δa oraz Δb.
W zadaniach poszukiwaliśmy kolejno:
1) Wartości pola trójkąta,
2) Długości przeciwprostokątnej,
3) Wartości wysokości opuszczonej na przeciwprostokątną
oraz błędów wszystkich powyższych wielkości obliczonych metodą różniczki zupełnej oraz
przedziałów wartości i wyrażonych w postaci ich kresów górnych oraz dolnych.
Wyniki do zadania 1:
DANE
WARTOŚCI OBLICZONE
P
ΔP, M.P.W.
ΔP, M.R.Z.
a
b
Δa
Δb
K. dolny K. górny K. dolny K. górny
4
2
0.1
0.1
4
3,705
4,305
3,7
4,3
10
25
0.01
0.01
125
124,825
125,175
124,825
125,175
100
14
1
1
700
643,5
757,5
643
757
3
55
0.1
1
82,5
78,3
86,8
54,85
110,15
101
170
4
5
8585
8002,5
9187,5
7958
9212
44
123
0.5
4
2706
2588,25
2825,75
2449
2963
4
10
1
2
20
12
30
8
32
Wyniki do zadania 2:
DANE
WARTOŚCI OBLICZONE
c
Δc, M.P.W.
Δc, M.R.Z.
a
b
Δa
Δb
K. dolny K. górny K. dolny K. górny
4
2
0.1
0.1
4,47214
4,3382
4,60652
4,33797
4,6063
10
25
0.01
0.01
26,9258
26,9128
26,9388
26,9128
26,9388
100
14
1
1
100,975
99,8499
102,108
99,8463
102,104
3
55
0.1
1
55,0818
54,0778
56,0857
54,0778
56,0857
101
170
4
5
197,74
191,4
204,083
191,398
204,081
44
123
0.5
4
130,633
126,701
134,571
126,698
134,568
4
10
1
2
10,7703
8,544
13
8,54199
12,9987
Wyniki do zadania 3:
DANE
WARTOŚCI OBLICZONE
h
Δh, M.P.W.
Δh, M.R.Z.
a
b
Δa
Δb
K. dolny K. górny K. dolny K. górny
4
2
0.1
0.1
1,78885
1,70808
1,86909
1,70836
1,86935
10
25
0.01
0.01
9,28477
9,27625
9,29328
9,27625
9,29328
100
14
1
1
13,8648
12,8893
14,8373
12,8908
14,8388
3
55
0.1
1
2,99555
2,89583
3,09526
2,89583
3,09526
101
170
4
5
86,8313
83,6206
90,0368
83,6233
90,0393
44
123
0.5
4
41,429
40,8559
41,9965 40,85588 41,9992
4
10
1
2
3,71391
2,80899
4,61538
2,81104
4,61677
W zadaniu 4 dany był stożek o wysokości h, promieniu podstawy R oraz objętości V.
Danymi w zadaniu były wartości R, h oraz błąd objętości stożka ΔV. Poszukiwaliśmy wartości
błędów promienia ΔR oraz wysokości Δh przy pomocy różniczki zupełnej. Rozpatrywaliśmy
następujące przypadki:
1) ze względu na dokładność liczby Π:
a) 3,14,
b) wartość dokładniejsza,
2) ze względu na relacje wartości promienia R i wysokości h:
a) R~h,
b) R>>h,
c) R<<h.
W rozwiązaniu tego problemu korzystaliśmy z zasady równego wpływu.
Wyniki do zadania 4:
a) Pi niedokładne
DANE
WARTOŚCI OBLICZONE
R
h
dV
dR
dH
dPI
5
4
0.01
3,571429*10
-5
2,857143*10
-5
9,999999*10
-5
0.1
3,571429*10
-4
2,857143*10
-4
1,000000*10
-3
70
5
0.01
2,040816*10
-6
1,457726*10
-7
4,081633*10
-7
0.1
2,040816*10
-5
1,457726*10
-6
4,081633*10
-6
3
47
0.01
5,065856*10
-6
7,936508*10
-5
2,364066*10
-5
0.1
5,065856*10
-5
7,936508*10
-4
2,364066*10
-4
b) Pi dokładne
DANE
WARTOŚCI OBLICZONE
R
h
dV
dR
dH
5
4
0.01
7.957747*10
-5
1,909859*10
-4
0.1
7.957747*10
-4
1,909859*10
-3
50
3
0.01
4,547284*10
-6
9,744180*10
-7
0.1
4,547284*10
-5
9,744180*10
-6
3
47
0.01
1,128758*10
-5
5,305164*10
-4
0.1
1,128758*10
-4
5,305165*10
-3
Wnioski:
Celem ćwiczenia było zapoznanie się z podstawami teorii błędów. Podczas wykonywania
ćwiczenia sprawdziliśmy, jakie różnice są pomiędzy dwoma metodami przenoszenia niepewności
oraz zajęliśmy się zagadnieniem problemu odwrotnego.
Obie metody – metoda różniczki zupełnej i metoda przedziałów wartości dają bardzo
zbliżone do siebie wartości – poza jednym przypadkiem. Gdy błędy wpływające na wartość błędu
obliczanego różniły się znacznie, metoda przedziałów wykazywała tendencję do dawania
dokładniejszego przedziału. Różnica w wielkości przedziału w jednym z takich przypadków
wyniosła 6. (MRZ dawała przedział szeroki na 24, MPW dawała przedział szeroki na 18). Co
oznacza, że przedział z MRZ był o 33.3% szerszy od przedziału z MPW. To dość znaczna różnica.
Kolejnym zadaniem było zbadanie problemu błędu odwrotnego. Obliczyliśmy maksymalne
wartości błędów wpływających na wartość błędu objętości dla maksymalnie dokładnego pi oraz
niedokładnego. Porównując otrzymane wyniki okazuje się, że gdy używamy dokładnego pi, to
możliwe błędy innych wartości mogą być większe. Jest to szczególnie interesujące dla inżynierów,
pokazuje bowiem, że używanie jak najdokładniejszych stałych może w niektórych przypadkach
pozwalać na użycie mniej dokładnych mierników, a wynik utrzymany będzie w normie.
Kody napisane zostały przez nas w języku C/C++ i są dostępne na następnej stronie.
Treści programów:
Program rozwiązujący zadania 1, 2 i 3:
#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
int main()
{
float a, b, c, h, P, d_a, d_b, d_c, d_P, d_h, a_dol, b_dol, a_gor, b_gor, P_dol, P_gor, c_dol, c_gor,
h_dol, h_gor;
cout << "Podaj a: " << endl;
cin >> a;
cout << "Podaj b: " << endl;
cin >> b;
cout << "Podaj d_a: " << endl;
cin >> d_a;
cout << "Podaj d_b: " << endl;
cin >> d_b;
//ZADANIE 1
P=a*b/2.0;
cout<<"P = "<<P<<endl;
a_dol = a-d_a;
a_gor = a+d_a;
b_dol = b-d_b;
b_gor = b+d_b;
P_dol=a_dol*b_dol/2.0;
P_gor=a_gor*b_gor/2.0;
cout<<"Kresy P z m. p. w. : "<<P_dol<<" ; "<<P_gor<<endl;
d_P=a*d_a/2 + b*d_b/2;
cout<<"Kresy P z m. r. z. : "<<P-d_P<<" ; "<<P+d_P<<endl;
cout << endl<<endl;
//ZADANIE 2
c=sqrt(a*a+b*b);
cout <<"c = "<< c <<endl;
c_dol=sqrt(a_dol*a_dol+b_dol*b_dol);
c_gor=sqrt(a_gor*a_gor+b_gor*b_gor);
cout <<"Kresy c z m. p. w. : " << c_dol << " ; " << c_gor << endl;
d_c=((a*d_a)+(b*d_b))/c;
cout <<"Kresy c z m. r. z. : " << c-d_c << " ; " << c+d_c << endl;
cout << endl<<endl;
//ZADANIE 3
h=2*P/c;
cout <<"h = "<< h <<endl;
h_dol= (a_dol*b_dol)/sqrt(a_dol*a_dol+b_dol*b_dol);
h_gor= (a_gor*b_gor)/sqrt(a_gor*a_gor+b_gor*b_gor);
cout << "Kresy h z m. p. w. : "<<h_dol<<" ; "<<h_gor<<endl;
d_h=((b*b*b*d_a)+(a*a*a*d_b))/pow((a*a+b*b), (float)1.5);
cout <<"Kresy h z m. r. z. : " << h-d_h << " ; " << h+d_h << endl;
cout << endl<<endl;
system("pause");
return 0;
}
Program rozwiązujący zadanie 4:
#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
int main()
{
float dV, dR, dh, dPI, R, h;
cout.precision(10);
cout << "Podaj R: " << endl;
cin >> R;
cout << "Podaj h: " << endl;
cin >> h;
cout << "Podaj deltaV: " << endl;
cin >> dV;
cout << endl << endl << "Zakladajac pi=3,14 (niedokladne)" << endl << endl;
dR=dV/(3*3,14*R*h);
dh=dV/(3,14*R*R);
dPI=dV/(R*R*h);
cout << "dR=" << dR << endl << "dh=" << dh << endl << "dPI=" << dPI << endl << endl;
cout << "Zakladajac dokladniejsze pi" << endl << endl;
dR=dV/(2*M_PI*R*h);
dh=(3*dV)/(2*M_PI*R*R);
cout << "dR=" << dR << endl << "dh=" << dh << endl << endl << endl;
system("pause");
return 0;
}