diff --git a/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/105.md b/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/105.md new file mode 100644 index 0000000..99700a0 --- /dev/null +++ b/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/105.md @@ -0,0 +1,17 @@ + +# Cel +Pomiar wilgotności powietrza +# Wstęp teoretyczny +Parowanie cieczy to proces polegający na zmianie stanu skupienia z cieczy w gaz, zachodzący na powierzchni cieczy w każdej temperaturze. Cząsteczki o największej energii odrywają się od powierzchni, co prowadzi do obniżenia średniej energii układu. +Wyróżniamy dwa rodzaje pary: parę nasyconą oraz parę nienasyconą. Para nasycona to stan, w którym liczba cząsteczek opuszczających ciecz jest równa liczbie cząstek do niej powracających, w wyniku skraplania. Ciśnienie pary nasyconej osiąga maksymalną wartość i zależy wyłącznie od temperatury i rodzaju cieczy. Para nienasycona ma niższe ciśnienie od pary nasyconej w tej samej temperaturze. Może przyjąć dodatkowe cząsteczki odparowanej cieczy. +Prężność pary nasyconej jest maksymalnym ciśnieniem, jakie para danej cieczy może wywierać w danej temperaturze. Zależy ono wyłącznie od temperatury i rodzaju cieczy. +
+ + + + + +Rosa powstaje, gdy temperatura powietrza spadnie poniżej tzw. punktu rosy. Wówczas para wodna zawarta w powietrzu staje się parą nasyconą i zaczyna się skraplać na chłodnych powierzchniach. +Wrzenie polega na gwałtownym parowaniu zachodzącym w całej objętości cieczy. Ciecz paruje, gdy prężność pary nasyconej wewnątrz pęcherzyków staje się równa ciśnieniu wewnętrznemu. Wzrost ciśnienia powoduje podwyższenie temperatury wrzenia, zaś spadek powoduje jej obniżenie. +Wilgotność powietrza opisuje zawartość pary wodnej w atmosferze. Wydzielamy dwa rodzaje wilgotności: wilgotność bezwzględną i względną. Wilgotność bezwzględna to masa pary wodnej zawarta w jednostce objętości powietrza. Wilgotność względna to stosunek aktualnego ciśnienia cząstkowego pary wodnej do ciśnienia pary nasyconej, w tej samej temperaturze, wyrażony w procentach. +Wilgotność powietrza możemy wyznaczyć na wiele sposobów. Jedną z takich metod jest metoda psychrometryczna. Polega ona na wykorzystaniu dwóch termometrów: suchego i mokrego. Parowanie wody z mokrego obniży jego temperaturę. Różnica wskazań pozwoli odczytać wilgotność z tablic psychrometrycznych. Inną metodą jest metoda higrometryczna. Wykorzystuje ona właściwości materiałów organicznych, które zmieniają swoją długość pod wpływem wilgoci. Ostatnią omawianą metodą jest metoda punktu rosy. Wykorzystując ją, należy schłodzić lustrzaną powierzchnię do momentu pojawienia się na niej rosy i dokonaniu pomiaru temperatury, w której to nastąpiło. diff --git a/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/Obliczenia.md b/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/Obliczenia.md new file mode 100644 index 0000000..4205ba8 --- /dev/null +++ b/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/Obliczenia.md @@ -0,0 +1,192 @@ +# Obliczenia +## 1. Dane wstępne i niepewności przyrządów +- Ciśnienie atmosferyczne: $b = 1015 \text{ hPa} = 761.25 \text{ mmHg}$ +- Niepewność standardowa termometrów: $$u(t) = \frac{0.1}{\sqrt{3}} = 0.0577 \, ^\circ\text{C}$$ +- Niepewność standardowa barometru (w mmHg): $$u(b) = \frac{0.75}{\sqrt{3}} = 0.4330 \text{ mmHg}$$ + +## 2. Obliczenia krok po kroku dla każdego pomiaru +### Pomiar nr 1 +Dane: $t_m = 17^\circ\text{C}$, $t_s = 22.5^\circ\text{C}$ + +**A. Wyznaczenie prężności pary nasyconej:** +- Dla termometru mokrego ($t_m=17$): Wartość z tabeli dla $t=17$. + $$p_m = 14.53 \text{ mmHg}$$ + Niepewność odczytu: $\Delta p_m = 0.475$. + $$u(p_m) = \frac{0.475}{\sqrt{3}} = 0.2742 \text{ mmHg}$$ +- Dla termometru suchego ($t_s=22.5$): Interpolacja między 22°C (19.83) a 23°C (21.07). + $$p_0 = 20.45 \text{ mmHg}$$ + $$u(p_0) = \frac{0.620}{\sqrt{3}} = 0.3580 \text{ mmHg}$$ + +**B. Obliczenie prężności pary nienasyconej $p$:** +Wzór: $$p = p_m - 0.5 \cdot (t_s - t_m) \cdot \frac{b}{755}$$ +Podstawienie: +$$p = 14.53 - 0.5 \cdot (22.5 - 17) \cdot \frac{761.2}{755}$$ +$$p = 14.53 - 2.7728 = \mathbf{11.76 \text{ mmHg}}$$ + +**C. Obliczenie niepewności $u(p)$:** +$$u(p) = \sqrt{u^2(p_m) + \left(0.5 \frac{b}{755}\right)^2 u^2(t_s) + \left(0.5 \frac{b}{755}\right)^2 u^2(t_m) + \left(0.5 \frac{t_s-t_m}{755}\right)^2 u^2(b)}$$ +$$u(p) = \sqrt{0.075208 + 0.000847 + 0.000847 + 0.000002}$$ +$$u(p) = \sqrt{0.076905} = 0.2773 \text{ mmHg}$$ + +**D. Obliczenie wilgotności względnej $w_1$:** +$$w_1 = \frac{p}{p_0} \cdot 100\% = \frac{11.76}{20.45} \cdot 100\% = \mathbf{57.49 \%}$$ + +**E. Niepewność pomiaru $u(w_1)$:** +$$u(w_1) = w_1 \cdot \sqrt{\left(\frac{u(p)}{p}\right)^2 + \left(\frac{u(p_0)}{p_0}\right)^2}$$ +$$u(w_1) = 57.49 \cdot \sqrt{\left(\frac{0.2773}{11.76}\right)^2 + \left(\frac{0.3580}{20.45}\right)^2} = 1.69 \%$$ +--- +### Pomiar nr 2 +Dane: $t_m = 18.2^\circ\text{C}$, $t_s = 21.8^\circ\text{C}$ + +**A. Wyznaczenie prężności pary nasyconej:** +- Dla termometru mokrego ($t_m=18.2$): Interpolacja między 18°C (15.48) a 19°C (16.48). + $$p_m = 15.68 \text{ mmHg}$$ + Niepewność odczytu: $\Delta p_m = 0.500$. + $$u(p_m) = \frac{0.500}{\sqrt{3}} = 0.2887 \text{ mmHg}$$ +- Dla termometru suchego ($t_s=21.8$): Interpolacja między 21°C (18.65) a 22°C (19.83). + $$p_0 = 19.59 \text{ mmHg}$$ + $$u(p_0) = \frac{0.590}{\sqrt{3}} = 0.3406 \text{ mmHg}$$ + +**B. Obliczenie prężności pary nienasyconej $p$:** +Wzór: $$p = p_m - 0.5 \cdot (t_s - t_m) \cdot \frac{b}{755}$$ +Podstawienie: +$$p = 15.68 - 0.5 \cdot (21.8 - 18.2) \cdot \frac{761.2}{755}$$ +$$p = 15.68 - 1.8149 = \mathbf{13.87 \text{ mmHg}}$$ + +**C. Obliczenie niepewności $u(p)$:** +Wzór (złożona niepewność standardowa): +$$u(p) = \sqrt{u^2(p_m) + \left(0.5 \frac{b}{755}\right)^2 u^2(t_s) + \left(0.5 \frac{b}{755}\right)^2 u^2(t_m) + \left(0.5 \frac{t_s-t_m}{755}\right)^2 u^2(b)}$$ +Podstawienie wartości kwadratów składników: +$$u(p) = \sqrt{0.083333 + 0.000847 + 0.000847 + 0.000001}$$ +$$u(p) = \sqrt{0.085029} = 0.2916 \text{ mmHg}$$ + +**D. Obliczenie wilgotności względnej $w_1$:** +$$w_1 = \frac{p}{p_0} \cdot 100\% = \frac{13.87}{19.59} \cdot 100\% = \mathbf{70.76 \%}$$ + +**E. Niepewność pomiaru $u(w_1)$:** +$$u(w_1) = w_1 \cdot \sqrt{\left(\frac{u(p)}{p}\right)^2 + \left(\frac{u(p_0)}{p_0}\right)^2}$$ +$$u(w_1) = 70.76 \cdot \sqrt{\left(\frac{0.2916}{13.87}\right)^2 + \left(\frac{0.3406}{19.59}\right)^2} = 1.93 \%$$ +--- +### Pomiar nr 3 +Dane: $t_m = 17.8^\circ\text{C}$, $t_s = 21.4^\circ\text{C}$ + +**A. Wyznaczenie prężności pary nasyconej:** +- Dla termometru mokrego ($t_m=17.8$): Interpolacja między 17°C (14.53) a 18°C (15.48). + $$p_m = 15.29 \text{ mmHg}$$ + Niepewność odczytu: $\Delta p_m = 0.475$. + $$u(p_m) = \frac{0.475}{\sqrt{3}} = 0.2742 \text{ mmHg}$$ +- Dla termometru suchego ($t_s=21.4$): Interpolacja między 21°C (18.65) a 22°C (19.83). + $$p_0 = 19.12 \text{ mmHg}$$ + $$u(p_0) = \frac{0.590}{\sqrt{3}} = 0.3406 \text{ mmHg}$$ + +**B. Obliczenie prężności pary nienasyconej $p$:** +Wzór: $$p = p_m - 0.5 \cdot (t_s - t_m) \cdot \frac{b}{755}$$ +Podstawienie: +$$p = 15.29 - 0.5 \cdot (21.4 - 17.8) \cdot \frac{761.2}{755}$$ +$$p = 15.29 - 1.8149 = \mathbf{13.48 \text{ mmHg}}$$ + +**C. Obliczenie niepewności $u(p)$:** +Wzór (złożona niepewność standardowa): +$$u(p) = \sqrt{u^2(p_m) + \left(0.5 \frac{b}{755}\right)^2 u^2(t_s) + \left(0.5 \frac{b}{755}\right)^2 u^2(t_m) + \left(0.5 \frac{t_s-t_m}{755}\right)^2 u^2(b)}$$ +Podstawienie wartości kwadratów składników: +$$u(p) = \sqrt{0.075208 + 0.000847 + 0.000847 + 0.000001}$$ +$$u(p) = \sqrt{0.076904} = 0.2773 \text{ mmHg}$$ + +**D. Obliczenie wilgotności względnej $w_1$:** +$$w_1 = \frac{p}{p_0} \cdot 100\% = \frac{13.48}{19.12} \cdot 100\% = \mathbf{70.47 \%}$$ + +**E. Niepewność pomiaru $u(w_1)$:** +$$u(w_1) = w_1 \cdot \sqrt{\left(\frac{u(p)}{p}\right)^2 + \left(\frac{u(p_0)}{p_0}\right)^2}$$ +$$u(w_1) = 70.47 \cdot \sqrt{\left(\frac{0.2773}{13.48}\right)^2 + \left(\frac{0.3406}{19.12}\right)^2} = 1.92 \%$$ +--- +### Pomiar nr 4 +Dane: $t_m = 17.8^\circ\text{C}$, $t_s = 21.8^\circ\text{C}$ + +**A. Wyznaczenie prężności pary nasyconej:** +- Dla termometru mokrego ($t_m=17.8$): Interpolacja między 17°C (14.53) a 18°C (15.48). + $$p_m = 15.29 \text{ mmHg}$$ + Niepewność odczytu: $\Delta p_m = 0.475$. + $$u(p_m) = \frac{0.475}{\sqrt{3}} = 0.2742 \text{ mmHg}$$ +- Dla termometru suchego ($t_s=21.8$): Interpolacja między 21°C (18.65) a 22°C (19.83). + $$p_0 = 19.59 \text{ mmHg}$$ + $$u(p_0) = \frac{0.590}{\sqrt{3}} = 0.3406 \text{ mmHg}$$ + +**B. Obliczenie prężności pary nienasyconej $p$:** +Wzór: $$p = p_m - 0.5 \cdot (t_s - t_m) \cdot \frac{b}{755}$$ +Podstawienie: +$$p = 15.29 - 0.5 \cdot (21.8 - 17.8) \cdot \frac{761.2}{755}$$ +$$p = 15.29 - 2.0166 = \mathbf{13.27 \text{ mmHg}}$$ + +**C. Obliczenie niepewności $u(p)$:** +Wzór (złożona niepewność standardowa): +$$u(p) = \sqrt{u^2(p_m) + \left(0.5 \frac{b}{755}\right)^2 u^2(t_s) + \left(0.5 \frac{b}{755}\right)^2 u^2(t_m) + \left(0.5 \frac{t_s-t_m}{755}\right)^2 u^2(b)}$$ +Podstawienie wartości kwadratów składników: +$$u(p) = \sqrt{0.075208 + 0.000847 + 0.000847 + 0.000001}$$ +$$u(p) = \sqrt{0.076904} = 0.2773 \text{ mmHg}$$ + +**D. Obliczenie wilgotności względnej $w_1$:** +$$w_1 = \frac{p}{p_0} \cdot 100\% = \frac{13.27}{19.59} \cdot 100\% = \mathbf{67.74 \%}$$ + +**E. Niepewność pomiaru $u(w_1)$:** +$$u(w_1) = w_1 \cdot \sqrt{\left(\frac{u(p)}{p}\right)^2 + \left(\frac{u(p_0)}{p_0}\right)^2}$$ +$$u(w_1) = 67.74 \cdot \sqrt{\left(\frac{0.2773}{13.27}\right)^2 + \left(\frac{0.3406}{19.59}\right)^2} = 1.84 \%$$ +--- +### Pomiar nr 5 +Dane: $t_m = 18.2^\circ\text{C}$, $t_s = 21.6^\circ\text{C}$ + +**A. Wyznaczenie prężności pary nasyconej:** +- Dla termometru mokrego ($t_m=18.2$): Interpolacja między 18°C (15.48) a 19°C (16.48). + $$p_m = 15.68 \text{ mmHg}$$ + Niepewność odczytu: $\Delta p_m = 0.500$. + $$u(p_m) = \frac{0.500}{\sqrt{3}} = 0.2887 \text{ mmHg}$$ +- Dla termometru suchego ($t_s=21.6$): Interpolacja między 21°C (18.65) a 22°C (19.83). + $$p_0 = 19.36 \text{ mmHg}$$ + $$u(p_0) = \frac{0.590}{\sqrt{3}} = 0.3406 \text{ mmHg}$$ + +**B. Obliczenie prężności pary nienasyconej $p$:** +Wzór: $$p = p_m - 0.5 \cdot (t_s - t_m) \cdot \frac{b}{755}$$ +Podstawienie: +$$p = 15.68 - 0.5 \cdot (21.6 - 18.2) \cdot \frac{761.2}{755}$$ +$$p = 15.68 - 1.7141 = \mathbf{13.97 \text{ mmHg}}$$ + +**C. Obliczenie niepewności $u(p)$:** +Wzór (złożona niepewność standardowa): +$$u(p) = \sqrt{u^2(p_m) + \left(0.5 \frac{b}{755}\right)^2 u^2(t_s) + \left(0.5 \frac{b}{755}\right)^2 u^2(t_m) + \left(0.5 \frac{t_s-t_m}{755}\right)^2 u^2(b)}$$ +Podstawienie wartości kwadratów składników: +$$u(p) = \sqrt{0.083333 + 0.000847 + 0.000847 + 0.000001}$$ +$$u(p) = \sqrt{0.085029} = 0.2916 \text{ mmHg}$$ + +**D. Obliczenie wilgotności względnej $w_1$:** +$$w_1 = \frac{p}{p_0} \cdot 100\% = \frac{13.97}{19.36} \cdot 100\% = \mathbf{72.15 \%}$$ + +**E. Niepewność pomiaru $u(w_1)$:** +$$u(w_1) = w_1 \cdot \sqrt{\left(\frac{u(p)}{p}\right)^2 + \left(\frac{u(p_0)}{p_0}\right)^2}$$ +$$u(w_1) = 72.15 \cdot \sqrt{\left(\frac{0.2916}{13.97}\right)^2 + \left(\frac{0.3406}{19.36}\right)^2} = 1.97 \%$$ +--- +## 3. Opracowanie statystyczne wyników ($w_1$) +**Średnia arytmetyczna:** +$$\bar{w}_1 = \frac{\sum w_i}{n} = \frac{338.61}{5} = \mathbf{67.72 \%}$$ + +**Niepewność typu A (statystyczna):** +$$u_A = \sqrt{\frac{\sum (w_i - \bar{w})^2}{n(n-1) }} = \sqrt{\frac{141.00}{5 \cdot 4}} = \mathbf{2.66 \%}$$ + +**Niepewność typu B (z przyrządów - średnia):** +$$ +u_B = \frac{1}{n} \sum_{i=1}^{n} u(w_i) + = \frac{1.69 + 1.93 + 1.92 + 1.84 + 1.97}{5} + = 1.87\% +$$ + +**Całkowita niepewność standardowa:** +$$u(\bar{w}_1) = \sqrt{u_A^2 + u_B^2} = \sqrt{2.66^2 + 1.87^2} = \mathbf{3.25 \%}$$ +## 4. Zestawienie końcowe i porównanie metod +### Wyniki końcowe: +- **Psychrometr Assmanna ($w_1$):** $$67.72 \% \pm 3.25 \%$$ +- **Metoda tabelaryczna ($w_2$):** $$67.60 \%$$ +- **Higrometr włosowy ($w_3$):** $$35 \% \pm 2.89 \%$$ +- **Higrometr pojemnościowy ($w_4$):** $$30.5 \% \pm 1.44 \%$$ +# Wnioski +- Wyniki dla higrometrów oraz psychrometru i tablic psychrometrycznych drastycznie się od siebie różnią. Higrometr włosowy wskazywał 35%, pojemnościowy 30.5% podczas, gdy psychrometr Assmana wskazał 67.72%, a tablica psychrometryczna pokazała 67.60%. +- Takie rozbieżności mogą wynikać z niedoskonałości przyrządów. Mówimy wtedy o błędzie systematycznym. +- Należy mieć na uwadze, że ekran higrometru pojemnościowego był uszkodzony i mogło to wpłynąć na poprawny odczyt wilgotności powietrza. +- Higrometr włosowy mógł być rozkalibrowany co wpłynęło negatywnie na wynik. \ No newline at end of file diff --git a/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/Obliczenia.pdf b/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/Obliczenia.pdf new file mode 100644 index 0000000..7e76234 Binary files /dev/null and b/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/Obliczenia.pdf differ diff --git a/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/obliczenia.py b/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/obliczenia.py new file mode 100644 index 0000000..4108ff4 --- /dev/null +++ b/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/obliczenia.py @@ -0,0 +1,219 @@ +import math + +# Stałe i zmienne +# Stałe, pomiary +g_b = 1015 # ciśnienie atmosferyczne +g_t_s = [22.5, 21.8, 21.4, 21.8, 21.6] # temperatura – suchy +g_t_m = [17, 18.2, 17.8, 17.8, 18.2] # temperatura – mokry +g_w_3 = 35 # higrometr włoskowy +g_w_4 = 30.5 # higrometr pojemnościowy – uszkodzony ekran xd +dokladnosc_termometru = 0.1 +dokladnosc_barometru = 1 * 0.75 +dokladnosc_tabeli = (9.84 - 9.21) / 2 + +# Prężność pary – mokry + +# Prężność pary – mokry + +# Zmienne +w_1 = 0 # za pomocą psychrometru aspieracyjnego Assmana | do policzenia +w_2 = 0 # ze wskazań termometru suchego i mokrego oraz tablic psychrometryczny +p_0 = 0 # prężność pary nasyconej – suchy +p_m = 0 # prężność pary nasyconej – mokry +p = 0 # prężność pary nienasyconej – suchy | potrzebna w punkcie h) + +# tabelka p w liście +tabela_p = { + 16: 13.63, + 17: 14.53, + 18: 15.48, + 19: 16.48, + 20: 17.54, + 21: 18.65, + 22: 19.83, + 23: 21.07, +} + +tabela_w_2 = { + (17, 22.5): 58, + (18.2, 21.8): 69, + (17.8, 21.4): 71, + (17.8, 21.8): 68, + (18.2, 21.6): 72 +} + +# Funkcje + + +def p_m_lub_t_i_niepewnosc(t_m): # to już działa + jest_calkowita = float(t_m).is_integer() + if jest_calkowita: + t = int(t_m) + + if (t-1) not in tabela_p or (t+1) not in tabela_p: + return None, None # Brak danych w tabeli + + p_srodek = tabela_p[t] + p_lewo = tabela_p[t-1] + p_prawo = tabela_p[t+1] + + p_wynik = p_srodek + + roznica_lewa = p_srodek - p_lewo + roznica_prawa = p_prawo - p_srodek + + max_roznica = max(roznica_lewa, roznica_prawa) + niepewnosc = max_roznica / 2 + else: + t_1 = int(t_m) + t_2 = t_1 + 1 + + if t_1 not in tabela_p or t_2 not in tabela_p: + return None, None + + p_m_1 = tabela_p[t_1] + p_m_2 = tabela_p[t_2] + + delta_t = t_m - t_1 + p_wynik = p_m_1 + (p_m_2 - p_m_1) * delta_t + + niepewnosc = (p_m_2 - p_m_1) / 2 + + return p_wynik, niepewnosc + + +def p_nienasycona(p_m, t_s, t_m, b): + return p_m - ((t_s - t_m) / 2) * (b/755) + +# niepewności standardowe + + +def niepewnosc_termometru_suchego(delta_t_s=dokladnosc_termometru): + return delta_t_s / math.sqrt(3) + + +def niepewnosc_termometru_mokrego(delta_t_m=dokladnosc_termometru): + return delta_t_m / math.sqrt(3) + + +def niepewnosc_barometru(delta_b=dokladnosc_barometru): + return delta_b / math.sqrt(3) + + +def niepewnosc_tabeli(p_0=dokladnosc_tabeli): + return p_0/math.sqrt(3) + + +def niepewnosc_higrometru_elektronicznego(dokladnosc_producenta=2.5): + return dokladnosc_producenta / math.sqrt(3) + + +def niepewnosc_higrometru_wlosowego(dokladnosc_odczytu=5.0): + return dokladnosc_odczytu / math.sqrt(3) + + +def niepewnosc_pary_nienasyconej(p_m, u_p_m, t_s, t_m, u_t_s, u_t_m, b_hpa, u_b_hpa): + b_mmhg = b_hpa * 0.75 + u_b_mmhg = u_b_hpa * 0.75 + + c1 = u_p_m**2 + + A = 0.5 * (b_mmhg / 755) + c2 = (A**2) * (u_t_s**2) + c3 = (A**2) * (u_t_m**2) + + B = 0.5 * (t_s - t_m) / 755 + c4 = (B**2) * (u_b_mmhg**2) + + return math.sqrt(c1 + c2 + c3 + c4) + + +def wilgotnosc_wzgledna(p, p_0): + return (p/p_0)*100 + + +def niepewnosc_wilgotnosci_wzglednej_B(w1, p, u_p, p_0, u_p_0): + c1 = (u_p / p) ** 2 + c2 = (u_p_0 / p_0) ** 2 + return w1 * math.sqrt(c1 + c2) + + +def wartosc_srednia_w_1(w_1): + return sum(w_1) / len(w_1) + + +def niepewnosc_a(w_1, w_1_srednie): + n = len(w_1) + if n <= 1: + return 0 + suma_kwadratow = sum((w - w_1_srednie) ** 2 for w in w_1) + return math.sqrt(suma_kwadratow / (n * (n - 1))) + + +def w_2(t_s, t_m): + return t_s - t_m + + +if __name__ == "__main__": + b = g_b * 0.75 + + # Niepewności przyrządów + u_ts = niepewnosc_termometru_suchego() + u_tm = niepewnosc_termometru_mokrego() + u_b = niepewnosc_barometru() # w hPa + + # Niepewności pozostałych metod + u_w3 = niepewnosc_higrometru_wlosowego() + u_w4 = niepewnosc_higrometru_elektronicznego() + + w = [] + w2 = [] + ub_lista = [] + + for t_m, t_s in zip(g_t_m, g_t_s): + print(f"=== Pomiar (tm={t_m}, ts={t_s}) ===") + + # Interpolacja i przeliczenie na niepewność standardową + p_m, delta_p_m = p_m_lub_t_i_niepewnosc(t_m) + u_p_m = delta_p_m / math.sqrt(3) # POPRAWKA: Dzielenie przez sqrt(3) + + p_0, delta_p_0 = p_m_lub_t_i_niepewnosc(t_s) + u_p_0 = delta_p_0 / math.sqrt(3) # POPRAWKA: Dzielenie przez sqrt(3) + + # Obliczenia dla metody w1 + p_nie = p_nienasycona(p_m, t_s, t_m, b) + + niepewnosc_koncowa = niepewnosc_pary_nienasyconej( + p_m, u_p_m, t_s, t_m, u_ts, u_tm, g_b, u_b + ) + + w_1_val = wilgotnosc_wzgledna(p_nie, p_0) + w.append(w_1_val) + + ub_val = niepewnosc_wilgotnosci_wzglednej_B( + w_1_val, p_nie, niepewnosc_koncowa, p_0, u_p_0) + ub_lista.append(ub_val) + + w_2_val = tabela_w_2.get((t_m, t_s)) + w2.append(w_2_val) + print(f"w1: {w_1_val:.2f}% | u(w1): {ub_val:.2f} | w2: { + w_2_val}%") # Zmodyfikowany print + + print(f"w1: {w_1_val:.2f}% | u(w1): {ub_val:.2f}") + + # Wyniki końcowe + srednie_w1 = wartosc_srednia_w_1(w) + srednie_w2 = sum(w2) / len(w2) + ua = niepewnosc_a(w, srednie_w1) + ub_koncowe = sum(ub_lista) / len(ub_lista) + uc = math.sqrt(ua**2 + ub_koncowe**2) + + print("\n=== WYNIKI KOŃCOWE ===") + print(f"Psychrometr (w1): {srednie_w1:.2f}% +/- {uc:.2f}%") + print(f"Termometr suchy i mokry (w2): {srednie_w2:.2f}% +/- {uc:.2f}%") + print(f"Higrometr włosowy (w3): {g_w_3}% +/- {u_w3:.2f}%") + print(f"Higrometr elektr. (w4): {g_w_4}% +/- {u_w4:.2f}%") + + # Różnice do wniosków + print(f"\nRóżnica w1 - w3: {srednie_w1 - g_w_3:.2f} p.proc") + print(f"Różnica w1 - w4: {srednie_w1 - g_w_4:.2f} p.proc") diff --git a/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/obliczenia_raport.py b/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/obliczenia_raport.py new file mode 100644 index 0000000..a11ee5f --- /dev/null +++ b/uczelnia/1_semestr/fizyka_dla_informatyków/Sprawozdania/105/obliczenia_raport.py @@ -0,0 +1,234 @@ +import math + +# --- DANE I KONFIGURACJA --- +g_b = 1015 # hPa +g_t_s = [22.5, 21.8, 21.4, 21.8, 21.6] +g_t_m = [17, 18.2, 17.8, 17.8, 18.2] +g_w_3 = 35 +g_w_4 = 30.5 +dokladnosc_termometru = 0.1 +dokladnosc_barometru = 1 * 0.75 # przeliczone na mmHg dla niepewności odczytu + +tabela_p = { + 16: 13.63, 17: 14.53, 18: 15.48, 19: 16.48, + 20: 17.54, 21: 18.65, 22: 19.83, 23: 21.07 +} + +tabela_w_2 = { + (17, 22.5): 58, (18.2, 21.8): 69, (17.8, 21.4): 71, + (17.8, 21.8): 68, (18.2, 21.6): 72 +} + + +def interpolacja(t_val): + t = float(t_val) + if t.is_integer(): + ti = int(t) + p = tabela_p.get(ti) + p_prev = tabela_p.get(ti-1, p-0.9) + p_next = tabela_p.get(ti+1, p+0.9) + delta = max(abs(p - p_prev), abs(p_next - p)) / 2 + return p, delta, f"Wartość z tabeli dla $t={ti}$" + else: + t1 = int(t) + t2 = t1 + 1 + p1 = tabela_p.get(t1) + p2 = tabela_p.get(t2) + p = p1 + (p2 - p1) * (t - t1) + delta = (p2 - p1) / 2 + opis = f"Interpolacja między {t1}°C ({p1}) a {t2}°C ({p2})" + return p, delta, opis + + +def get_u_instr(dokladnosc): + return dokladnosc / math.sqrt(3) + +# --- GENERATOR PLIKU OBSIDIAN --- + + +if __name__ == "__main__": + # Stałe globalne do obliczeń + b_hpa = g_b + b_mmhg = g_b * 0.75 + # tu wchodzi juz przeliczona dokladnosc + u_b_mmhg = get_u_instr(dokladnosc_barometru) + u_t = get_u_instr(dokladnosc_termometru) + + # Listy na wyniki + results_w1 = [] + results_u_B = [] + + with open("pelne_obliczenia_obsidian.md", "w", encoding="utf-8") as f: + + f.write("# Szczegółowe Obliczenia Wilgotności\n\n") + + # 1. Dane wstępne + f.write("## 1. Dane wstępne i niepewności przyrządów\n") + f.write( + f"- Ciśnienie atmosferyczne: $b = {b_hpa} \\text{{ hPa}} = {b_mmhg:.2f} \\text{{ mmHg}}$\n") + f.write(f"- Niepewność standardowa termometrów: $$u(t) = \\frac{{{ + dokladnosc_termometru}}}{{\\sqrt{{3}}}} = {u_t:.4f} \\, ^\\circ\\text{{C}}$$\n") + f.write(f"- Niepewność standardowa barometru (w mmHg): $$u(b) = \\frac{{{ + dokladnosc_barometru:.2f}}}{{\\sqrt{{3}}}} = {u_b_mmhg:.4f} \\text{{ mmHg}}$$\n\n") + + # 2. Pętla przez pomiary + f.write("## 2. Obliczenia krok po kroku dla każdego pomiaru\n") + + for i, (tm, ts) in enumerate(zip(g_t_m, g_t_s)): + nr = i + 1 + f.write(f"### Pomiar nr {nr}\n") + f.write(f"Dane: $t_m = {tm}^\\circ\\text{{C}}$, $t_s = { + ts}^\\circ\\text{{C}}$\n\n") + + # A. Prężności nasycone + pm, delta_pm, opis_m = interpolacja(tm) + u_pm = delta_pm / math.sqrt(3) + + p0, delta_p0, opis_s = interpolacja(ts) + u_p0 = delta_p0 / math.sqrt(3) + + f.write("**A. Wyznaczenie prężności pary nasyconej:**\n") + f.write(f"- Dla termometru mokrego ($t_m={tm}$): {opis_m}.\n") + f.write(f" $$p_m = {pm:.2f} \\text{{ mmHg}}$$\n") + f.write(f" Niepewność odczytu (interpolacji): $\\Delta p_m = { + delta_pm:.3f}$.\n") + f.write(f" $$u(p_m) = \\frac{{{delta_pm:.3f}}}{{\\sqrt{{3}}}} = { + u_pm:.4f} \\text{{ mmHg}}$$\n") + + f.write(f"- Dla termometru suchego ($t_s={ts}$): {opis_s}.\n") + f.write(f" $$p_0 = {p0:.2f} \\text{{ mmHg}}$$\n") + f.write(f" $$u(p_0) = \\frac{{{delta_p0:.3f}}}{{\\sqrt{{3}}}} = { + u_p0:.4f} \\text{{ mmHg}}$$\n\n") + + # B. Prężność nienasycona p + # p = pm - 0.5 * (ts - tm) * (b / 755) + czlon_psychro = 0.5 * (ts - tm) * (b_mmhg / 755) + p_val = pm - czlon_psychro + + f.write("**B. Obliczenie prężności pary nienasyconej $p$:**\n") + f.write( + "Wzór: $$p = p_m - 0.5 \\cdot (t_s - t_m) \\cdot \\frac{b}{755}$$\n") + f.write("Podstawienie:\n") + f.write(f"$$p = { + pm:.2f} - 0.5 \\cdot ({ts} - {tm}) \\cdot \\frac{{{b_mmhg:.1f}}}{{755}}$$\n") + f.write(f"$$p = { + pm:.2f} - {czlon_psychro:.4f} = \\mathbf{{{p_val:.2f} \\text{{ mmHg}}}}$$\n\n") + + # C. Niepewność u(p) + # Składniki pod pierwiastkiem + A = 0.5 * (b_mmhg / 755) + B = 0.5 * (ts - tm) / 755 + + comp_pm = u_pm**2 + comp_ts = (A * u_t)**2 + comp_tm = (A * u_t)**2 + comp_b = (B * u_b_mmhg)**2 + u_p_val = math.sqrt(comp_pm + comp_ts + comp_tm + comp_b) + + f.write("**C. Obliczenie niepewności $u(p)$:**\n") + f.write("Wzór (złożona niepewność standardowa):\n") + f.write( + "$$u(p) = \\sqrt{u^2(p_m) + \\left(0.5 \\frac{b}{755}\\right)^2 u^2(t_s) + \\left(0.5 \\frac{b}{755}\\right)^2 u^2(t_m) + \\left(0.5 \\frac{t_s-t_m}{755}\\right)^2 u^2(b)}$$\n") + f.write("Podstawienie wartości kwadratów składników:\n") + f.write(f"$$u(p) = \\sqrt{{{ + comp_pm:.6f} + {comp_ts:.6f} + {comp_tm:.6f} + {comp_b:.6f}}}$$\n") + f.write(f"$$u(p) = \\sqrt{{{ + comp_pm + comp_ts + comp_tm + comp_b:.6f}}} = {u_p_val:.4f} \\text{{ mmHg}}$$\n\n") + + # D. Wilgotność w1 + w1 = (p_val / p0) * 100 + results_w1.append(w1) + + f.write("**D. Obliczenie wilgotności względnej $w_1$:**\n") + f.write(f"$$w_1 = \\frac{{p}}{{p_0}} \\cdot 100\\% = \\frac{{{p_val:.2f}}}{{{ + p0:.2f}}} \\cdot 100\\% = \\mathbf{{{w1:.2f} \\%}}$$\n\n") + + # E. Niepewność u(w1) + # u(w) = w * sqrt( (u(p)/p)^2 + (u(p0)/p0)^2 ) + rel_p = (u_p_val / p_val)**2 + rel_p0 = (u_p0 / p0)**2 + u_w1 = w1 * math.sqrt(rel_p + rel_p0) + results_u_B.append(u_w1) + + f.write("**E. Niepewność pomiaru $u(w_1)$:**\n") + f.write( + f"$$u(w_1) = w_1 \\cdot \\sqrt{{\\left(\\frac{{u(p)}}{{p}}\\right)^2 + \\left(\\frac{{u(p_0)}}{{p_0}}\\right)^2}}$$\n") + f.write(f"$$u(w_1) = {w1:.2f} \\cdot \\sqrt{{\\left(\\frac{{{u_p_val:.4f}}}{{{ + p_val:.2f}}}\\right)^2 + \\left(\\frac{{{u_p0:.4f}}}{{{p0:.2f}}}\\right)^2}} = {u_w1:.2f} \\%$$\n") + f.write("---\n") + + # 3. Statystyka końcowa + avg_w1 = sum(results_w1) / len(results_w1) + + # uA + sum_sq = sum([(w - avg_w1)**2 for w in results_w1]) + n = len(results_w1) + ua = math.sqrt(sum_sq / (n * (n - 1))) + + # uB (średnia) + ub_avg = sum(results_u_B) / n + + # uC + uc = math.sqrt(ua**2 + ub_avg**2) + + f.write("## 3. Opracowanie statystyczne wyników ($w_1$)\n") + f.write(f"**Średnia arytmetyczna:**\n") + f.write(f"$$\\bar{{w}}_1 = \\frac{{\\sum w_i}}{{n}} = \\frac{{{ + sum(results_w1):.2f}}}{{{n}}} = \\mathbf{{{avg_w1:.2f} \\%}}$$\n\n") + + f.write("**Niepewność typu A (statystyczna):**\n") + f.write(f"$$u_A = \\sqrt{{\\frac{{\\sum (w_i - \\bar{{w}})^2}}{{n(n-1) }}}} = \\sqrt{{\\frac{{{ + sum_sq:.2f}}}{{{n} \\cdot {n-1}}}}} = \\mathbf{{{ua:.2f} \\%}}$$\n\n") + + f.write("**Niepewność typu B (z przyrządów - średnia):**\n") + f.write( + f"$$u_B = \\frac{{\\sum u(w_i)}}{{n}} = \\mathbf{{{ub_avg:.2f} \\%}}$$\n\n") + + f.write("**Całkowita niepewność standardowa:**\n") + f.write(f"$$u(\\bar{{w}}_1) = \\sqrt{{u_A^2 + u_B^2}} = \\sqrt{{{ + ua:.2f}^2 + {ub_avg:.2f}^2}} = \\mathbf{{{uc:.2f} \\%}}$$\n\n") + + # 4. Tabela zbiorcza + f.write("## 4. Tabela zbiorcza wyników\n") + f.write( + "| Nr | $t_m$ | $t_s$ | $p_m$ | $p_0$ | $p$ | $w_1$ | $u(w_1)$ | $w_2$ (Tabl.) |\n") + f.write("|---|---|---|---|---|---|---|---|---|\n") + + for i, (tm, ts) in enumerate(zip(g_t_m, g_t_s)): + # Musimy szybko przeliczyć te wartości jeszcze raz do tabeli, albo brać z cache + # Dla prostoty kodu, obliczam "w locie" tylko do displayu (wartości są te same) + # W prawdziwym kodzie produkcyjnym lepiej trzymać obiekty, ale tu skrypt jest jednorazowy. + pm, _, _ = interpolacja(tm) + p0, _, _ = interpolacja(ts) + p_val = pm - 0.5 * (ts - tm) * (b_mmhg / 755) + w1 = (p_val / p0) * 100 + + # Pobranie u(w1) z listy + u_val = results_u_B[i] + w2_val = tabela_w_2.get((tm, ts)) + + f.write(f"| {i+1} | {tm} | {ts} | {pm:.2f} | {p0:.2f} | { + p_val:.2f} | **{w1:.2f}** | {u_val:.2f} | {w2_val} |\n") + + # 5. Wyniki końcowe i porównanie + u_w3 = get_u_instr(5.0) # Higrometr włosowy + u_w4 = get_u_instr(2.5) # Higrometr elektr. + avg_w2 = sum(tabela_w_2.values()) / len(tabela_w_2) + + f.write("\n## 5. Zestawienie końcowe i porównanie metod\n") + f.write("### Wyniki końcowe:\n") + f.write( + f"- **Psychrometr Assmanna ($w_1$):** $${avg_w1:.2f} \\% \\pm {uc:.2f} \\%$$\n") + f.write(f"- **Metoda tabelaryczna ($w_2$):** $${avg_w2:.2f} \\%$$\n") + f.write( + f"- **Higrometr włosowy ($w_3$):** $${g_w_3} \\% \\pm {u_w3:.2f} \\%$$\n") + f.write( + f"- **Higrometr pojemnościowy ($w_4$):** $${g_w_4} \\% \\pm {u_w4:.2f} \\%$$\n\n") + + f.write("### Różnice wskazań (względem metody wzorcowej $w_1$):\n") + f.write(f"- $w_1 - w_3 = {avg_w1:.2f} - { + g_w_3} = \\mathbf{{{avg_w1 - g_w_3:.2f} \\text{{ p.proc.}}}}$\n") + f.write(f"- $w_1 - w_4 = {avg_w1:.2f} - { + g_w_4} = \\mathbf{{{avg_w1 - g_w_4:.2f} \\text{{ p.proc.}}}}$\n") + + print("Gotowe. Plik 'pelne_obliczenia_obsidian.md' został wygenerowany.")