Εργασία 4: Παραγώγιση και ολοκλήρωση#
Οδηγίες#
Όι ζητούμενες συναρτήσεις δεν πρέπει έχουν αναφορές σε global μεταβλητές εκτός από τις σταθερές καθιερωμένων μονάδων κώδικα (π.χ numpy.pi) και όσες μεταβλητές δίνονται στο πρώτο κελί.
Ο αριθμός μητρώου πρέπει να είναι σύμφωνος με αυτόν που έχει δηλωθεί στο προφίλ του eclass.
Όπου χρησιμοποιούνται ψηφία του αριθμού μητρώου, πρέπει να είναι απευθείας δηλωμένα στον κώδικα (hard-coded) κάθε συνάρτησης και όχι να εξάγονται από τον ΑΜ.
Το αρχείο της εργασίας πρέπει να τρέχει εξ ολοκλήρου (Run All) για να βαθμολογηθεί.
# Εισαγωγή μονάδων κώδικα και δεδομένων
# - Μην αλλάζετε αυτό το κελί.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
WLTP=pd.read_csv("https://raw.githubusercontent.com/onoufrios/numan/refs/heads/main/assign/4/WLTP_class3.csv")
# Οι παρακάτω global μεταβλητές μπορούν να χρησιμοποιηθούν στις συναρτήσεις σας.
t_wltp=WLTP["Time[s]"].to_numpy()
u_wltp=WLTP["Vehicle_speed[km/h]"].to_numpy()
# Στοιχεία φοιτητή
# - Εισάγετε το όνομά σας με ελληνικούς χαρακτήρες.
onoma = "onoma"
eponymo = "eponymo"
AM = 3100999
Άσκηση 1#
Για την έγκριση της κυκλοφορίας ενός επιβατηγού οχήματος στην Ευρωπαϊκή Ένωση γίνονται μετρήσεις σύμφωνα με τον οδικό κύκλο WLTP. Ο οδικός κύκλος για οχήματα κλάσης 3 δίνεται με την μορφή χρονοσειράς της ταχύτητας \(u_{init} [\text{km/h}]\) εδώ.
Έστω μία τροποποίηση του κύκλου WLTP:
όπου a,b και c, τα 3 τελευταία ψηφία του αριθμού μητρώου σας (c=τελευταίο).
Γράψτε μια συνάρτηση myfunction1
, η οποία υπολογίζει την χρονοσειρά της τροποποιημένης ταχύτητας και επιτάχυνσης \(a[\text{m}/\text{s}^2]\):
Στο αρχικό σημείο χρησιμοποιήστε προς τα εμπρός διαφορά, στο τελικό προς τα πίσω διαφορά και στα ενδιάμεσα κεντρικές διαφορές. Στην συνέχεια υπολογίστε την μέγιστη επιτάχυνση \(a_{acc}\) και μέγιστη επιβράδυνση \(a_{dec}\).
Η συνάρτηση πρέπει να δέχεται ως είσοδο τον χρόνο \(t_1\) και να επιστρέφει ένα διάνυσμα δύο τιμών με:
την \(a(t_1)\) που προκύπτει από γραμμική παρεμβολή.
το ποσοστό (τιμές από 0 έως 1) σε σχέση με την μέγιστη επιτάχυνση \(\frac{a}{a_{acc}}\) ή επιβράδυνση \(\frac{a}{a_{dec}}\) αναλόγως το πρόσημο της \(a\).
Ελέγξτε τα αποτελέσματα της συνάρτησης για τις τιμές του \(t\):
200s
1200s
1770s
Δώστε προσοχή στην μονάδες του πίνακα και τις μονάδες που ζητούνται στα αποτελέσματα.
# Λύση της άσκησης 1
# - Σε αυτό το κελί γράψτε μόνο τις ζητούμενες συναρτήσεις χωρίς print και input.
def myfunction1(t1:float) -> np.ndarray:
return np.array([0.,0.])
# Πρόχειρο άσκησης 1
# - Σε αυτό το κελί μπορείτε να τυπώσετε μεταβλητές και να κάνετε γραφικές παραστάσεις για επαλήθευση. Δεν λαμβάνεται υπόψη στην βαθμολόγηση.
Άσκηση 2#
Γράψτε μια συνάρτηση με το όνομα myfunction2
που δέχεται ως όρισμα τον χρόνο \(t_1\) και υπολογίζει το ποσοστό \(p\) (τιμές από 0 έως 1) της απόστασης που έχει διανυθεί σε σχέση με την συνολική απόσταση στον τροποποιημένο κύκλο WLTP της άσκησης 1:
Αν ο χρόνος \(t\) δεν ταυτίζεται με καμία τιμή στον πίνακα, χρησιμοποιήστε την κοντινότερη τιμή.
Ο υπολογισμός της \(S(t_1)\) και \(S_{tot}\) να γίνει δύο φορές χρησιμοποιώντας:
μέθοδο του τραπεζίου (μπορείτε να γράψετε τον δικό σας κώδικα ή να χρησιμοποιήσετε την συνάρτηση trapezoid/trapz)
κανόνα 1/3 του Simpson. Χρησιμοποιήστε την συνάρτηση simpson στην μονάδα κώδικα SciPy, αλλά όχι την απoδοκιμαζόμενη (deprecated) σύνταξη.
Η συνάρτηση πρέπει να επιστρέφει ένα διάνυσμα με δύο τιμές που αντιστοιχούν στις 2 μεθόδους.
Ελέγξτε τα αποτελέσματα της συνάρτησης για τους ίδιους χρόνους με την άσκηση 1.
# Λύση της άσκησης 2
# - Σε αυτό το κελί γράψτε μόνο τις ζητούμενες συναρτήσεις χωρίς print και input.
def myfunction2(t1:float) -> np.ndarray:
return np.array([0.,0.])
# Πρόχειρο άσκησης 2
# - Σε αυτό το κελί μπορείτε να τυπώσετε μεταβλητές και να κάνετε γραφικές παραστάσεις για επαλήθευση. Δεν λαμβάνεται υπόψη στην βαθμολόγηση.