So sánh Phương Pháp Tiếp Tuyến và Cát Tuyến


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ố f(x) 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 x_n , phương trình tiếp tuyến của đồ thị hàm số f(x) là:
y = f'(x_n)(x - x_n) + f(x_n)

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 x_{n+1} :
x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}

Công thức tổng quát:
x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}

Điều kiện áp dụng:

  • Hàm số f(x) phải khả vi trên khoảng chứa nghiệm.
  • Đạo hàm f'(x) không được bằng 0 tại các bước tính x_n .

Ưu điểm:

  • Nhanh (hội tụ bậc hai nếu điểm ban đầu x_0 đủ gần nghiệm).

Nhược điểm:

  • Cần tính đạo hàm f'(x) , có thể phức tạp.
  • Nếu điểm ban đầu x_0 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 f'(x) . 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 x_0 x_1 .
  • Tìm giao điểm của đường cát tuyến (đi qua hai điểm (x_0, f(x_0)) (x_1, f(x_1)) ) với trục hoành.

Công thức của x_{n+1} :
x_{n+1} = x_n - \frac{f(x_n)(x_n - x_{n-1})}{f(x_n) - f(x_{n-1})}

Công thức tổng quát:
x_{n+1} = x_n - \frac{f(x_n)(x_n - x_{n-1})}{f(x_n) - f(x_{n-1})}

Ư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 x_n x_{n-1} .

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ếnPhương pháp Cát Tuyến
Yêu cầu đạo hàmCần f'(x) Không cần f'(x)
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ả viKhông cần khả vi
Độ phức tạp thuật toánCao 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 x^3 - x - 2 = 0 với f'(x) = 3x^2 - 1 .

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 x^3 - x - 2=0 . Kết quả tìm được nghiệm gần đúng khoảng x \approx 1.521 .

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.

Leave a Reply

error: Content is protected !!