Phương pháp cát tuyến để giải phương trình phi tuyến

1. Kiến thức cơ bản
a) Nghiệm và khoảng phân ly nghiệm
- Cho f(x) là hàm số xác định và liên tục trên miền D của trục số
thực. Xét phương trình ( ) = 0
(1-1)
- ∗ ∈ là nghiệm của PT (1-1) nếu ( ∗ ) = 0
Định nghĩa 1.1: Nếu khoảng ( , ) chỉ chứa 1 nghiệm ∗ của PT
(1-1) thì ta gọi khoảng ( , ) là khoảng phân ly của nghiệm ∗

Định lý 1.1: Về sự tồn tại nghiệm
Giả sử (x) là hàm số liên tục trên đoạn kín ( , ) và nhận giá trị
trái dấu tại các điểm mút , hay (a). (b) < 0. Khi đó, tồn tại ít
nhất 1 điểm ∗ trong khoảng ( , ) sao cho ( ∗ ) = 0.
Định lý 1.2: Về sự tồn tại duy nhất nghiệm
Nếu hàm (x) liên tục và đơn điệu (tăng/giảm) trong khoảng
( , ) và (a). (b) < 0 thì ( , ) là khoảng phân ly của một
nghiệm của phương trình (x) = 0.

 Do 1 PT có thể có nhiều nghiệm số thực nên ta cần xác định rõ
khoảng phân ly nghiệm! Có thể dùng cách khảo sát sự biến
thiên của hàm hoặc dùng đồ thị để tìm ra khoảng phân ly
nghiệm.
b) Phương pháp chia đôi

c) Phương pháp lặp đơn

d) Phương pháp tiếp tuyến (Newton)
Không có việc gì khó
Chỉ sợ bạn ko làm =))

ta có: = ( − ( ) (d.… . ( )): = ( )( − ) + ( ) (d.2) ) Lặp lại với ta thu được và cứ thế ra đc .Khi đó có thể lấy một bất kỳ gần với . tức là thay PT này bởi 1 PT tuyến tính gần đúng trong lân cận nghiệm! Gọi nghiệm cần tìm là = . ta có: = e) Phương pháp cát tuyến i. Mô tả Ý tưởng của phương pháp tiếp tuyến là “Tuyến tính hóa” PT f(x) = 0.3) . PT tiếp tuyến tại điểm ( .1) Ta thấy x2 dần đến r. Tổng quát.i. (d. Dễ dàng.Như hình vẽ tiếp tuyến giao với tại . tiệm cận vs nghiệm cần tìm.Kẻ tiếp tuyến của đồ thị tại ( ). Mô tả − ( ( ) ) Không có việc gì khó Chỉ sợ bạn ko làm =)) .

là các giá trị cho trước.2) = 2. ). ) Thuật toán B1: Thiết lập hàm ( ) cần tính. thường lấy là 2 đầu mút của khoảng phân ly nghiệm ( .1) ) ( ) .)ở Ở phương pháp tiếp tuyến (Newton). = Tính giá trị của hàm tại các điểm mút. = − ( ) (e. sai số ! B2: = . việc tính giá trị ( công thức (d.3.3) có thể sẽ gặp khó khăn nếu ( ) là hàm phức tạp ) = tỷ phân  Người ta thay ( ( ) ( Phương pháp lặp bây h là: Trong đó: ii. CODE a) Phương pháp chia đôi … b) Phương pháp lặp đơn … c) Phương pháp tiếp tuyến (Newton) … d) Phương pháp cát tuyến function [] = secantgr() %-------------------------------------------------------------------------%Secant Gi?i PT phi tuy?n tính = PP cát tuy?n % Input: % f: Hàm c?n tìm nghi?m % a: ?i?m mút d??i kho?ng phân ly nghi?m % b: ?i?m mút trên kho?ng phân ly nghi?m % e: sai s? epsilon % % Output: % Vector x ch?a giá tr? t? x1 ??n xn % Vector p ch?a các giá tr? c?a hàm f(x) t? f(x1) ??n f(xn) Không có việc gì khó Chỉ sợ bạn ko làm =)) . chọn khoảng phân ly ( . … . B3: Tính các giá trị cho đến khi | − |< 2. ( ) (e.

x(i-1) % % Hàm s? d?ng: % A= zeros(n): ma tr?n A là ma tr?n 0. x = zeros(1).% Vector ev ch?a hi?u s? x(i) .À.x(1)). chúng ta thường cho khoảng của x trước sau đó mới viết f(x) = gì đó :-? Nhưng nếu chưa cho khoảng của x thì làm thế nào :D Thử viết phát nó sẽ báo lỗi ngay . x(i) = x(i-1) ./(p(i-1) . p(1). p(i)). x(i). fprintf('So thu tu i \t \t Gia tri x(i) \t \t x(i) . fprintf('\n'). ev(i) = x(i) . tính giá tr? c?a x(i). p(1) = feval(f. p(i) = feval(f. N?u n = 1 => Có th? là vector :D % B = feval(f.x(2)).x1): tr? v? k?t qu? là giá tr? hàm f t?i x = x1 % abs(A): tr? tuy?t ??i c?a A % isreal(A): ki?m tra xem x có là s? th?c ko! %-------------------------------------------------------------------------% Nhap cac gia tri khoi tao f = input('Nhap ham: ').*p(i-1). có 1 chút tớ cần nói qua nếu các bạn muốn nhập hàm vào MATLAB 2012b! Thông thường. giá tr? hàm f t?i x(i) và ev(i) while (abs(ev(i)) > e) i = i + 1. a = input('Nhap gioi han duoi khoang phan ly nghiem: '). %Gán giá tr? cho x(1). i = 2.Ngoài ra. p(2) = feval(f.x(i-1). ev(i) = x(i) . for i=1:length(x) fprintf('\t%d \t\t\t\t %f \t\t\t %f \t\t\t \t\t %f'. nếu bạn định sử dụng syms thì cũng ko đc đâu =)) B ản cũ thì dùng đc (bản trên p máy ý) nhưng vs 2012b thì ko đc th ế :D Không có việc gì khó Chỉ sợ bạn ko làm =)) . fprintf('\n').x(i-1) \t\t\t\t f(x(i))').p(i-2)). x(2). x(2) = b.x(i-1). ev(i).(x(i-1) . e = input('Nhap sai so: ').x(i-1)| > e thì %T?ng i lên 1.x(i-2)). end end Thử phát nhé :D . i.) . %Trong khi tr? tuy?t ??i c?a |x(i) . p(2) x(1) = a.x(i)). p = zeros(1). b = input('Nhap gioi han tren khoang phan ly nghiem: '). end %---------------------------------------------------------------------%In ket qua thoai :)) fprintf('\nKet qua tinh toan:\n').

300000 0.666899 6 1.000000 9. Ket qua tinh toan: So thu tu i Gia tri x(i) x(i) .000000 -2.442039 4 0.161367 -1.3 Nhap gioi han tren khoang phan ly nghiem: 10 Nhap sai so: 1*10^(-5).10).3). sai số là = 1. ) ( .288088 -0.251078 Không có việc gì khó Chỉ sợ bạn ko làm =)) . h chúng ta thử nhập thôi :D Hàm tớ muốn tìm nghiệm là (0.624155 15.535347 -9. … .868655 8 1. . … . VD: muốn viết hàm f(x) = x^2 – 3*x + 2. . ) là biểu thức của hàm.700000 96.877401 0.3.356389 0. … .394290 3.x(i-1) f(x(i)) 1 0. ( .^2 . ) là khai báo các biến sẽ dùng. 10 = − log( ) − 3 có trên khoảng phân ly >> secantgr(). Nhap gioi han duoi khoang phan ly nghiem: 0.234788 -2.000000 3 0. Nhap ham: @(x)(x. . ) Trong đó @( .770135 0.232924 -3.387121 2 10.log10(x) .293459 5 4.521012 0. .570835 7 1. ta phải gõ như sau! = @( )( − 3 ∗ + 2) OK.464653 -2. … . Vậy phải làm sao =))  Trả lời: bạn có thể viết thế này = @( .

804541 0. bị mất :”) Lười quá. gõ tiếng Việt có dấu hết nên đến lúc lên. quen tay.023703 10 1.9 1.000001 12 1. phần vì ko có thời gian! Mấy chỗ chú thích.006893 -0.000160 0.000536 11 1.000000 -0.797488 -0.804381 0.804541 -0.000000 >> Các bạn có thể dùng máy tính để tính lại kết quả nhé :D Bài viết còn nhiều thiếu sót. phần vì mình chỉ tìm hiểu đến mức này. ko muốn sửa nữa :”) Mong các bạn đóng góp thêm vào nhé :D Green Không có việc gì khó Chỉ sợ bạn ko làm =)) .079913 -0.

Sign up to vote on this title
UsefulNot useful