sprawozdanie 105

This commit is contained in:
2026-01-15 19:08:14 +01:00
parent 7b05dcd1fa
commit 29f4fa2bd1
5 changed files with 662 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
![](../../../../media/tabelka.png)
# 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.
<div style="page-break-after: always;"></div>
<div style="page-break-after: always;"></div>
<div style="page-break-after: always;"></div>
<div style="page-break-after: always;"></div>
<div style="page-break-after: always;"></div>
<div style="page-break-after: always;"></div>
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.

View File

@@ -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.

View File

@@ -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")

View File

@@ -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.")