<jupyter_start><jupyter_text>Likevektskonsentrasjoner (Eksamen høst 2020, oppgave 33(c))Fosgen (COCl$_2$) er en svært giftig gass som ble brukt som stridsgass under første verdenskrig. I dag er fosgenet viktig utgangskjemikalie som kan brukes til å fremstille polykarbonat som bl.a. brukes til å lage "uknuselige"butikkvinduer.Fosgen dekomponerer etter følgende reaksjonslignin:$$\text{COCl}_2(\text{g}) + \rightleftharpoons \text{CO} (\text{g}) + \text{Cl}_2 (\text{g}),$$der likevektskonstanten ved 1100 K er $K_{p} = 1.6 \times 10^{2}.$**Hvis rent fosgen med et initielt trykk på 1.0 atm dekomponerer ved 1100 K, hva blir trykket av de ulike gassene ved likevekt?** Vi skal løse denne oppgaven ved å bruke Python. For å kunne regne symbolsk skal vi bruke et bibliotek som heter [SymPy](https://www.sympy.org/):<jupyter_code>import sympy as sym  # Importer SymPy
# Definer størrelsene vi kjenner
START_COCl2 = 1.0
KP = 1.6e2<jupyter_output><empty_output><jupyter_text>Over har vi listet opp hva vi kjenner. La oss også liste opp alle de ukjente trykkene som vi skal bestemme:- $P_{\text{COCl}_2}$- $P_{\text{CO}}$- $P_{\text{Cl}_{2}}$Vi har altså tre ukjente. La oss definere de som størrelser (spesifikt som [SymPy-symboler](https://docs.sympy.org/latest/tutorial/intro.htmla-more-interesting-example)) slik at vi kan regne med de (dette blir litt som når vi introduserer $x$ osv. for ukjente størrelser i ligninger vi skriver for hånd):<jupyter_code># Vi definerer de ukjente størrelsene:
p_COCl2, p_CO, p_Cl2 = sym.symbols('p_COCl2 p_CO p_Cl2')<jupyter_output><empty_output><jupyter_text>Vi har nå definert konsentrasjonene. Disse er foreløpig ukjente. For å bestemme de, så trenger vi noen ligninger som relaterer de til hverandre. Mulige slike ligninger er:- likevektskonstanten- massebalanser<jupyter_code># La oss begynne med likevektskonstanten:
ligning1 = sym.Eq((p_CO * p_Cl2)/p_COCl2, KP)<jupyter_output><empty_output><jupyter_text>Vi kan be SymPy skrive ut hva denne ligningen er, for å sjekke at den ser ut som vi hadde tenkt:<jupyter_code>ligning1<jupyter_output><empty_output><jupyter_text>Her har vi tre grunnstoffer i forbindelsene som er involvert i reaksjonen, C, O og Cl. Vi kan derfor lage tre molbalanser for disse grunnstoffene. Her bruker vi prinsippet om at grunnstoffer ikke forsvinner i kjemiske reaksjoner. Dvs. hvis vi vet at vi har $n$ mol av grunnstoff $X$ før likevekt innstilles, så må vi fortsatt ha $n$ mol av grunnstoffet $X$ når likevekten er innstilt.Vi lager tre molbalanser:- En for karbon:  $$n_{\text{COCl}_2,{\text{start}}} = n_{\text{COCl}_2,{\text{likevekt}}} + n_{\text{CO},{\text{likevekt}}}$$- En for oksygen:  $$n_{\text{COCl}_2,{\text{start}}} = n_{\text{COCl}_2,{\text{likevekt}}} + n_{\text{CO},{\text{likevekt}}}$$- En for klor:  $$2 n_{\text{COCl}_2,{\text{start}}} = 2 n_{\text{COCl}_2,{\text{likevekt}}} + 2n_{\text{Cl}_2,{\text{likevekt}}}$$Her ser vi at ligningen for karbon og oksygen er identisk. Det betyr at de tre molbalansene i virkeligheten bare girto uavhengige ligninger (f.eks. den for karbon og den for klor).Over skrev vi molbalanser, men her bruker vi trykk. Vi kan regne om ved å bruke ideell gasslov: $P = \frac{nRT}{v}$. Her blir dette bare en felles faktor som vi ganger ligningene over med. Med andre ord, vi skal skrive de direkte med trykk. La oss gjøre det:<jupyter_code>ligning2 = sym.Eq(START_COCl2,  p_COCl2 + p_CO)  # for karbon
ligning3 = sym.Eq(START_COCl2, p_COCl2 + p_Cl2)  # for oksygen/klor
# Skriv ut for dobbeltsjekk:
ligning2
ligning3<jupyter_output><empty_output><jupyter_text>Vi har nå tre ligninger og vi har tre ukjente. Dette kan vi (eller i dette tilfellet, SymPy) løse:<jupyter_code>løsninger = sym.solve([ligning1, ligning2, ligning3], [p_COCl2, p_CO, p_Cl2], dict=True)
løsninger<jupyter_output><empty_output><jupyter_text>En av løsningene SymPy fant gir negative trykk. Dette er en ugyldig løsning og vi beholder bare den som har kun positive løsninger:<jupyter_code># Vis gyldige løsninger:
gyldige = []
for løsning in løsninger:
    if all(i > 0 for i in løsning.values()):
        gyldige.append(løsning)
        print('Gyldig løsning:')
        print(f'- P(COCl2) = {løsning.get(p_COCl2):.3g} atm')
        print(f'- P(CO) = {løsning.get(p_CO):.3g} atm')
        print(f'- P(Cl2) = {løsning.get(p_Cl2):.3g} atm')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11333333333333333, 'fraction_numerical': 0.016551724137931035, 'mean_word_length': 5.314949201741655, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 30, 'https://': 2, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '129790', 'license': 'CC-BY-4.0', 'n_tokens_mistral': 1808, 'n_tokens_neox': 1727, 'n_words': 503, 'path': 'jupyter/likevekt/likevekt2020eksamen.ipynb', 'repo_name': 'andersle/kj1000', 'size': '4350'}