---
title: "Εισαγωγή στις Παραγώγους — Ένα Αυτοκίνητο στον Δρόμο"
subtitle: "Προπαρασκευαστικό Μάθημα: Τι Σημαίνει «Ρυθμός Μεταβολής»;"
output:
  html_document:
    toc: true
    toc_float: true
    theme: flatly
    highlight: tango
    code_folding: show
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(
  echo    = TRUE,      # Εμφάνιση του κώδικα R
  message = FALSE,
  warning = FALSE,
  fig.width  = 8,
  fig.height = 4.5
)
```

---

## 🎯 Στόχος του Μαθήματος

Πριν μελετήσουμε πώς αυξάνονται οι πληθυσμοί, χρειαζόμαστε μια βασική ιδέα από
τα μαθηματικά: την **παράγωγο**.

> **Η παράγωγος μιας συνάρτησης μας λέει πόσο γρήγορα αλλάζει.**

Αντί για αφηρημένους τύπους, θα ξεκινήσουμε με κάτι πολύ οικείο:
**ένα αυτοκίνητο που κινείται σε έναν δρόμο.**

---

## 🚗 Η Ιστορία του Αυτοκινήτου

Φανταστείτε ένα αυτοκίνητο που:

- **Φάση Α (0–30 δευτερόλεπτα):** Κινείται με **σταθερή ταχύτητα** 20 m/s.
  Δεν επιταχύνει, δεν φρενάρει — σταθερή κίνηση.

- **Φάση Β (30–60 δευτερόλεπτα):** Πατά γκάζι και **επιταχύνει** ομαλά.
  Η ταχύτητά του αυξάνεται από 20 m/s ως 50 m/s.

Το ερώτημα: Πώς συνδέονται **απόσταση**, **ταχύτητα** και **επιτάχυνση**;

---

## ⚙️ Βήμα 1 — Ορισμός Χρόνου και Παραμέτρων

```{r parameters}
# -------------------------------------------------------
# Ορίζουμε τη χρονική κλίμακα της κίνησης
# seq() δημιουργεί μια ακολουθία τιμών
# από 0 ως 60 δευτερόλεπτα, με βήμα 0.1 sec
# -------------------------------------------------------
t <- seq(0, 60, by = 0.1)   # χρόνος σε δευτερόλεπτα

# Παράμετροι Φάσης Α — σταθερή κίνηση
v0 <- 20        # αρχική ταχύτητα (m/s)
t_switch <- 30  # χρονική στιγμή που αρχίζει η επιτάχυνση (sec)

# Παράμετρος Φάσης Β — επιτάχυνση
# Θέλουμε από t=30 ως t=60 η ταχύτητα να πάει από 20 → 50 m/s
# Άρα: a = Δv / Δt = (50 - 20) / (60 - 30) = 1 m/s²
a <- 1          # επιτάχυνση (m/s²)
```

---

## ⚙️ Βήμα 2 — Υπολογισμός Ταχύτητας

Η ταχύτητα αλλάζει ανάλογα με τη φάση:

$$
v(t) = \begin{cases}
20 & \text{αν } t \leq 30 \\
20 + 1 \cdot (t - 30) & \text{αν } t > 30
\end{cases}
$$

```{r velocity}
# -------------------------------------------------------
# ifelse() λειτουργεί σαν μια επιλογή:
#   αν η συνθήκη είναι TRUE  → πρώτη τιμή
#   αν η συνθήκη είναι FALSE → δεύτερη τιμή
#
# Εδώ: αν t <= 30, ταχύτητα = v0 (σταθερή)
#       αν t >  30, ταχύτητα αυξάνεται γραμμικά
# -------------------------------------------------------
v <- ifelse(
  t <= t_switch,
  v0,                          # Φάση Α: σταθερή ταχύτητα
  v0 + a * (t - t_switch)      # Φάση Β: v = v₀ + a·(t - 30)
)
```

---

## ⚙️ Βήμα 3 — Υπολογισμός Απόστασης

Η απόσταση είναι το **ολοκλήρωμα** της ταχύτητας (ή αντίστοιχα:
η ταχύτητα είναι η **παράγωγος** της απόστασης).

$$
x(t) = \begin{cases}
v_0 \cdot t & \text{αν } t \leq 30 \\
v_0 \cdot 30 + v_0(t-30) + \frac{1}{2}a(t-30)^2 & \text{αν } t > 30
\end{cases}
$$

```{r distance}
# -------------------------------------------------------
# Φάση Α: x = v₀ · t  (ευθύγραμμη ομαλή κίνηση)
# Φάση Β: x = απόσταση Φάσης Α στο t=30
#           + v₀·(t-30) + ½·a·(t-30)²
#
# Υπολογίζουμε πρώτα την απόσταση που έχει διανυθεί
# μέχρι τη στιγμή t=30 (τέλος Φάσης Α)
# -------------------------------------------------------
x_at_switch <- v0 * t_switch   # = 20 × 30 = 600 μέτρα

x <- ifelse(
  t <= t_switch,
  v0 * t,                                              # Φάση Α
  x_at_switch + v0 * (t - t_switch) + 0.5 * a * (t - t_switch)^2  # Φάση Β
)
```

---

## ⚙️ Βήμα 4 — Υπολογισμός Επιτάχυνσης

Η επιτάχυνση είναι η **παράγωγος** της ταχύτητας.

```{r acceleration}
# -------------------------------------------------------
# Φάση Α: ταχύτητα σταθερή → δεν αλλάζει → επιτάχυνση = 0
# Φάση Β: ταχύτητα αυξάνεται κατά 1 m/s κάθε δευτερόλεπτο
#          → επιτάχυνση = 1 m/s²
# -------------------------------------------------------
acc <- ifelse(t <= t_switch, 0, a)
```

---

## 📊 Βήμα 5 — Τα Γραφήματα

Τώρα θα δούμε τις τρεις ποσότητες οπτικά.
Παρατηρήστε πώς αλλάζει το **σχήμα** κάθε γραφήματος στα 30 δευτερόλεπτα.

```{r plots, fig.height=11, fig.width=8}
# -------------------------------------------------------
# par(mfrow = c(3, 1)) → διαιρεί το παράθυρο γραφικών
# σε 3 γραμμές και 1 στήλη (τα 3 γραφήματα το ένα κάτω
# από το άλλο)
# mar = c(bottom, left, top, right) → περιθώρια σε γραμμές
# -------------------------------------------------------
par(mfrow = c(3, 1), mar = c(4.5, 5, 3, 2))

# --- Γράφημα 1: Απόσταση vs Χρόνος ---
plot(t, x,
     type = "l",           # "l" = line (γραμμή)
     lwd  = 2.5,           # πάχος γραμμής
     col  = "#2C7BB6",     # χρώμα (μπλε)
     xlab = "Χρόνος (sec)",
     ylab = "Απόσταση x (m)",
     main = "Απόσταση ως προς Χρόνο  —  x(t)",
     cex.main = 1.3, cex.lab = 1.1)

# Κάθετη διακεκομμένη γραμμή στο t=30 (αλλαγή φάσης)
abline(v = t_switch, lty = 2, col = "gray50")
text(31, max(x) * 0.15, "Αρχή\nεπιτάχυνσης",
     adj = 0, col = "gray40", cex = 0.9)

# Ετικέτα για κάθε φάση
text(13, max(x) * 0.85, "Φάση Α\n(ευθύγραμμη)", col = "#2C7BB6", cex = 0.95)
text(47, max(x) * 0.20, "Φάση Β\n(παραβολή)", col = "#2C7BB6", cex = 0.95)

# -------------------------------------------------------
# Εφαπτομένη ευθεία στη φάση επιτάχυνσης
# Διαλέγουμε τη χρονική στιγμή t₀ = 45 sec
# Σε αυτό το σημείο:
#   - η απόσταση είναι x(45)
#   - η κλίση της εφαπτομένης = παράγωγος = v(45)
# -------------------------------------------------------
t0   <- 45                                                # χρονική στιγμή
x_t0 <- x_at_switch + v0*(t0 - t_switch) + 0.5*a*(t0 - t_switch)^2
v_t0 <- v0 + a*(t0 - t_switch)        # στιγμιαία ταχύτητα = κλίση εφαπτομένης

# Εξίσωση εφαπτομένης ευθείας: y = x(t₀) + v(t₀) · (t - t₀)
t_tan <- seq(t0 - 10, t0 + 10, length.out = 50)
y_tan <- x_t0 + v_t0 * (t_tan - t0)

# Σχεδιάζουμε την εφαπτομένη
lines(t_tan, y_tan, col = "#E66101", lwd = 2.5)

# Σημείο επαφής (τελεία)
points(t0, x_t0, pch = 19, col = "#E66101", cex = 1.6)

# Επεξήγηση με βέλος
arrows(x0 = 53, y0 = x_t0 + 280,
       x1 = t0 + 0.5, y1 = x_t0 + 30,
       length = 0.1, col = "#E66101", lwd = 1.5)
text(53.5, x_t0 + 320,
     paste0("κλίση εφαπτομένης\n= v(", t0, ") = ", v_t0, " m/s"),
     col = "#E66101", cex = 0.9, adj = 0)

# --- Γράφημα 2: Ταχύτητα vs Χρόνος ---
plot(t, v,
     type = "l",
     lwd  = 2.5,
     col  = "#1A9641",    # πράσινο
     xlab = "Χρόνος (sec)",
     ylab = "Ταχύτητα v (m/s)",
     main = "Ταχύτητα ως προς Χρόνο  —  v(t) = dx/dt",
     cex.main = 1.3, cex.lab = 1.1)

abline(v = t_switch, lty = 2, col = "gray50")
text(31, max(v) * 0.25, "Αρχή\nεπιτάχυνσης",
     adj = 0, col = "gray40", cex = 0.9)

# Βέλος που δείχνει ότι η κλίση της γραμμής = επιτάχυνση
text(40, 32, "κλίση = a = 1 m/s²", col = "#1A9641", cex = 0.9)

# --- Γράφημα 3: Επιτάχυνση vs Χρόνος ---
plot(t, acc,
     type = "l",
     lwd  = 2.5,
     col  = "#D7191C",    # κόκκινο
     xlab = "Χρόνος (sec)",
     ylab = "Επιτάχυνση a (m/s²)",
     main = "Επιτάχυνση ως προς Χρόνο  —  a(t) = dv/dt",
     ylim = c(-0.3, 1.5),
     cex.main = 1.3, cex.lab = 1.1)

abline(v = t_switch, lty = 2, col = "gray50")
abline(h = 0, lty = 3, col = "gray70")
text(31, 1.3, "Αρχή\nεπιτάχυνσης",
     adj = 0, col = "gray40", cex = 0.9)
```

---

## 🔎 Η Εφαπτομένη και η Στιγμιαία Ταχύτητα

Στο πρώτο γράφημα μόλις προσθέσαμε μια **εφαπτομένη ευθεία** στην καμπύλη
της απόστασης, στο σημείο t = 45 sec.

> 💡 **Η κεντρική γεωμετρική ιδέα:**
> Η **κλίση** της εφαπτομένης ευθείας σε οποιοδήποτε σημείο της καμπύλης
> απόστασης μας δίνει τη **στιγμιαία ταχύτητα** σε εκείνη ακριβώς τη χρονική
> στιγμή.

Όσο πιο **απότομη** (μεγάλη γωνία με τον οριζόντιο άξονα) είναι η εφαπτομένη,
τόσο πιο **μεγάλη** είναι η στιγμιαία ταχύτητα.

Ας το δούμε σχεδιάζοντας **πολλαπλές εφαπτομένες** σε διαφορετικές χρονικές
στιγμές:

```{r multiple_tangents, fig.height=6}
# -------------------------------------------------------
# Επιλέγουμε τέσσερις χρονικές στιγμές για να δείξουμε
# πώς αλλάζει η κλίση της εφαπτομένης κατά μήκος της καμπύλης
# -------------------------------------------------------
t_points <- c(15, 35, 45, 55)   # στιγμές για τις εφαπτομένες
colors_t <- c("#1A9641", "#FDAE61", "#E66101", "#D7191C")

par(mar = c(4.5, 5, 3, 2))

# Καμπύλη απόστασης
plot(t, x,
     type = "l", lwd = 2.5, col = "#2C7BB6",
     xlab = "Χρόνος (sec)", ylab = "Απόσταση x (m)",
     main = "Η κλίση της εφαπτομένης = στιγμιαία ταχύτητα",
     cex.main = 1.2)

abline(v = t_switch, lty = 2, col = "gray60")

# -------------------------------------------------------
# Loop: για κάθε χρονική στιγμή υπολογίζουμε
#   - τη θέση x(ti)
#   - τη στιγμιαία ταχύτητα v(ti) (= κλίση εφαπτομένης)
#   - και σχεδιάζουμε την εφαπτομένη
# -------------------------------------------------------
for (i in seq_along(t_points)) {

  ti <- t_points[i]

  # Θέση στο σημείο επαφής
  if (ti <= t_switch) {
    xi <- v0 * ti                                           # Φάση Α
    vi <- v0                                                # σταθερή ταχύτητα
  } else {
    xi <- x_at_switch + v0*(ti - t_switch) + 0.5*a*(ti - t_switch)^2
    vi <- v0 + a*(ti - t_switch)                            # επιταχυνόμενη
  }

  # Εφαπτομένη: y = xi + vi · (t - ti)
  tt <- seq(ti - 6, ti + 6, length.out = 30)
  yy <- xi + vi * (tt - ti)

  lines(tt, yy, col = colors_t[i], lwd = 2)
  points(ti, xi, pch = 19, col = colors_t[i], cex = 1.4)

  # Ετικέτα με τη στιγμιαία ταχύτητα
  text(ti, xi - 130,
       paste0("t=", ti, "s\nv=", vi, " m/s"),
       col = colors_t[i], cex = 0.85, font = 2)
}

legend("topleft",
       legend = "Καμπύλη απόστασης x(t)",
       col    = "#2C7BB6", lty = 1, lwd = 2.5,
       bty    = "n", cex = 0.95)
```

### Τι παρατηρούμε

| Στιγμή | Κλίση εφαπτομένης | Στιγμιαία ταχύτητα |
|--------|---------------------|---------------------|
| t = 15 s (Φάση Α) | Μέτρια — σταθερή | 20 m/s |
| t = 35 s (Φάση Β, νωρίς) | Λίγο πιο απότομη | 25 m/s |
| t = 45 s (Φάση Β, μέση) | Πιο απότομη | 35 m/s |
| t = 55 s (Φάση Β, τέλος) | Πολύ απότομη | 45 m/s |

**Στη Φάση Α** όλες οι εφαπτομένες έχουν την **ίδια κλίση** — επειδή η καμπύλη
είναι ευθεία, η ευθεία είναι η ίδια η εφαπτομένη της. Άρα η ταχύτητα είναι
σταθερή (20 m/s).

**Στη Φάση Β** κάθε εφαπτομένη είναι **πιο απότομη** από την προηγούμενη.
Αυτό σημαίνει: η ταχύτητα **αυξάνεται** — δηλαδή έχουμε επιτάχυνση.

### Συμπέρασμα

$$
v(t_0) = \frac{dx}{dt}\bigg|_{t=t_0} = \text{κλίση της εφαπτομένης της } x(t) \text{ στο } t_0
$$

> **Αυτή ακριβώς είναι η γεωμετρική σημασία της παραγώγου:**
> η παράγωγος σε ένα σημείο = κλίση της εφαπτομένης ευθείας σε εκείνο το σημείο.

---

## 💡 Βήμα 6 — Τι Βλέπουμε; Η Κεντρική Ιδέα

Κοιτάξτε τα τρία γραφήματα μαζί και παρατηρήστε:

| Γράφημα | Φάση Α (0–30 sec) | Φάση Β (30–60 sec) |
|---------|-------------------|---------------------|
| **Απόσταση** x(t) | Ευθεία γραμμή | Καμπύλη (παραβολή) |
| **Ταχύτητα** v(t) | Οριζόντια ευθεία | Ανηφορική ευθεία |
| **Επιτάχυνση** a(t) | = 0 | = 1 m/s² (σταθερή) |

### Η σύνδεση:

$$\boxed{v(t) = \frac{dx}{dt}} \qquad \text{και} \qquad \boxed{a(t) = \frac{dv}{dt} = \frac{d^2x}{dt^2}}$$

> **Με απλά λόγια:**
> - Η **ταχύτητα** μας λέει πόσο γρήγορα αλλάζει η **θέση**.
> - Η **επιτάχυνση** μας λέει πόσο γρήγορα αλλάζει η **ταχύτητα**.
> - Αυτή ακριβώς η σχέση εκφράζει η **παράγωγος**.

---

## 🔍 Βήμα 7 — Η Παράγωγος Αριθμητικά (Προαιρετικό)

Δεν χρειαζόμαστε τύπους για να υπολογίσουμε (κατά προσέγγιση) την παράγωγο.
Αρκεί να δούμε **πόσο αλλάζει η συνάρτηση σε ένα πολύ μικρό βήμα χρόνου**.

```{r numerical_derivative}
# -------------------------------------------------------
# diff() υπολογίζει τις διαφορές μεταξύ διαδοχικών τιμών
# Π.χ. diff(c(1, 3, 6)) → c(2, 3)
#
# Η αριθμητική παράγωγος: dx/dt ≈ Δx / Δt
# Δt = 0.1 sec (το βήμα του t που ορίσαμε στην αρχή)
# -------------------------------------------------------
dt <- 0.1

# Αριθμητική παράγωγος απόστασης → πρέπει να μοιάζει με v
v_numerical <- diff(x) / dt

# Αριθμητική παράγωγος ταχύτητας → πρέπει να μοιάζει με acc
a_numerical <- diff(v) / dt

# Ο χρόνος για τις παραγώγους έχει ένα στοιχείο λιγότερο
t_deriv <- t[-1]   # αφαιρούμε το πρώτο στοιχείο

# Σύγκριση: αριθμητική vs αναλυτική ταχύτητα
cat("Μέγιστη απόκλιση v_αριθμητική vs v_αναλυτική:",
    round(max(abs(v_numerical - v[-1])), 4), "m/s\n")
```

```{r comparison_plot, fig.height=5}
# -------------------------------------------------------
# Οπτική σύγκριση: αναλυτική ταχύτητα (γραμμή)
# vs αριθμητική παράγωγος (διακεκομμένη)
# -------------------------------------------------------
par(mar = c(4.5, 5, 3, 2))

plot(t, v,
     type = "l", lwd = 2.5, col = "#1A9641",
     xlab = "Χρόνος (sec)", ylab = "Ταχύτητα (m/s)",
     main = "Ταχύτητα: Αναλυτική vs Αριθμητική Παράγωγος",
     cex.main = 1.2)

lines(t_deriv, v_numerical,
      lty = 2, lwd = 2, col = "#D7191C")

legend("topleft",
       legend = c("Αναλυτική v(t)", "Αριθμητική  dx/dt"),
       col    = c("#1A9641", "#D7191C"),
       lty    = c(1, 2), lwd = 2,
       bty    = "n", cex = 1.0)
```

> Οι δύο καμπύλες **ταυτίζονται σχεδόν τέλεια** — αυτό επιβεβαιώνει ότι
> η παράγωγος της απόστασης είναι πράγματι η ταχύτητα!

---

## 🌿 Σύνδεση με τη Βιολογία

Γιατί μαθαίνουμε αυτά σε μάθημα βιολογίας;

Στη βιολογία συχνά μας ενδιαφέρει **ο ρυθμός** με τον οποίο αλλάζει κάτι:

| Βιολογική Ποσότητα | «Απόσταση» | «Ταχύτητα» (παράγωγος) |
|---------------------|------------|--------------------------|
| Μέγεθος πληθυσμού N(t) | N | dN/dt = ρυθμός ανάπτυξης |
| Συγκέντρωση φαρμάκου C(t) | C | dC/dt = ρυθμός απέκκρισης |
| Βιομάζα B(t) | B | dB/dt = ρυθμός παραγωγής |

> Στα επόμενα μαθήματα θα δούμε ακριβώς αυτό: πώς ο **ρυθμός μεταβολής του
> πληθυσμού** (δηλ. η παράγωγος dN/dt) καθορίζει αν ένας πληθυσμός μεγαλώνει,
> μικραίνει ή σταθεροποιείται.

---

## ✏️ Ερωτήσεις Κατανόησης

1. Στη Φάση Α, η γραφική παράσταση απόστασης-χρόνου είναι **ευθεία γραμμή**.
   Τι σημαίνει αυτό για την παράγωγό της (= ταχύτητα);

2. Στη Φάση Β, η απόσταση ακολουθεί **παραβολή**. Τι σχήμα έχει η ταχύτητα;
   Και η επιτάχυνση;

3. Αν ένας πληθυσμός βακτηρίων αυξάνεται εκθετικά, πώς περιμένετε να μοιάζει
   η γραφική παράσταση του **ρυθμού ανάπτυξης** dN/dt ως προς τον χρόνο;

---

*Στο επόμενο μάθημα: Εκθετική Ανάπτυξη Πληθυσμών — N(t) = N₀ · e^(r·t)*
