דוגמה מסכמת: קינטיקה מסדר ראשון#

במחברת הקודמת למדנו לבחור סוגי גרפים ולשפר את הקריאות שלהם. כאן נשתמש באותם כלים כדי לנתח בעיה כימית אחת: תגובה מסדר ראשון,

\[ A \rightarrow \mathrm{products} \]

המטרה היא להבין איזה גרף עונה על איזו שאלה כימית: איך הריכוז משתנה בזמן, איך מזהים קינטיקה מסדר ראשון, ואיך משווים בין קבועי קצב שונים.

🤖 Ask PyProf.

מטרות השיעור#

בסוף המחברת נרצה לדעת כיצד:

  1. לצייר ריכוז כפונקציה של זמן.

  2. לפרש גרף ליניארי וגרף חצי־לוגריתמי של אותה תגובה.

  3. להשוות כמה ערכים של קבוע הקצב \(k\).

  4. להשתמש בצבע הדרגתי כאשר הפרמטרים מסודרים מספרית.

import numpy as np
import matplotlib.pyplot as plt

פונקציה עבור ריכוז בתגובה מסדר ראשון#

עבור תגובה מסדר ראשון,

\[ [A](t) = [A]_0 e^{-kt} \]

נגדיר פונקציה שמחשבת את הריכוז בזמן \(t\). הפונקציה תקבל את הזמן, את הריכוז ההתחלתי \([A]_0\), ואת קבוע הקצב \(k\).

def concentration_first_order(t, A0, k):
    """Return the concentration [A](t) for a first-order reaction."""
    return A0 * np.exp(-k * t)

דעיכה יחידה#

נתחיל מתגובה אחת:

\[ [A]_0 = 1.0\ \mathrm{mol\,L^{-1}}, \qquad k = 0.25\ \mathrm{min^{-1}}. \]

נחשב את הריכוז בין \(t=0\) לבין \(t=20\) דקות ונצייר גרף קווי, כי הזמן הוא ציר מסודר והעקומה מתארת התפתחות רציפה.

A0 = 1.0      # mol/L
k = 0.25      # 1/min

t = np.linspace(0, 20, 200)  # min
A = concentration_first_order(t, A0, k)

fig, ax = plt.subplots()
ax.plot(t, A)
ax.set_xlabel("time (min)")
ax.set_ylabel("[A] (mol/L)")
ax.set_title("First-order decay")
plt.show()
../../../_images/563b3d37751c3c521aaab2626989eff9fbefb6a606df08e1130722fdbb17caf7.png

הגרף מראה דעיכה אקספוננציאלית: בהתחלה הריכוז יורד מהר, ובהמשך הירידה נעשית איטית יותר. הסיבה לכך היא שהקצב פרופורציוני לריכוז עצמו. כאשר נשאר פחות מהמגיב \(A\), גם קצב התגובה קטן.

גרף חצי־לוגריתמי#

עבור תגובה מסדר ראשון,

\[ [A](t) = [A]_0 e^{-kt}. \]

אם לוקחים לוגריתם טבעי, מקבלים

\[ \ln [A](t) = \ln [A]_0 - kt. \]

כלומר, אם נצייר את \([A]\) בציר \(y\) לוגריתמי ואת הזמן \(t\) בציר \(x\) רגיל, נקבל קו ישר. זהו גרף חצי־לוגריתמי: רק ציר אחד הוא לוגריתמי.

fig, ax = plt.subplots()
ax.semilogy(t, A)
ax.set_xlabel("time (min)")
ax.set_ylabel("[A] (mol/L)")
ax.set_title("First-order decay on a semilog plot")
plt.show()
../../../_images/de51fe713a66ab55b52ddfd766de0775a0f6b8e92a8bae727cf63313cfa570f9.png

בגרף החצי־לוגריתמי, הדעיכה מסדר ראשון נראית כקו ישר. לכן הגרף הזה אינו רק דרך אחרת לצייר את אותם נתונים; הוא דרך לבדוק האם הצורה של הנתונים מתאימה למודל מסדר ראשון.

השוואת כמה קבועי קצב#

כעת נשווה כמה ערכים של \(k\). מכיוון שערכי \(k\) מסודרים מהקטן לגדול, נשתמש בצבעים הדרגתיים. כך הצבע עצמו יעזור לקרוא את הגרף.

A0 = 1.0
rate_constants = [0.10, 0.20, 0.40, 0.80]  # 1/min
colors = plt.cm.viridis(np.linspace(0, 1, len(rate_constants)))

fig, ax = plt.subplots()
for i in range(len(rate_constants)):
    k = rate_constants[i]
    color = colors[i]
    A = concentration_first_order(t, A0, k)
    ax.plot(t, A, color=color, linewidth=2, label=f"k = {k:.2f} min$^{{-1}}$")

ax.set_xlabel("time (min)")
ax.set_ylabel("[A] (mol/L)")
ax.set_title("Effect of the rate constant")
ax.legend()
plt.show()
../../../_images/a035cf5d4c7ad34effb896bf5d3f3bae7973ac991a62d9ec1ecb663b601b0300.png

ככל שקבוע הקצב גדול יותר, הריכוז יורד מהר יותר. הצבעים ההדרגתיים מדגישים את הסדר הזה: הם לא רק מפרידים בין עקומות, אלא מייצגים פרמטר שהולך וגדל.

נחזור על אותה השוואה בגרף חצי־לוגריתמי. כאן קל יותר לראות שכל תגובה מסדר ראשון נותנת קו ישר, וש־\(k\) גדול יותר מתאים לשיפוע שלילי יותר.

fig, ax = plt.subplots()
for i in range(len(rate_constants)):
    k = rate_constants[i]
    color = colors[i]
    A = concentration_first_order(t, A0, k)
    ax.semilogy(t, A, color=color, linewidth=2, label=f"k = {k:.2f} min$^{{-1}}$")

ax.set_xlabel("time (min)")
ax.set_ylabel("[A] (mol/L)")
ax.set_title("First-order decays on a semilog plot")
ax.legend()
ax.grid(True, which="both", alpha=0.3)
plt.show()
../../../_images/3f1b3b31a05e607d6f434effb9303317901a12c1e80f6ee8af3c3bdac0554d27.png

סיכום#

במחברת זו השתמשנו באותם כללי גרפים מהמחברת הקודמת, אבל הפעם בתוך בעיה כימית אחת:

  • גרף קווי הראה את הדעיכה בזמן.

  • גרף חצי־לוגריתמי בדק את הצורה המתמטית של תגובה מסדר ראשון.

  • צבע הדרגתי עזר להשוות ערכים מסודרים של \(k\).

בחירת הגרף נבעה מהשאלה הכימית, לא מרשימת פקודות של Matplotlib.