CHƯƠNG 2– PHẦN MÔ TẢ MÃ NGUỒN
2.3 Mô tả mã nguồn câu 3:
import sympy as sp; import numpy as np; import matplotlib.pyplot as plt #Khai báo thư viện
A = 84 #A là một số nguyên đại diện cho 4 chữ số của MSSV (bỏ đi các chữ số 0 ở đầu)
B = A % 2 # B là số dư khi lấy A chia cho 2 print("A B la:",A,B) # In ra kết quả cùa A và B def f_x(a): # Gọi hàm f_x biến chèn a
return A * a*a - 2 * A * a + A # Trả về biểu thức global x # Gọi biến x toàn khu vực
x = sp.Symbol('x') # Gán biến x thành ký tự def ya_tagl(a): # Gọi hàm y_tagl biến chèn a
fx = A * x*x - 2 * A * x + A # Tạo ra biểu thức sau đó gán vào fx
de_f = sp.diff(fx, x) # Tính đạo hàm của fx theo x sau đó gán vào de_f
slp = de_f.subs(x, 2) # Thay giá trị x thành 2 trong hàm de_f rồi gán vào slp return slp * (a - 2) + f_x(2) # Công thức = f'(a)(x - a) + f(a) #
# Trả về 1 phương trình tiếp tuyến (2,A)
def yb_tagl_1(a): # Gọi hàm y_tagl biến chèn a
fx = A * x*x - 2 * A * x + A # Tạo ra phương trình f(x) sau đó gán vào fx
de_f = sp.diff(fx, x) # Tính đạo hàm của fx theo x sau đó gán vào de_f
y_tt = de_f * (x - 0) - A # Phương trình tiếp tuyến tại điểm (0;-A) gán vào y_tt
x_root = sp.solve(fx - y_tt) # Nghiệm của fx trừ cho y_tt rồi gán vào x_root
y_root1 = fx.subs(x, x_root[0]) # Gán giá trị của fx tại x_root[0] vào y_root1
slp_1 = de_f.subs(x,x_root[0]) # Gán giá trị của de_f tại x_root[0] vào slp_1 return slp_1 * ( a - x_root[0]) + y_root1 # Phương trình tiếp tuyến tại điểm (x_root[0],y_root1)
def yb_tagl_2(a): # Gọi hàm y_tag2 biến chèn a
fx = A * x*x - 2 * A * x + A # Tạo ra phương trình f(x) sau đó gán vào fx
de_f = sp.diff(fx, x) # Tính đạo hàm của fx theo x sau đó gán vào de_f
y_tt = de_f * (x - 0) - A # Phương trình tiếp tuyến tại điểm (0;-A) gán vào y_tt
x_root = sp.solve(fx - y_tt) # Nghiệm của fx trừ cho y_tt rồi gán vào x_root
y_root2 = fx.subs(x, x_root[1]) # Gán giá trị của fx tại x_root[1] vào y_root2
slp_2 = de_f.subs(x,x_root[1]) # Gán giá trị của de_f tại x_root[1] vào slp_2 return slp_2 * (a - x_root[1]) + y_root2 # Phương trình tiếp tuyến tại điểm (x_root[1],y_root2)
fxt = A * x*x - 2 * A * x + A # Tạo ra phương trình f(x) sau đó gán vào fxt
de_ft = sp.diff(fxt, x) # Tính đạo hàm của fxt theo x sau đó gán vào de_ft
y_ttt = de_ft * (x - 0) - A # Phương trình tiếp tuyến tại điểm (0;-A) gán vào y_ttt
x_roott = sp.solve(fxt - y_ttt) # Nghiệm của fxt trừ cho y_ttt rồi gán vào x_roott
x1 = np.arange(-10, 15) # Tạo trục hoành chạy từ -10 -> 15 với bước nhảy là 1 rồi gán vào x1
y = list(map(f_x, x1)) # Tạo trục tung với từng giá trị của x1 theo hàm số f_x(a)
ya_tangent = list(map(ya_tagl, x1)) # Tạo ra đường dốc tại tọa độ (2,A)
yb_tangent_1 = list(map(yb_tagl_1, x1)) # Tạo ra đường dốc khi đi qua điểm có tọa độ (0,-A)
yb_tangent_2 = list(map(yb_tagl_2, x1)) # Tạo ra đường dốc khi đi qua điểm có tọa độ (0,-A)
plt.plot(x1, y, label = 'F(x)') # Tạo ra đường f(x) và tạo nhãn
plt.plot(x1, ya_tangent,label = "y = f'(2)(x - 2) + A")
# Tạo ra đồ thị có đường tiếp tuyến tại tọa độ (2,A) và đặt tên nhãn
plt.title('Cau 3a') # In ra tựa đề cho đồ thị
plt.legend() # In ra nhăn
plt.grid() # In ra đường dạng lưới cho đồ thị
plt.show() # In ra đồ thị
plt.plot(x1, y, label = 'F(x)') # Tạo ra đường f(x) và tạo nhãn
plt.plot(x1, yb_tangent_1, 'r', label = "y = f'({0})(x {0}) - {1}".format(x_roott[0], x_roott[1]))
plt.plot(x1, yb_tangent_2, 'r')
# Tạo ra đồ thị có đường tiếp tuyến tại tọa độ (0,-A) và đặt tên nhãn
plt.title('Cau 3b') # In ra tựa đề cho đồ thị
plt.legend() # In ra nhăn
plt.grid() # In ra đường dạng lưới cho đồ thị
plt.show() # In ra đồ thị