Εργασία 5: Προβλήματα αρχικής τιμής και οριακών συνθηκών

Εργασία 5: Προβλήματα αρχικής τιμής και οριακών συνθηκών#

Οδηγίες#

  • Όι ζητούμενες συναρτήσεις δεν πρέπει έχουν αναφορές σε global μεταβλητές εκτός από τις σταθερές καθιερωμένων μονάδων κώδικα (π.χ numpy.pi) και όσες μεταβλητές δίνονται στο πρώτο κελί.

  • Ο αριθμός μητρώου πρέπει να είναι σύμφωνος με αυτόν που έχει δηλωθεί στο προφίλ του eclass.

  • Όπου χρησιμοποιούνται ψηφία του αριθμού μητρώου, πρέπει να είναι απευθείας δηλωμένα στον κώδικα (hard-coded) κάθε συνάρτησης και όχι να εξάγονται από τον ΑΜ.

  • Το αρχείο της εργασίας πρέπει να τρέχει εξ ολοκλήρου (Run All) για να βαθμολογηθεί.

# Εισαγωγή μονάδων κώδικα και δεδομένων
# - Μην αλλάζετε αυτό το κελί.

import numpy as np
import matplotlib.pyplot as plt
# Στοιχεία φοιτητή
# - Εισάγετε το όνομά σας με ελληνικούς χαρακτήρες.

onoma = "onoma"
eponymo = "eponymo"
AM = 3100999

Άσκηση 1#

Για την προσομοίωση ενός οικοσυστήματος με ένα θήραμα (\(Ν_0\)) και ένα θηρευτή (\(Ν_1\)) μπορεί να χρησιμοποιηθεί το μοντέλο Lotka-Volterra. Οι ετήσιοι ρυθμοί μεταβολής των πληθυσμών \(N\) δίνονται από το σύστημα συνήθων διαφορικών εξισώσεων:

\[\begin{split} \begin{aligned} \frac{dN_0}{dt}&=&0.67 N_0&-& 0.67\cdot 10^{-3} N_0 N_1\\ \frac{dN_1}{dt}&=& -N_1 &+& 0.5\cdot 10^{-3} N_0 N_1 \end{aligned} \end{split}\]

όπου \(t\) ο χρόνος σε έτη.

Δίνονται οι αρχικοί πληθυσμοί

  • \(N_0(0)=1000+100a-50b\)

  • \(N_1(0)=300+30a-15c\)

όπου a,b και c, τα 3 τελευταία ψηφία του αριθμού μητρώου σας (c=τελευταίο).

Γράψτε μια συνάρτηση myfunction1, η οποία δέχεται ως είσοδο το χρονικό βήμα \(dt\) σε έτη και υπολογίζει την εξέλιξη των πληθυσμών από τον χρόνο 0 έως τα 10 έτη με την συνάρτησης solve_ivp της SciPy και συγκεκριμένα την μέθοδο Runga-Kutta που έχει ακρίβεια υπολογισμών 4ης και 5ης τάξης. Η επίλυση πρέπει να περιλαμβάνει χρονικές στιγμές σταθερού βήματος \(dt\) από 0 έως και την τελική τιμή του χρόνου. Στην συνέχεια η συνάρτηση πρέπει να επιστρέφει ένα πίνακα 4 τιμών με:

  • το ελάχιστο \(N_0\)

  • το μέγιστο \(N_0\)

  • το ελάχιστο \(N_1\)

  • το μέγιστο \(N_1\)

Ελέγξτε τα αποτελέσματα της συνάρτησης για τις τιμές χρονικού βήματος \(dt\):

  • \(1 \text{day} = \frac{1}{365} \text{year}\)

  • \(1 \text{month} = \frac{1}{12} \text{year}\)

  • \(1 \text{year}\)

Note

Ερώτηση για τις εξετάσεις: Ποιο χρονικό βήμα θα επιλέγατε για να πετύχετε σχετική ακριβεια \(1\times 10^{-3}\) στις επιστρεφόμενες τιμές;

# Λύση της άσκησης 1
# - Σε αυτό το κελί γράψτε μόνο τις ζητούμενες συναρτήσεις χωρίς print και input.
def myfunction1(dt:float) -> np.ndarray:
    return np.array([0.,0.,0.,0.])
# Πρόχειρο άσκησης 1
# - Σε αυτό το κελί μπορείτε να τυπώσετε μεταβλητές και να κάνετε γραφικές παραστάσεις για επαλήθευση. Δεν λαμβάνεται υπόψη στην βαθμολόγηση.

Άσκηση 2#

Ένα ολοκληρωμένο κύκλωμα ισχύος από πυρίτιο έχει τετραγωνικό σχήμα με πλευρά \(L\) και πάχος \(w\). Η μία μεγάλη πλευρά του έχει μεταλλική βάση με γνωστή θερμική αντίσταση \(R_{th}\), ενώ όλες οι άλλες πλευρές μπορούν να θεωρηθούν μονωμένες. Κατά την λειτουργία του παράγεται θερμότητα \(\dot{q}\) ομοιόμορφα σε όλο τον όγκο του. Υπολογίστε την θερμοκρασία κατά μήκος του πάχους. Ο υπολογισμός αυτός είναι χρήσιμος για τον έλεγχο της μέγιστης θερμοκρασίας, η οποία δεν πρέπει να ξεπερνά τους \(120°C\) σε ηλεκτρονικά ισχύος.

Το πρόβλημα αυτό είναι μονοδιάστατο μόνιμης κατάστασης και περιγράφεται από την διαφορική εξίσωση:

\[ -k\frac{d^2T}{dx^2}=S \]

όπου \(S\) η παραγωγή θερμότητας στην μονάδα του όγκου:

\[ S=\frac{\dot{q}}{V} \]

Για την επίλυσή του, εφαρμόστε πεπερασμένες διαφορές ή πεπερασμένους όγκους διακριτοποιώντας το πάχος \(L\) σε \(n+1\) σημεία υπολογισμού με \(n=10\) και βήμα \(Δx=\dfrac{w}{n}\). Θεωρείστε ότι τα ακραία σημεία αντιστοιχούν σε κελιά πάχους \(\frac{Δx}2\) και χρησιμοποιείστε τις παρακάτω σχέσεις για τις οριακές συνθήκες:

  • Μονωμένη πλευρά (x=0)

\[ -k\frac{T_1-T_0}{Δx}=S\frac{Δx}2 \]
  • Πλευρά με μεταλλική βάση (x=w)

\[ -k\frac{T_n-T_{n-1}}{Δx}+S\frac{Δx}2=\frac{1}{R_{th}L^2} (T_n-T_{a}) \]

Στην συνέχεια γράψτε μια συνάρτηση myfunction2, η οποία δέχεται ως όρισμα την θερμική ισχύ \(\dot{q}\) και επιστρέφει ένα διάνυσμα με τις θερμοκρασίες \([Τ_0,Τ_1,\dots,T_{n}]\) σε \([°C]\). Για την επίλυση του γραμμικού συστήματος μπορεί να επιλεγεί οποιαδήποτε μέθοδος.

Δίνονται:

  • η πλευρά \(L=10\text{mm}\)

  • το πάχος \(w=\left(2+\dfrac{c}{10}\right)\text{mm}\)

  • ο συντελεστής θερμικής αγωγιμότητας του πυριτίου \(k=150 \frac{W}{mK}\)

  • η θερμική αντίσταση της μεταλλικής βάσης \(R_{th}=2 \frac{K}{W}\)

  • η θερμοκρασία του αέρα \(Ta=(20+a-b)°C\) (αν αφήσετε αυτό το μέγεθος σε βαθμούς Κελσίου, το αποτέλεσμα που θα πάρετε θα έχει κι αυτό τις ίδιες μονάδες)

Ελέγξτε τα αποτελέσματα της συνάρτησης για τις τιμές θερμικης ισχύος \(\dot{q}\):

  • \(1 \text{W}\)

  • \(10 \text{W}\)

  • \(50 \text{W}\)

Για δικιά σας κατανόηση μπορείτε να κατασκευάσετε στο πρόχειρο γράφημα θερμοκρασίας[°C]-απόστασης[m] με τα σημεία \((0,Τ_0),(Δx,T_1),(2Δx,T_2),\dots,(nΔx,T_n)\).

# Λύση της άσκησης 2
# - Σε αυτό το κελί γράψτε μόνο τις ζητούμενες συναρτήσεις χωρίς print και input.
def myfunction2(qdot:float) -> np.ndarray:
    return np.zeros(11)
# Πρόχειρο άσκησης 2
# - Σε αυτό το κελί μπορείτε να τυπώσετε μεταβλητές και να κάνετε γραφικές παραστάσεις για επαλήθευση. Δεν λαμβάνεται υπόψη στην βαθμολόγηση.