Phương pháp tiếp tuyến và phương pháp cát tuyến là các thuật toán số học để giải phương trình phi tuyến, được sử dụng rộng rãi trong nhiều lĩnh vực khác nhau như kỹ thuật, khoa học máy tính và kinh tế. Đây là hai phương pháp phổ biến trong giải tích số, sử dụng các khái niệm về đạo hàm và gần đúng để tìm nghiệm. Phương pháp tiếp tuyến, còn được biết đến là phương pháp Newton, dựa vào khái niệm về tiếp tuyến của hàm số tại một điểm nhất định, trong khi phương pháp cát tuyến sử dụng hai điểm gần nhất để tạo ra một đường thẳng, từ đó đưa ra một ước lượng cho nghiệm. Việc sử dụng các phương pháp này cho phép các nhà khoa học và kỹ sư giải quyết nhanh chóng và hiệu quả các bài toán phức tạp mà không cần đến các phương pháp giải chính xác, giúp tiết kiệm thời gian và công sức trong quá trình nghiên cứu và phát triển.
1. Phương Pháp Tiếp Tuyến (Newton-Raphson Method)
Phương pháp tiếp tuyến (Newton-Raphson) dựa trên ý tưởng sử dụng tiếp tuyến của đồ thị hàm số tại một điểm gần nghiệm để tiến đến gần nghiệm thực sự.
Ý tưởng:
Tại một điểm , phương trình tiếp tuyến của đồ thị hàm số
là:
Giao điểm của tiếp tuyến này với trục hoành là giá trị gần đúng kế tiếp :
Công thức tổng quát:
Điều kiện áp dụng:
- Hàm số
phải khả vi trên khoảng chứa nghiệm.
- Đạo hàm
không được bằng 0 tại các bước tính
.
Ưu điểm:
- Nhanh (hội tụ bậc hai nếu điểm ban đầu
đủ gần nghiệm).
Nhược điểm:
- Cần tính đạo hàm
, có thể phức tạp.
- Nếu điểm ban đầu
không đủ gần nghiệm, phương pháp có thể không hội tụ.
2. Phương Pháp Cát Tuyến (Secant Method)
Phương pháp cát tuyến là biến thể của phương pháp tiếp tuyến, nhưng không yêu cầu tính đạo hàm . Thay vào đó, nó sử dụng tỷ số hiệu để xấp xỉ đạo hàm.
Ý tưởng:
- Chọn hai điểm gần nghiệm
và
.
- Tìm giao điểm của đường cát tuyến (đi qua hai điểm
và
) với trục hoành.
Công thức của :
Công thức tổng quát:
Ưu điểm:
- Không cần tính đạo hàm, phù hợp cho các hàm không khả vi.
- Dễ thực hiện hơn phương pháp tiếp tuyến.
Nhược điểm:
- Chậm hơn phương pháp tiếp tuyến (hội tụ bậc 1.618, tức chậm hơn bậc 2 của Newton-Raphson).
- Yêu cầu lưu trữ hai điểm
và
.
So Sánh Phương Pháp Tiếp Tuyến và Cát Tuyến
Tiêu chí | Phương pháp Tiếp Tuyến | Phương pháp Cát Tuyến |
---|---|---|
Yêu cầu đạo hàm | Cần | Không cần |
Tốc độ hội tụ | Nhanh (bậc 2) | Chậm hơn (bậc 1.618) |
Áp dụng cho hàm số | Cần khả vi | Không cần khả vi |
Độ phức tạp thuật toán | Cao hơn | Đơn giản hơn |
Ứng dụng của cả hai phương pháp
Phương pháp tiếp tuyến: Phù hợp khi có công thức đạo hàm rõ ràng hoặc dễ tính.
Ví dụ: Tìm nghiệm phương trình với
.
Phương pháp cát tuyến: Thích hợp khi không có công thức đạo hàm, nhưng cần nghiệm gần đúng ban đầu tốt.
Ví dụ: Giải phương trình phi tuyến trong các bài toán thực nghiệm với dữ liệu đo đạc.
Ví dụ sử dụng Python
Phương pháp Tiếp Tuyến (Newton-Raphson)
def newton_method(f, f_prime, x0, tol=1e-6, max_iter=100):
x = x0
for i in range(max_iter):
x_next = x - f(x) / f_prime(x)
if abs(x_next - x) < tol:
return x_next
x = x_next
raise ValueError("Phương pháp không hội tụ.")
# Ví dụ: Giải phương trình x^3 - x - 2 = 0
f = lambda x: x**3 - x - 2
f_prime = lambda x: 3*x**2 - 1
x0 = 1.5
root = newton_method(f, f_prime, x0)
print("Nghiệm:", root)
Phương pháp Cát Tuyến (Secant Method)
def secant_method(f, x0, x1, tol=1e-6, max_iter=100):
for i in range(max_iter):
x_next = x1 - f(x1) * (x1 - x0) / (f(x1) - f(x0))
if abs(x_next - x1) < tol:
return x_next
x0, x1 = x1, x_next
raise ValueError("Phương pháp không hội tụ.")
# Ví dụ: Giải phương trình x^3 - x - 2 = 0
f = lambda x: x**3 - x - 2
x0, x1 = 1.0, 2.0
root = secant_method(f, x0, x1)
print("Nghiệm:", root)
Code MATLAB
Phương Pháp Tiếp Tuyến (Newton-Raphson)
function root = newton_method(f, f_prime, x0, tol, max_iter)
% f: Hàm cần tìm nghiệm
% f_prime: Đạo hàm của hàm f
% x0: Giá trị ban đầu
% tol: Sai số chấp nhận được
% max_iter: Số lần lặp tối đa
% Giá trị khởi tạo
x = x0;
for i = 1:max_iter
% Tính nghiệm gần đúng tiếp theo
x_next = x - f(x) / f_prime(x);
% Kiểm tra điều kiện hội tụ
if abs(x_next - x) < tol
fprintf('Hội tụ sau %d lần lặp\n', i);
root = x_next;
return;
end
% Cập nhật giá trị
x = x_next;
end
error('Phương pháp không hội tụ sau %d lần lặp', max_iter);
end
% Ví dụ: Giải phương trình x^3 - x - 2 = 0
f = @(x) x^3 - x - 2;
f_prime = @(x) 3*x^2 - 1;
x0 = 1.5;
tol = 1e-6;
max_iter = 100;
root = newton_method(f, f_prime, x0, tol, max_iter);
fprintf('Nghiệm tìm được: %.6f\n', root);
Phương Pháp Cát Tuyến (Secant Method)
function root = secant_method(f, x0, x1, tol, max_iter)
% f: Hàm cần tìm nghiệm
% x0, x1: Hai giá trị khởi tạo
% tol: Sai số chấp nhận được
% max_iter: Số lần lặp tối đa
for i = 1:max_iter
% Tính nghiệm gần đúng tiếp theo
x_next = x1 - f(x1) * (x1 - x0) / (f(x1) - f(x0));
% Kiểm tra điều kiện hội tụ
if abs(x_next - x1) < tol
fprintf('Hội tụ sau %d lần lặp\n', i);
root = x_next;
return;
end
% Cập nhật giá trị
x0 = x1;
x1 = x_next;
end
error('Phương pháp không hội tụ sau %d lần lặp', max_iter);
end
% Ví dụ: Giải phương trình x^3 - x - 2 = 0
f = @(x) x^3 - x - 2;
x0 = 1.0;
x1 = 2.0;
tol = 1e-6;
max_iter = 100;
root = secant_method(f, x0, x1, tol, max_iter);
fprintf('Nghiệm tìm được: %.6f\n', root);
So Sánh Hai Phương Pháp
Cả hai đoạn mã đều giải phương trình . Kết quả tìm được nghiệm gần đúng khoảng
.
Chạy lệnh trong MATLAB
Sao chép mã nguồn vào file .m
. Ví dụ:
- Phương pháp tiếp tuyến:
newton_method.m
- Phương pháp cát tuyến:
secant_method.m
Tạo file script khác hoặc sử dụng Command Window để gọi hàm:
root = newton_method(f, f_prime, x0, tol, max_iter);
root = secant_method(f, x0, x1, tol, max_iter);
MATLAB sẽ trả về nghiệm và in kết quả ra màn hình.
Discover more from Science Comics
Subscribe to get the latest posts sent to your email.