Giải phương trình f(x) = 0 bằng phương pháp lặp đơn Nội dung: Giải phương trình f(x) = 0 bằng phương pháp lặp đơn. Cho phương trình x = g(x) và khoảng cách ly nghiệm a,b. Kiểm tra điều kiện hội tụ của phương pháp. Tìm nghiệm xn với n nhập từ bàn phím. Đánh giá sai số xn theo hai công thức tiên nghiệm và hậu nghiệm. Tìm chỉ số n nhỏ nhất để sai số hậu nghiệm nhỏ hơn ϵ với ϵ nhập từ bàn phím.
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
KHOA KHOA HỌC ỨNG DỤNG
BỘ MÔN TOÁN ỨNG DỤNG
- -
BÁO CÁO MÔN HỌC PHƯƠNG PHÁP TÍNH
NHÓM 2
Đề tài 2: Giải phương trình f(x) = 0 bằng phương pháp lặp đơn
Giảng viên hướng dẫn: Hoàng Hải Hà Sinh viên thực hiện:
TP HỒ CHÍ MINH NĂM 2019
Trang 2MỤC LỤC
MỤC LỤC 1
LỜI NÓI ĐẦU 2
PHẦN 1: NỘI DUNG ĐỀ MỤC 3
PHẦN 2: CƠ SỞ LÝ THUYẾT 3
PHẦN 3: THUẬT TOÁN VÀ GIẢI THÍCH 4
PHẦN 4: VÍ DỤ 6
1 Tìm xn và đánh giá sai số 6
a Ví dụ 1 6
b Ví dụ 2 8
2 Tìm n nhỏ nhất để sai số cho trước nhỏ hơn số cho trước 9
a Ví dụ 1 9
b Ví dụ 2 10
TÀI LIỆU THAM KHẢO 12
NHẬN XÉT CỦA GIẢNG VIÊN 13
Trang 3LỜI NÓI ĐẦU
Trong thời đại công nghệ 4.0, Việt Nam đang trên đà phát triển để hòa nhập và sánh vai với các quốc gia trên thế giới Vì vậy, việc ứng dụng khoa học và sáng chế khoa học ở trường học rất thiết thực và quan trọng Nên ngay từ năm đầu, các giảng viên trường ĐH Bách Khoa TP.HCM đã giúp cho các sinh viên ngành kĩ thuật làm quen với các ứng dụng lập trình, trong đó phải nói đến chương trình MATLAB
MATLAB là phần mềm cung cấp môi trường tính toán và lập trình, do công ty Mathworks thiết kế MATLAB cho phép tính toán ma trận, vẽ đồ thị hàm số hay biểu đồ thông tin, thực hiện thuật toán, tạo các giao diện người dùng và liên kết với những chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác Với hơn 40 năm hình thành và phát triển, ngày nay với thiết kế sử dụng tương đối đơn giản và phổ thông MATLAB là công cụ tính toán hữu hiệu để giải quyết các bài toán kỹ thuật
Vì vậy, đối với những bài toán trong môn Phương pháp tính, đặc biệt là các bài toán về phương pháp lặp đơn, phương pháp chia đôi,giải hệ bằng phương pháp Jacobi, giải hệ bằng phương pháp Gauss Seidel,…, thì MATLAB là một công cụ hữu dụng để giải quyết các bài toán một cách đơn giản, dễ hiểu, giúp chúng ta làm
quen và bổ sung thêm kỹ năng sử dụng các chương trình, ứng dụng cho sinh viên
Trang 4PHẦN 1: NỘI DUNG ĐỀ MỤC
Nội dung: Giải phương trình f(x) = 0 bằng phương pháp lặp đơn
1 Cho phương trình x = g(x) và khoảng cách ly nghiệm [a,b]
2 Kiểm tra điều kiện hội tụ của phương pháp
3 Tìm nghiệm xn với n nhập từ bàn phím
4 Đánh giá sai số xn theo hai công thức tiên nghiệm và hậu nghiệm
5 Tìm chỉ số n nhỏ nhất để sai số hậu nghiệm nhỏ hơn 𝜖 với 𝜖 nhập từ bàn phím
PHẦN 2: CƠ SỞ LÝ THUYẾT
Ý tưởng:
Biến đổi tương đương f(x) = 0 x = g(x) (1)
Chọn giá trị ban đầu x0 thuộc khoảng nghiệm (a,b) Thay x = x0 vào vế phải của (1)
ta tính được x1 =g(x0) Tiếp tục như thế ta tính được x2 = g(x1) Quá trình cứ tiếp tục tiếp diễn, ta xây dựng được dãy lặp (xn) theo công thức xn= g(xn-1) Nhiệm vụ chúng
ta là khảo sát sự hội tụ này của dãy (xn) này.
Điều kiện để dãy {𝑥𝑛} hội tụ:
Điều kiện:
Định Nghĩa: Hàm g(x) gọi là hàm co trên đoạn [a,b] nếu ∃q : 0<q<1 sao cho
| g(x) – g(y) | ≤ q | x – y |, ∀x, y ∈[a,b]
Trong đó ; q gọi là hệ số co
Để kiểm tra hàm co, ta dùng định lý sau
Trang 5Định lý : Nếu hàm g(x) liên tục trên [a,b], khả vi trên (a,b) và ∃q : 0<q<1 sao cho:
| g’(x) | ≤ q, ∀x ∈(a,b) Thì g(x) là hàm co với hệ số co q
Định lý (nguyên lý ánh xạ co) :
Giả sử g(x) là hàm co trên [a,b] với hệ số co q, đồng thời g(x) ∈ [a,b], ∀x∈ [a,b] Khi ấy với mọi giá trị ban đầu x0∈ [a,b] tùy ý, dãy lặp {xn} hội tụ về nghiệm của phương trình:
Ta có công thức đánh giá sai số:
|𝑥𝑛− 𝑥̅ | ≤ 𝑞
𝑛
1 − 𝑞|𝑥1− 𝑥0| 𝐶ô𝑛𝑔 𝑡ℎứ𝑐 𝑠𝑎𝑖 𝑠ố𝑡𝑖ê𝑛 𝑛𝑔ℎ𝑖ệ𝑚
|𝑥𝑛 − 𝑥̅ | ≤ 𝑞
1 − 𝑞|𝑥𝑛− 𝑥𝑛−1| 𝐶ô𝑛𝑔 𝑡ℎứ𝑐 𝑠𝑎𝑖 𝑠ố ℎậ𝑢 𝑛𝑔ℎ𝑖ệ𝑚
Từ công thức đánh giá sai số, ta thấy sự hội tụ của phương pháp lặp càng nhanh nếu q càng bé
PHẦN 3: THUẬT TOÁN VÀ GIẢI THÍCH
Thuật Toán:
%Giai pt f(x) = 0 bang phuong phap lap don!
%Nhap pt x = g(x)
disp('Nhap pt x = g(x) va khoang cach ly nghiem [a, b]');
syms x
g = input('Nhap g(x) = ');
a = input('Nhap a = ');
b = input('Nhap b = ');
%Kiem tra su hoi tu cua phuong phap
w = abs(diff(g,x));
t = [a b];
q = max(subs(w,x,t));
Trang 6fprintf('He so co: q = %.4f\n',double(q));
if q < 1
disp('Phuong phap hoi tu!');
else
disp('Phuong phap khong hoi tu!');
end
disp('Chon tinh nang: ');
disp(' 1 Tim xn va danh gia sai so');
disp(' 2 Tim n nho nhat de sai so hau nghiem nho hon esp');
chon = input('Chon: ');
if chon == 1
%tim xn va danh gia sai so
n = input('Nhap n: ');
esp = 0;
else
if chon == 2
%Tim n nho nhat de sai so hau nghiem nho hon esp voi esp nhap tu ban phim!
n = 1000; %so lan lap toi da!
esp = input('Nhap esp: ');
else
disp('Ban da chon sai!')
return;
end
end
x0 = input('Nhap x0: ');
xn = x0;
x1 = subs(g,x,x0);
for i=1:n
xn1 = xn;
xn = subs(g,x,xn1);
%Sai so tien nghiem:
ss1 = q^i *abs(x1 -x0)/(1-q);
%Sai so hau nghiem:
ss2 = q*abs(xn - xn1)/(1-q);
if ss2 < esp
fprintf('Tim duoc n = %d\n',i);
break
end
end
fprintf('x(%d) = %.9f\n',i,double(xn));
Trang 7fprintf('Sai so tien nghiem: %.20f\n',double(ss1));
fprintf('Sai so hau nghiem: %.20f\n',double(ss2));
Giải thích:
function Function <chuỗi kí tự> Tạo hàm mới, tên tập tin hàm là <chuỗi kí tự>
Syms syms t Khai báo biến t là một biến kí hiệu
disp disp(x)
disp(‘chuỗi kí tự’)
Xuất giá trị của biến x ra màn hình
Xuất chuỗi kí tự ra màn hình
Input x=input(‘tên biến’) Nhập vào 1 giá trị cho biến x
Diff Dhfx=diff(f,x,n) Tính đạo hàm riêng cấp n của f theo x
subs I= subs(f,x,a) Thay biến x→a trong hàm f (f(x)→f(a))
If…else…end If <biểu thức điều kiện>
<khối lệnh 1>
else <khối lệnh 2> end
Nếu biểu thức điều kiện đúng thì thực hiện khối lệnh 1, còn sai thì sẽ thực hiện khối lệnh
2 fprintf Fprintf(‘Chuỗi: %.xf\n’,
I, double(…))
In ra màn hình
double Double( ) Chuyển phân số sang số thực
PHẦN 4: VÍ DỤ
1 Tìm x n và đánh giá sai số:
VD1:Cho phương trình 3
x=g x = x+ thỏa điều kiện lặp đơn trên [3,4] Nếu chọn
0
x =3.3 thì nghiệm gần đúng x3theo phương pháp lặp đơn, và sai số của nghiệm gần
đúng x3theo công thức tiên nghiệm và hậu nghiệm là:
Trang 8Giải:
Bấm máy: 3
6x +16
CALC X = 3.3 = x1 = 3.2958 → A
CALC X = Ans = x2 = 3.2950 → B
CALC X = Ans = x3 = 3.2949 → C
Đáp số: x3 = 3.2949
Tính hệ số co q:
2 [3,4] [3,4] 3
2
x
Tiên nghiệm:
Trang 9VD2:Cho phương trình 5 3 3
( )
x=g x = x + thỏa điều kiện lặp đơn trên [0,1] Nếu chọn x0=0.75 thì nghiệm gần đúng x3theo phương pháp lặp đơn, và sai số của nghiệm gần đúng x3theo công thức tiên nghiệm và hậu nghiệm là:
Giải:
Bấm máy: 5 3 3
20x +20
CALC X = 0.75 = x1 = 0.2555 → A
CALC X = Ans = x2 = 0.1542 → B
CALC X = Ans = x3 = 0.1509 → C
Đáp số: x3 = 0.1509
[0,1] [0,1]
q= g x = x = → M
Tiên nghiệm:
Trang 102 Tìm n nhỏ nhất để sai số cho trước nhỏ hơn số cho trước
VD1: Cho phương trình x g x( ) 52 2
x
= = + thỏa điều kiện lặp đơn trên [2.5,3], x0=2.5 .Tìm n nhỏ nhất để nghiệm có sai số 3
1 10
x −x − − theo công thức hậu nghiệm:
Giải:
[2.5,3] [2.5,3]
10 16
25
q g x
x
2
5
1
M
−
−
hay
2
3
2
B
M
−
với B = x0
10
n
x −
−
Vậy n = 11 thì x11= 0.0008thỏa 3
1 10
x −x − − theo công thức đánh giá sai số hậu nghiệm
Trang 11VD2: Cho phương trình
( )
3
x
thỏa điều kiện lặp đơn trên [0,1], x0=0.5 .Tìm n nhỏ nhất để nghiệm có sai số 3
1 10
x −x − − theo công thức hậu nghiệm:
Giải:
Tính hệ số co q:
[0,1]
1
3
q= g x = → M
Nhập máy:
2
2
B
M
2
3
2
B
M
−
−
10
n
−
Trang 12Vậy n = 5 thìx11= 0.0008thõa 3
1 10
x −x − − theo công thức đánh giá sai số hậu nghiệm:
Trang 13TÀI LIỆU THAM KHẢO
[1] Lê Thái Thanh ( 2007) Giáo Trình Phương Pháp Tính Nhà Xuất Bản Giáo Dục tr 20 - 24
[2] Hoàng Hải Hà ( 2019) Bài giảng Phương Pháp Tính Truy cập vào ngày : 20/07/2019 http://e-learning.hcmut.edu.vn/mod/folder/view.php?id=342686
Trang 14NHẬN XÉT CỦA GIẢNG VIÊN GIẢNG DẠY
………
………
………
………
………
………
………
………
………
………
………