Jupyter notebook Applied_Maths_II_Labcourse_07_1.ipynb
Εφαρμοσμένα Μαθηματικά ΙΙ
Εργαστηριακή Άσκηση 7: Όρια και Παράγωγοι
Ελευθέριος Μαμάτας ([email protected])
Το σημειωματάριο της έβδομης εργαστηριακής άσκησης χρησιμοποιεί την python για την επίλυση προβλημάτων που σχετίζονται με τα όρια και τις παραγώγους.
Το σημειωματάριο δεν ακολουθεί τον παραδοσιακό τρόπο που γράφουμε κώδικα, δηλαδή σε αρχεία κειμένου. Αποθηκεύεται με βάση τη μορφοποίηση JSON. Με αυτό τον τρόπο μπορούμε να έχουμε σε ένα ενιαίο αρχείο μορφοποιημένο κείμενο, κώδικα και τα αποτελέσματα του κώδικα. Τα σημειωματάρια εκτελούνται σε διακομιστές που τρέχουν εφαρμογές, όπως το jupyter ή το IPython notebook. Πέρα από αυτή τη διαφορά, ο κώδικας της Python είναι ο ίδιος.
Υπενθυμίζουμε οτι ο κώδικας εκτελείται με την επιλογή του κελιού και το συνδυασμό πλήκτρων Shift + Enter. Σε περίπτωση που δεν εκτελεστεί, πατήστε το πλήκτρο F5 (Refresh) και ξαναπροσπαθήστε.
Προετοιμάζουμε το περιβάλλον της python για γραφικές παραστάσεις, τη χρήση των βιβλιοθηκών numpy
και sympy
, αλλά και για την εμφάνιση των μαθηματικών συμβόλων χρησιμοποιώντας το .
Ορίζουμε τα σύμβολα που θα χρησιμοποιήσουμε στις παρακάτω ασκήσεις. Μπορούμε να χρησιμοποιήσουμε την κλάση symbols
για να ορίσουμε πολλά σύμβολα ταυτόχρονα.
Όρια
Τα όρια μπορούν να υπολογιστούν χρησιμοποιώντας τη συνάρτηση limit
. Για παράδειγμα, μπορούμε να υπολογίσουμε το παρακάτω όριο:
Χρησιμοποιώντας τη συνάρτηση limit
:
Εάν θέλουμε να υπολογίσουμε το όριο:
Μπορούμε να υπολογίσουμε τα παρακάτω πλευρικά όρια:
και
Ο χαρακτήρας συμβολίζεται με τη βοήθεια των χαρακτήρων οο. Δηλαδή το παρακάτω όριο:
Υπολογίζεται:
Εφαρμογή 1: Υπολογίστε τα παρακάτω όρια χρησιμοποιώντας τη συνάρτηση limit
. Μπορείτε να επαληθεύσετε τα αποτελέσματα στο χαρτί.
- Το όριο επιλύεται θεωρητικά με τη χρήση των ταυτοτήτων και (όπου και οι ρίζες της εξίσωσης ).
- Επιλύεται θεωρητικά με τη χρήση της ταυτότητας .
Θεωρούμε την παρακάτω συνάρτηση :
Μπορούμε να υπολογίσουμε το παρακάτω όριο με τη βοήθεια της γραφικής παράστασης της συνάρτησης:
Από τη γραφική παράσταση, το όριο φαίνεται να προσεγγίζει την τιμή 0.5. Στη συνέχεια προσεγγίζουμε το μηδέν από τα αριστερά:
Παρατηρούμε ότι όσο πλησιάζουμε το μηδέν, τόσο η τιμή της συνάρτησης τείνει στο 0.5.
Το ίδιο προκύπτει εάν προσεγγίσουμε το μηδέν από τα δεξιά:
Υπολογίζουμε το όριο με τη βοήθεια της συνάρτησης limit
:
Επομένως υπάρχει το όριο της συνάρτησης στο και έχει την τιμή 0.5. Είναι η συνάρτηση συνεχής στο σημείο αυτό;
Για να επιλύσουμε το όριο θεωρητικά, χρησιμοποιούμε την ταυτότητα . Ολοκληρώστε το στο σπίτι σας.
Εφαρμογή 2: Μπορούμε να υπολογίσουμε την παράγωγο μιας συνάρτησης χρησιμοποιώντας το όριο που προκύπτει από τον ορισμό της παραγώγου. Η παράγωγος (derivative) μιας συνάρτησης στο σημείο είναι η κλίση της εφαπτομένης σε αυτό το σημείο:
Ορισμός Μία συνάρτηση , που ορίζεται σε ένα ανοιχτό διάστημα στο οποίο ανήκει το σημείο , είναι παραγωγίσιμη σε αυτό το σημείο, αν το όριο υπάρχει και είναι πεπερασμένο. Δηλαδή ισχύει:
. Η τιμή της έκφρασης αυτής είναι η τιμή της συνάρτησης της παραγώγου f'(x) στο σημείο
Θεωρούμε την παρακάτω συνάρτηση:
Υπολογίστε την παράγωγο της συνάρτησης χρησιμοποιώντας τον ορισμό της παραγώγου. Μπορείτε να χρησιμοποιήστε τη συνάρτηση subs
, ώστε να αντικαταστήσετε το με το .
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-19-9872aae1bb6a> in <module>()
----> 1 print limit((((x+h+pi)**2-(x+pi)**2)/h),h,0,'+')
2 print limit((((x+h+pi)**2-(x+pi)**2)/h),h,0,'-')
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/series/limits.py in limit(e, z, z0, dir)
43 """
44
---> 45 return Limit(e, z, z0, dir).doit(deep=False)
46
47
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/series/limits.py in doit(self, **hints)
170
171 try:
--> 172 r = gruntz(e, z, z0, dir)
173 if r is S.NaN:
174 raise PoleError()
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/series/gruntz.py in gruntz(e, z, z0, dir)
649 else:
650 raise NotImplementedError("dir must be '+' or '-'")
--> 651 r = limitinf(e0, z)
652
653 # This is a bit of a heuristic for nice results... we always rewrite
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/series/gruntz.py in limitinf(e, x)
422 e = e.subs(x, p)
423 x = p
--> 424 c0, e0 = mrv_leadterm(e, x)
425 sig = sign(e0, x)
426 if sig == 1:
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/series/gruntz.py in mrv_leadterm(e, x)
504 w = Dummy("w", real=True, positive=True, finite=True)
505 f, logw = rewrite(exps, Omega, x, w)
--> 506 series = calculate_series(f, w, logx=logw)
507 return series.leadterm(w)
508
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/series/gruntz.py in calculate_series(e, x, logx)
461
462 for t in e.lseries(x, logx=logx):
--> 463 t = cancel(t)
464
465 if t.simplify():
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/polys/polytools.py in cancel(f, *gens, **args)
6359 return f.xreplace(dict(reps))
6360
-> 6361 c, P, Q = F.cancel(G)
6362
6363 if not isinstance(f, (tuple, Tuple)):
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/polys/polytools.py in cancel(f, g, include)
3545
3546 if hasattr(F, 'cancel'):
-> 3547 result = F.cancel(G, include=include)
3548 else: # pragma: no cover
3549 raise OperationNotSupported(f, 'cancel')
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/polys/polyclasses.py in cancel(f, g, include)
677 F, G = dmp_cancel(F, G, lev, dom, include=True)
678 else:
--> 679 cF, cG, F, G = dmp_cancel(F, G, lev, dom, include=False)
680
681 F, G = per(F), per(G)
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/polys/euclidtools.py in dmp_cancel(f, g, u, K, include)
1872 cp, cq = K.one, K.one
1873
-> 1874 _, p, q = dmp_inner_gcd(f, g, u, K)
1875
1876 if K0 is not None:
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/polys/euclidtools.py in dmp_inner_gcd(f, g, u, K)
1586 """
1587 if not u:
-> 1588 return dup_inner_gcd(f, g, K)
1589
1590 J, (f, g) = dmp_multi_deflate((f, g), u, K)
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/polys/euclidtools.py in dup_inner_gcd(f, g, K)
1501 return [K.one], f, g
1502
-> 1503 f = dup_convert(f, K, exact)
1504 g = dup_convert(g, K, exact)
1505
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/polys/densebasic.py in dup_convert(f, K0, K1)
539 return f
540 else:
--> 541 return dup_strip([ K1.convert(c, K0) for c in f ])
542
543
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/polys/domains/domain.py in convert(self, element, base)
95 """Convert ``element`` to ``self.dtype``. """
96 if base is not None:
---> 97 return self.convert_from(element, base)
98
99 if self.of_type(element):
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/polys/domains/domain.py in convert_from(self, element, base)
85
86 if _convert is not None:
---> 87 result = _convert(element, base)
88
89 if result is not None:
/projects/sage/sage/local/lib/python2.7/site-packages/sympy/polys/domains/gmpyrationalfield.py in from_RealField(K1, a, K0)
63 def from_RealField(K1, a, K0):
64 """Convert a mpmath `mpf` object to `dtype`. """
---> 65 return GMPYRational(*K0.to_rational(a))
66
67 def exquo(self, a, b):
TypeError: mpq() requires numeric or string argument
Εφαρμογή 3: Υπολογίστε την παράγωγο της συνάρτησης χρησιμοποιώντας τον ορισμό της παραγώγου.
Παράγωγοι
Η παραγώγιση με τη βοήθεια της Python
γίνεται συνήθως με απλό τρόπο, χρησιμοποιώντας τη συνάρτηση diff
. Η συνάρτηση δέχεται σαν πρώτη παράμετρο την έκφραση που θέλουμε να παραγωγίσουμε και σαν δεύτερη παράμετρο το σύμβολο ως προς το οποίο θα παραγωγίσουμε.
Βασικοί Κανόνες Παραγώγισης
Κανόνας 1: Παράγωγος μιας σταθερής συνάρτησης. Αν ,όπου είναι μια σταθερά, τότε . Παράδειγμα .
Κανόνας 2: Παράγωγος μιας γραμμικής συνάρτησης. Αν ,όπου και είναι σταθερές, τότε . Παράδειγμα .
Κανόνας 3: Παράγωγος μιας δυναμοσυνάρτησης. Αν , τότε . Παράδειγμα .
Κανόνας 4: Παράγωγος γινομένου σταθεράς επί συνάρτηση. Αν , όπου μία σταθερά, τότε . Παράδειγμα .
Κανόνας 5: Παράγωγος του αθροίσματος ή της διαφοράς δύο συναρτήσεων. Αν το , τότε . Παράδειγμα. Αν το , τότε . Παράδειγμα .
Κανόνας 6: Παράγωγος αθροίσματος ενός οποιουδήποτε πεπερασμένου πλήθους συναρτήσεων. Αν τότε . Παράδειγμα
Κανόνας 7: Παράγωγος του γινομένου δύο συναρτήσεων. Αν , τότε . Παράδειγμα .
Κανόνας 8: Παράγωγος πηλίκου δύο συναρτήσεων. Αν , τότε . Παράδειγμα .
Κανόνας 9: Παράγωγος σύνθετης συνάρτησης. Αν και , δηλαδή , τότε . Παράδειγμα .
Κανόνας 10: Παράγωγος της αντίστροφης μίας συνάρτησης. Αν η έχει ως αντίστροφη συνάρτηση την , δηλαδή αν και , τότε όπου .
Κανόνας 11: Παράγωγος της εκθετικής συνάρτησης. Αν τότε . Παράδειγμα .
Κανόνας 12: Παράγωγος της λογαριθμικής συνάρτησης. Αν , τοτε . Παράδειγμα .
Εφαρμογή Επιβεβαιώστε τους παραπάνω κανόνες με τη χρήση της python, χρησιμοποιώντας τα παραδείγματα.
Μπορούμε να παραγωγίσουμε τη συνάρτηση ως προς το x.
Επιπλέον εφαρμογες 4: Υπολογίστε τις παρακάτω παραγώγους χρησιμοποιώντας τη συνάρτηση diff
, όπου a, b σταθερές. Μπορείτε να επαληθεύσετε τα αποτελέσματα στο χαρτί.
Μπορούμε να απλοποιήσουμε το τελευταίο αποτέλεσμα με τη βοήθεια της συνάρτησης simplify
.
Παράγωγοι ανώτερης τάξης: Κοίλες και κυρτές συναρτήσεις
Έστω μια συνάρτηση με πεδίο ορισμού και το σύνολο των σημείων του στα οποία αυτή είναι παραγωγίσιμη. Aντιστοιχίζουμε κάθε στο ορίζουμε τη συνάρτηση η οποία ονομάζεται πρώτη παράγωγος της f. Αν υποθέσουμε ότι το είναι διάστημα ή ένωση διαστημάτων, τότε η παράγωγος της ,αν υπάρχει, λέγεται δεύτερη παράγωγος της f και συμβολίζεται με . Επαγωγικά ορίζεται η νιοστή παράγωγος της f', με και συμβολίζεται με .
Εφαρμογή Να βρείτε τις πρώτες τέσσερις παραγώγους των συναρτήσεων :
Ορισμός
Μια διπλά παραγωγίσιμη συνάρτης είναι κυρτή αν, σε όλα τα σημεία του πεδίου ορισμού της, ισχύει
Μια διπλά παραγωγίσιμη συνάρτη είναι αυστηρά κυρτή, αν ισχύει , με εξαίρεση ενδεχομένως σε ένα μόνο σημείο.
Μια διπλά παραγωγίσιμη συνάρτη είναι κοίλη αν, σε όλα τα σημεία του πεδίου ορισμού της, ισχύει
Μια διπλά παραγωγίσιμη συνάρτη είναι αυστηρά κοίλη,αν ισχύει , με εξαίρεση ενδεχομένως σε ένα μόνο σημείο.
Παράδειγμα Να προσδιορισθούν τα διαστήματα στα οποία η συνάρτηση είναι κυρτή ή κοίλη.
Παράδειγμα Μια βιομηχανία καθορίζει την τιμή πώλησης , σε ευρώ, κάθε μονάδας ενός προϊόντος, συναρτήσει του πλήθους των μονάδων παραγωγής, σύμφωνα με τον τύπο . Το κόστος παραγωγής μια μονάδας είναι ευρώ. Αν η βιομηχανία πληρώνει φόρο ευρώ για κάθε μονάδα προϊόντος, να βρεθεί πόσες μονάδες προϊόντος πρέπει να παράγει η βιομηχανία, ώστε να έχει το μέγιστο δυνατό κέρδος.
Παράδειγμα Το κόστος της ημερήσιας παραγωγής μονάδων ενός βιομηχανικού προϊοντος είναι ευρώ, για , ενώ η είσπραξη από την πώληση των μονάδων είναι . Να βρεθεί η ημερήσια παραγωγή του εργοστασίου, για την οποία το κέρδος γίνεται μέγιστο.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-25-2beb39c95095> in <module>()
----> 1 solve(1 + sin(x))/cos(x) + cos(x)/(1 + sin(x))==4
TypeError: unsupported operand type(s) for /: 'list' and 'Float'
Επιπρόσθετο διάβασμα για τα όρια και την παραγώγιση
http://docs.sympy.org/latest/tutorial/calculus.html#limits - Επίλυση ορίων με τη βοήθεια του
SymPy
.http://docs.sympy.org/latest/tutorial/calculus.html#derivatives - Επίλυση παραγώγων με το
SymPy
.