Giới thiệu
Phương pháp Secant cũng được dùng để giải phương trình phi tuyến. Phương pháp này tương tự như phương pháp Newton-Raphson, nhưng ở đây ta không cần tìm đạo hàm của hàm f(x). Chỉ dùng f(x), ta có thể tìm f'(x) số học bằng công thức sai phân Newton. Từ công thức Newton-Raphson, ta biết rằng:

Bây giờ, dùng công thức sai phân, ta được:



Thay f'(x) của công thức Newton-Raphson bằng f'(x) mới, ta có công thức Secant để giải phương trình phi tuyến.

Lưu ý: Đối với phương pháp này, ta cần hai giá trị khởi tạo bất kỳ để bắt đầu tìm nghiệm của phương trình phi tuyến.
Đầu vào và Đầu ra
Đầu vào: Hàm f(x) = (x*x) - (4*x) - 10 Đầu ra: Nghiệm là: -1.74166
Thuật toán
secant(x1, x2)
Đầu vào: Hai giá trị khởi tạo cho nghiệm.
Đầu ra: Nghiệm xấp xỉ của phương trình phi tuyến f(x).
Begin
f1 := f(x1)
f2 := f(x2)
x3 := ((f2*x1) – (f1*x2)) / (f2 – f1)
while relative error of x3 and x2 are > precision, do
x1 := x2
f1 := f2
x2 := x3
f2 := f(x2)
x3 := ((f2*x1) – (f1*x2)) / (f2 – f1)
done
root := x3
return root
End
Ví dụ (C++)
#include <iostream>
#include <cmath>
using namespace std;
double absolute(double value) {
// để tìm giá trị tuyệt đối
if(value < 0)
return (-value);
return value;
}
double f(double x) {
// hàm đã cho x^2-4x-10
return ((x*x)-(4*x)-10);
}
double secant(double x1, double x2) {
double x3, root;
double f1, f2;
f1 = f(x1);
f2 = f(x2);
x3 = (f2*x1-f1*x2)/(f2-f1);
while(absolute((x3-x2)/x3) > 0.00001) {
// kiểm tra độ chính xác của x3
x1 = x2; // dịch giá trị x
f1 = f2;
x2 = x3;
f2 = f(x2); // tìm x2 mới
x3 = (f2*x1-f1*x2)/(f2-f1); // tính x3
}
root = x3;
return root; // nghiệm của phương trình
}
main() {
double a, b, res;
a = 0.5;
b = 0.75;
res = secant(a, b);
cout << "The root is: " << res;
}
Kết quả
The root is: -1.74166