Εργασία 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\) δίνονται από το σύστημα συνήθων διαφορικών εξισώσεων:
όπου \(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\) σε ηλεκτρονικά ισχύος.
Το πρόβλημα αυτό είναι μονοδιάστατο μόνιμης κατάστασης και περιγράφεται από την διαφορική εξίσωση:
όπου \(S\) η παραγωγή θερμότητας στην μονάδα του όγκου:
Για την επίλυσή του, εφαρμόστε πεπερασμένες διαφορές ή πεπερασμένους όγκους διακριτοποιώντας το πάχος \(L\) σε \(n+1\) σημεία υπολογισμού με \(n=10\) και βήμα \(Δx=\dfrac{w}{n}\). Θεωρείστε ότι τα ακραία σημεία αντιστοιχούν σε κελιά πάχους \(\frac{Δx}2\) και χρησιμοποιείστε τις παρακάτω σχέσεις για τις οριακές συνθήκες:
Μονωμένη πλευρά (x=0)
Πλευρά με μεταλλική βάση (x=w)
Στην συνέχεια γράψτε μια συνάρτηση 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
# - Σε αυτό το κελί μπορείτε να τυπώσετε μεταβλητές και να κάνετε γραφικές παραστάσεις για επαλήθευση. Δεν λαμβάνεται υπόψη στην βαθμολόγηση.