με την παράμετρο \(t\) να παίζει το ρόλο της γωνίας και να παίρνει τιμές σε ένα διάστημα \([0,Τ]\) παριστάνουν (συγκρίνετε με τις παραμετρικές εξισώσεις για τον κύκλο, όπου η συνάρτηση \(R(t)\) είναι σταθερή) μια περιστροφική κίνηση γύρω από το \((0,0)\) τέτοια ώστε η απόσταση από το \((0,0)\) τη χρονική στιγμή \(t\) δίνεται από τη συνάρτηση \(R(t)\). Αν η συνάρτηση αυτή είναι αύξουσα τότε έχουμε την παρακάτω εικόνα μιας σπείρας. Το πλήθος των περιστροφών που θα κάνει εξαρτάται από το πόσο μεγάλο είναι το \(T\).
import matplotlib.pyplot as plt
import math
def R(t): # Η συνάρτηση αυτή μας λέει πόσο γρήγορα απομακρυνόμαστε από το (0,0)
return t*t*t
dt = 0.01 # Διακριτοποίηση της παραμέτρου t
T = 4*math.pi # Άνω όριο της παραμέτρου t. Ποιο μεγάλο T σημαίνει περισσότερες περιστροφές
N = int(T/dt)+1 # Πόσα είναι τα t που θα έχουμε.
t = [ i*dt for i in range(N) ] # Η λίστα των t
x = [ R(s)*math.cos(3*s) for s in t ] # Η λίστα των x(t)
y = [ R(s)*math.sin(3*s) for s in t ] # Η λίστα των y(t)
plt.plot(x, y, "b") # Σχεδιάζουμε
plt.axes().set_aspect('equal')
plt.show()
Για να προκύψει ένα σχήμα με τον ένα του άξονα μόνο συμπιεσμένο διαιρούμε όλα τα \(y(t)\), όπως φαίνεται παρακάτω.
Αν κάνουμε το ίδιο με την παραμετρική αναπαράσταση ενός κύκλου προκύπτει έλλειψη. Αυτό φαίνεται στο μεθεπόμενο πρόγραμμα.
import matplotlib.pyplot as plt
import math
def R(t):
return t*t*t
dt = 0.01
T = 4*math.pi
N = int(T/dt)+1
t = [ i*dt for i in range(N) ]
x = [ 0.2*R(s)*math.cos(s) for s in t ] # Διαιρούμε τα x(t) με 5 (σε σχέση με το πρηγούμενο)
y = [ R(s)*math.sin(s) for s in t ]
plt.plot(x, y, "b")
plt.axes().set_aspect('equal')
plt.show()
import matplotlib.pyplot as plt
import math
def plot_polygon(L):
"""
L είναι μια λίστα ζευγών (λίστες μήκους δύο, [x, y]) και ζωγραφίζουμε
το πολύγωνο που ορίζουν οι κορθφές αυτές.
"""
x = [pair[0] for pair in L] + [ L[0][0] ]
y = [pair[1] for pair in L] + [ L[0][1] ]
minx = min(x)
maxx = max(x)
miny = min(y)
maxy = max(y)
wx = maxx-minx
wy = maxy-miny
minx -= 0.1*wx
maxx += 0.1*wx
miny -= 0.1*wy
maxy += 0.1*wy
plt.plot(x, y)
plt.axis([minx, maxx, miny, maxy])
plt.show()
theta = [i*2*math.pi/200. for i in range(200)] # Η λίστα τιμών της παραμέτρου θ
pairs = [[0.2*math.cos(t), math.sin(t)] for t in theta] # Οι κορυφές του πολυγώνουμε, μια για κάθε τιμή του θ
plt.axes().set_aspect('equal')
plot_polygon(pairs)
η οποία παριστάνει τη σπείρα που φαίνεται παρακάτω. Η σπείρα αυτή ξεκινάει (για χρόνο \(t=0\)) από το σημείο (1,0) και έως το χρόνο 1 πέφτει πάνω στο (0,0), αφού πρώτα περιστραφεί άπειρες φορές γύρω από το (0,0).
import matplotlib.pyplot as plt
import math
def R(t):
return 1.-t
def phi(t):
return (1./(1.-t) - 1.)
dt = 0.001
T = 0.98 # Δεν πάμε μέχρι το χρόνο 1 για να μην έχουμε πρόβλημα με τον παρανομαστή σην φ(t).
N = int(T/dt)+1
t = [ i*dt for i in range(N) ]
x = [ R(s)*math.cos(phi(s)) for s in t ]
y = [ R(s)*math.sin(phi(s)) for s in t ]
plt.plot(x, y, "b")
plt.axes().set_aspect('equal')
plt.show()
Εδώ φαίνεται η συνάρτηση \(\cos\phi(t)\) του προηγούμενου προγράμματος.
import matplotlib.pyplot as plt
import math
def cosphi(t):
return math.cos(1./(1.-t) - 1.)
epsilon = 1e-4
N = 200
h = (1.-epsilon)/200
t = [i*h for i in range(200)]
f = [cosphi(s) for s in t]
plt.plot(t, f)
plt.show()
Γι'αυτό πέρα από τη συνάρτηση \(f(x)\) (που την επιλέγουμε, αυθαίρετα, να είναι η συνάρτηση \(f(x) = \sin 25x\)) γράφουμε και μια συνάρτηση df(x)
που σκοπός της είναι να υπολογίζει την παράγωγο της συγκεκριμένης \(f(x)\).
import matplotlib.pyplot as plt
import math
def f(x):
return math.sin(25*x)
def df(x):
return 25*math.cos(25*x)
x0 = 0.1
N=100
x = [i*h for i in range(N+1)]
y = [f(t) for t in x]
yL = [df(x0)*(t-x0)+f(x0) for t in x]
plt.plot(x, y, x, yL, "r")
plt.show()
Στο επόμενο πρόγραμμα προσπαθούμε να αποφύγουμε το να γράψουμε τη συνάρτηση df(x)
. Ο λόγος είναι ότι θέλουμε, όταν αλλάζουμε τη συνάρτηση f(x)
, για να πάρουμε ένα νέο γράφημα και εφαπτόμενη, να μη χρειάζεται να αλλάξουμε και την df(x)
.
για κάποια πολλή μικρή τιμή του \(\delta>0\), θυμούμενοι ότι το όριο της παραπάνω ποσότητας για \(\delta\to 0\) είναι ακριβώς η παράγωγος της \(f\) στο \(x_0\). Αυτό το υλοποιούμε στη συνάρτηση ndf(x)
(προσέξτε ότι όταν αλλάξουμε τον τύπο για την \(f(x)\) δε χρειάζεται να επέμβουμε στη συνάρτηση ndf(x)
).
Το πόσο καλή είναι αυτή η προσέγγιση της παραγώγου εξαρτάται φυσικά και από τη συνάρτηση \(f(x)\) και από το σημείο \(x_0\), και η τιμή \(\delta=0.001\) που χρησιμοποιούμε εδώ μπορεί να μην είναι αρκετά καλή για κάποια άλλη συνάρτηση (δοκιμάστε π.χ. να αυξάνετε τον αριθμό 25 στον ορισμό της f(x)
και θα παρατηρήσετε ότι η προσέγγιση της εφαπτόμενης ευθείας χειροτερεύει).
import matplotlib.pyplot as plt
import math
def f(x):
return math.sin(25*x)
def ndf(x):
delta = 0.001
return (f(x+delta)-f(x))/delta
x0 = 0.1
N=100
h = 1./100
x = [i*h for i in range(N+1)]
y = [f(t) for t in x]
nyL = [ndf(x0)*(t-x0)+f(x0) for t in x]
#plt.axes().set_aspect('equal')
plt.plot(x, y, x, nyL, "r")
plt.show()