Posted by : Việt Nam Tiêu Sáo 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

Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Kiến thức tổng quan - Kiến Thức Tổng Quan - Powered by Blogger - Designed by SnowBlack -