- Back to Home »
- Matlab »
- Matlab - Giải phương trình bằng phương pháp chia đôi - BISECTION
Posted by : Unknown
17 September 2014
Matlab - Giải phương trình bằng phương pháp chia đôi - BISECTION
I. Ý tưởng
Thu hẹp dần khoảng phân li nghiệm bằng cách chia đôi
Cho phương trình f(x) = 0, f(x) liên tục và trái dấu tại 2 đầu [a,b]. Giả
sử f(a) < 0, f(b) < 0 (nếu ngược lại thì xét –f(x)=0 ). Theo định lý 1,
trên [a,b] phương trình có ít nhất 1 nghiệm µ.
Để tìm nghiệm gần đúng c, ta thực hiện một số hữu hạn lần quá trình lặp
các bước sau đây: Bước 1: Ta chọn c là điểm chính giữa của đoạn [a, b] c = (a +
b) / 2 Bước 2: Nếu f(c) = 0 thì ta khẳng định ngay c là nghiệm cần tìm và
chuyển sang bước 4, ngược lại chuyển sang bước 3. Bước 3: Nếu f(a)f(c) < 0
thì ta đặt lại b = c và quay về bước 1. Còn nếu f(a)f(c) > 0 thì đặt lại a=c
rồi cũng quay về bước 1. Bước 4: Thông báo nghiệm c tìm được và kết thúc công
việc tìm nghiệm của phương trình f(x) = 0. Quá trình trên gọi là phương pháp
chia đôi bởi vì cứ mỗi một lần lặp lại từ đầu thì khoảng [a, b] cần xem xét
được thu gọn lại chỉ còn một nửa so với lần trước bởi điểm chính giữa c. Quá
trình lặp trên cũng dừng lại khi đoạn [a,b] quá ngắn (nhỏ hơn một số dương rất nhỏ
nào đó, gọi là sai số).
II. Ví dụ matlab minh họa
Cho một hàm f(x) = x3/3+4x2+x-6
trong dải -1<x<3. Viết chương
trình tìm nghiệm phương trình trên bằng cách dùng phương pháp bisection với sử
dụng 2 dự đoán ban đầu với x=0 và x=3.
(Sử dụng lệnh input để cho phép
nhập giá trị các tham số đầu vào từ bàn phím khi chạy chương trình)
Bài làm:
clc; clear all; close all;
a=input('a= '); % Nhập vào giá trị của a
b=input('b= '); % Nhập vào giá trị của b
fa=-inf; % Gán fa bằng âm vô cùng
fb=inf; % Gán fb bằng dương vô
cùng
while (b-a)>eps*b
x=(a+b)/2;
fx=x^3/3 + 4*x*x + x-6;
if sign(fx)==sign(fa)
a=x;
fa=fx;
else
b=x;
fb=x;
end;
end
disp('Nghiem cua
phuong trinh la: ')
x
Làm cái nền làm khó đọc code quá. 1 sao.
ReplyDelete