TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂNVIỆN CÔNG NGHỆ THÔNG TIN VÀ KINH TẾ SỐ BÀI TẬP LỚN PHƯƠNG PHÁP TÍNH NHÓM 4 Đề tài: Giải PT bằng PP Newton tiếp tuyến Xấp xỉ hàm số bằng PP bình phương nhỏ
Trang 1TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN
VIỆN CÔNG NGHỆ THÔNG TIN VÀ KINH TẾ SỐ
BÀI TẬP LỚN
PHƯƠNG PHÁP TÍNH
NHÓM 4
Đề tài: Giải PT bằng PP Newton tiếp tuyến Xấp xỉ hàm số bằng PP bình phương nhỏ nhất
(TH hàm dạng đa thức)
Trang 2Danh sách thành viên
1 Phùng Lê Minh
2 Phạm Vũ Ngọc Mùi
3 Đặng Phương Nam
4 Hoàng Khánh Nam
5 Hồ Thị Minh Ngân
6 Phạm Sỹ Nguyên
7 Oun Pech
8 Hoàng Văn Phong
9 Đoàn Lê Thu Phương
Trang 3MỤC LỤC
A GIẢI PHƯƠNG TRÌNH BẰNG PHƯƠNG PHÁP NEWTON TIẾP TUYẾN 4
1 Vấn đề đặt ra 4
2 Mục đích của phương pháp 4
3 Mô tả phương pháp 4
4 Nêu ví dụ 6
5 Thuật toán và code 7
6 Đánh giá ưu, nhược điểm 10
B XẤP XỈ HÀM SỐ BẰNG PHƯƠNG PHÁP BÌNH PHƯƠNG NHỎ NHẤT 11
1 Đặt vấn đề 11
2 Mục đích 11
3 Mô tả 11
4 Ví dụ 12
5 Thuật toán và code 13
6 Đánh giá ưu, nhược điểm 14
Trang 4A GIẢI PHƯƠNG TRÌNH BẰNG PHƯƠNG PHÁP NEWTON TIẾP TUYẾN
1 Vấn đề đặt ra
Trong khoa học công nghệ và trong thực tế có rất nhiều bài toán chuyển thành bài toán giải hệ phương trình:
fi(x ,x ,…x1 2 n) = 0; với i=1, 2,…n
Tuy nhiên chỉ trong một số trường hợp đặc biệt ta mới có thể tìm ra nghiệm đúng của hệ phương trình đó, các trường hợp còn lại đều phải tìm cách giải nghiệm gần đúng Một trong các phương pháp tìm nghiệm gần đúng của phương trình là phương pháp Newton tiếp tuyến
2 Mục đích của phương pháp
Bài toán: f(x)=0, với x là giá trị lặp ban đầu Khi f(x) là 1 đa thức bậc 5 trở lên hay là các hàm 0
siêu việt, hầu như không thể giải bằng phương pháp giải tích
Phương pháp Newton tiếp tuyến có thể tìm được nghiệm gần đúng của phương trình
3 Mô tả phương pháp
Giả thiết: f(x) trái dấu tại 2 vị trí a và b, đồng thời tồn tại đạo hàm cấp một f'(x) ≠ 0 trong khoảng [a,b], và đạo hàm cấp 2 tại x (a,b).∈
Nhắc lại định lý về khai triển Taylo của một hàm như sau:
Định lý Cho hàm số f(x) xác định và có đạo hàm đến cấp n+1 tại x và lân cận của x Giả sử0 0
h là một giá trị sao cho x + h cũng thuộc lân cận này Ta có công thức sau đây được gọi là khai0
triển Taylor bậc n của f(x) tại x :0
f(x0 +h) = f(x ) + f'(x ) + f''(x ) + + f 0 0 0 (n) (x0) + f(n+1) (c);
trong đó c (x∈ 0,x +h)0
Dựa vào khai triển Taylo, ta sẽ xác định một hàm (x) và tìm nghiệm của phương ϕ trình bằng phép lặp
xn+1 = (xϕ n) +, Giả sử x là nghiệm đúng của phương trình, còn x là nghiệm xấp xỉ tại bước lặp thứ n Ta n
đặt x=xn+Δxn Theo khai triển Taylo, ta có:
f(x) = f(x + Δx ) = f(x ) + Δxn n n n f'(xn) + f''(c) = 0
+, Nếu Δx đủ nhỏ, ta có công thức gần đúng: n
f(xn) + Δxn f'(xn) ≈ f(x) = 0
Từ đây Δx ≈ n
Trang 5Vì Δx = x - x n n
Do đó x ≈
Và ta suy ra công thức lặp cho phương pháp Newton:
Về ý nghĩa hình học
xn+1 chính là giao điểm của tiếp tuyến đường cong y = f(x) tại điểm (xn,f(xn)) với trục hoành
Do đó phương pháp này còn được gọi là phương pháp tiếp tuyến
Từ điểm (xn,f(xn)) ta vẽ tiếp tuyến của đồ thị y = f(x) Phương trình đồ thị này là
y = f(x ) + f'(xn n)(x-xn)
Giả sử đường tiếp tuyến này cắt trục hoành tại x , ta có: n+1
0 = f(x ) + f'(xn n)(x -xn+1 n)
Từ đây suy ra
(*)
Điều kiện hội tụ của phương pháp Newton
1 f(a) f(b) < 0, tức là giá trị hàm f(x) trái dấu tại hai đầu đoạn [a,b]
2 Hàm f(x) có đạo hàm bậc nhất và bậc 2 f'(x) và f''(x), với f(x) và f'(x) liên tục trên [a,b], f' và f'' không đổi dấu trong (a,b) (tức là hàm f(x) đơn điệu, lồi hoặc lõm trong đoạn [a,b])
3 Xấp xỉ đầu x được chọn [a,b], sao cho f(x ) cùng dấu với f''(x), tức là f(x )f''(x) >0 ∈ 0 0
0 (hàm lồi thì chọn phía giá trị hàm âm, hàm lõm thì chọn phía giá trị dương) Khi đó dãy x được định nghĩa bởi (*) sẽ hội tụ tới α n
Đánh giá sai số của nghiệm gần đúng
Trang 6Ngoài công thức đánh giá sai số |x n – α| ≤ , nếu thêm điều kiện về f''(x), ta có thể đánh giá sai số của nghiệm gần đúng x thông qua 2 gần đúng liên tiếp x và x n n n-1
Định lý Giả sử f'(x) liên tục và không đổi dấu trên [a,b] và thỏa mãn
∃ m , M dương sao cho m ≤ |f'(x)| ; f''(x) ≤ M với x [a,b], khi đó ta có công thức1 2 1 2 ∀ ∈ đánh giá sai số của nghiệm gần đúng:
|x n – α| ≤ |x – x n n-1 | 2
4 Nêu ví dụ
Tính bằng cách giải phương trình f(x) = x - 2 =0 2
Giải:
+ Ta có: f(1) = -1 < 0
f(2) = 2 > 0
→ Thỏa mãn điều kiện [Hàm f(x) trái dấu tại 2 vị trí a và b]
+ Ta có: f'(x) = 2x > 2 với mọi x [1,2] ∈
f’'(x) = 2 > 1 với mọi x [1,2] ∈
→ Thỏa mãn điều kiện đồng thời tồn tại đạo hàm cấp một f'(x) ≠ 0 trong khoảng [a,b], và đạo hàm cấp 2 tại x (a,b)∈
+ Vì f(2) = 2, ta chọn x =2 0
→ f(2).f’’(x) = 2.2 = 4 > 0
→ Thỏa mãn điều kiện 3
* Áp dụng phương pháp Newton, ta có bảng sau:
Ta có thể lấy nghiệm xấp xỉ là 1.41421 Ta biết rằng = 1.414213562, như vậy phương pháp lặp Newton hội tụ rất nhanh
Trang 7Discover more from:
CNTT1142
Document continues below
Kiến trúc máy tính và Hệ điều hành
Đại học Kinh tế Quốc dân
170 documents
Go to course
Đề thi hệ điều hành
17
Ktra20%Lan1-De+Loi Giai
4
Hệ điều hành Chương 1 - Hệ điều hành Chương 1
5
Lý Thuyết Giữa Kỳ KTMT
9
Bai Tap IBD-Chuong 3-Word1
2
Câu hỏi lý thuyết kiến trúc máy tính ôn tập giữa kì
5
Trang 85 Thuật toán và code
Code
function [nghiem] = PP Newton(fx,A,B,N,epsilon)
syms f(x)
f(x) = str2sym(fx)
dothifx(f,A,B,N,fx) %Tham khao do thi de xac dinh X0
x0 = input( 'Nhap gia tri nghiem ban dau x0: ' ); %Nhap gia tri cho rang gan voi nghiem chinh xac
x1 = 0;
str = 1;
Max = 10000; % So lan lap toi da Tranh lap vo han
while str == 1
Kếết thúc
S
Bắết đầầu i=0, x , 0
Đ
Đ
x i+1 =x i - S
Nghi m ệ xầếp x : ỉ
x i+1 S
i=i+1
thúc
Đ Nghi m chính ệ xác: x i+1
Trang 9disp 'Vi pham dieu kien hoi tu'
disp 'Ban hay thay doi gia tri x0.'
str = input ( 'Ban co muon nhap lai x0? (Yes-1, No-0): ' );
if str == 1
x0 = input( 'Nhap gia tri ban dau x0: ' );
else
disp 'Cam on ban da su dung'
end
else
break
end
end
if str == 1
x1 = double(x0 - f(x0)/df(f,x0));
cou = 1; %Lan lap dau tien
u(1,1) = cou; u(1,2) = x0; u(1,3) = x1; u(1,4) = abs(x1 - x0);
%dothi_tt(f,A,B,N,x0)
%dothi_tt(f,A,B,N,x1)
%plot(x0,f(x0),x1,f(x1))
%hold on
while (abs(x1 - x0) >= epsilon) & (cou <= Max)
cou = cou +1;
x0 = x1;
x1 = double(x0 - f(x0)/df(f,x0));
u(cou,1) = cou; u(cou,2) = x0; u(cou,3) = x1; u(cou,4) = abs(x1 - x0); %dothi_tt(f,A,B,N,x1)
%plot(x1,f(x1))
%hold on
if double(f(x1)) == 0
fprintf( '%s%20.10f\n' , 'Nghiem chinh xac: ' ,x1)
break
end
end
nghiem = x1;
disp 'BANG GIA TRI LAP'
fprintf( '%5s %15s %20s %23s\n' , 'STT' 'Xi' 'Xi+1' '|Xi - Xi+1|' , , , )
fprintf( '%4d %20.10f %20.10f %20.10f \n' ,u')
if double(f(x1)) ~= 0
fprintf( '%s%s\n' , 'So lan lap: ' ,num2str(cou))
fprintf( '%s%20.10f\n' , 'Nghiem xap xi: ' ,nghiem)
end
end
end
function dothifx(f,A,B,N,fx)
% [A ; B] : Mot khoang cua x dung de phat hoa do thi f(x).
% N la so diem trong khoang [A ; B]
x = linspace(A,B,N); %Lay N diem cach deu nhau trong khoang [A ; B]
for i = 1 : length(x)
y(i) = f(x(i));
end
z = 0*x;
plot(x,y,x,z)
grid on
xlabel( 'x' )
ylabel( 'y = f(x)' )
Trang 10Title(length(Title)+1:length(Title)+length(fx))=fx;
Title(length(Title)+1:length(Title)+10)= ' Voi y = 0' ;
title(Title)
legend (Title(26:end-10), 'y = 0' )
hold on
end
function dothi_tt(f,A,B,N,x0)
x = linspace(A,B,N); %Lay N diem cach deu nhau trong khoang [A ; B]
for i = 1 : length(x)
y(i) = df(f,x0)*(x(i) - x0) + f(x0);
end
plot(x,y)
hold on
end
function [res_check] = check(f,x0)
syms x
d1f = diff(f,x);
d2f = diff(d1f,x);
if abs(f(x0)*subs(d2f,x,x0)/subs(d1f,x,x0)^2) < 1 %dieu kien hoi tu
res_check = 1;
else
res_check = 0;
end
end
function [res_df] = df(f,x0)
syms x
res_df = subs(diff(f,x),x,x0);
end
Kết quả code dựa theo ví dụ ở phần 4:
Trang 116 Đánh giá ưu, nhược điểm
- Ưu điểm:
+ Phương pháp Newton là một phương pháp có lời giải hay, có thể áp dụng cho mọi hệ, đặc biệt là những hệ càng phức tạp thì phương pháp càng tỏ ra ưu việt
+ Phương pháp Newton có độ hội tụ cao hơn nhiều so với phương pháp lặp thông thường, nhất
là khi chọn x gần với nghiệm đúng.0
Phương pháp này là một công cụ hữu ích để giải gần đúng các hệ phương trình, các bài toán xấp xỉ, hàm số tối ưu
- Nhược điểm:
+ Giá trị đầu tiên x thường khó xác định sao cho tốt nhất.0
+ Khó khăn trong việc tính toán đạo hàm, đặc biệt không phải lúc nào cũng có thể tìm đạo hàm dưới dạng tường minh
+ Việc cài đặt một chương trình tổng quát cho thuật toán Newton tiếp tuyến tương đối khó + Việc kiểm tra điều kiện để áp dụng phương pháp này khó
1 Đặt vấn đề
Trang 12Giả sử có hai đại lượng (vật lí, hóa học, kĩ thuật …) x và y có liên hệ phụ thuộc nhau theo 1 dạng đã biết như:
1. y = a + bx
2. y = a + bcosx + csinx
3. y = a
nhưng chưa biết các giá trị cụ thể của các tham số a, b, c Muốn xác định chúng người ta tìm cách có được bằng thí nghiệm, đo đạc, … 1 số cặp giá trị tương ứng (xi, yi), i= 1, 2, …, n:
Rồi áp dụng phương pháp bình phương bé nhất để xác định các tham số
2 Mục đích
Bình phương nhỏ nhất (least squares): Là khái niệm chung để chỉ một nhóm các phương
pháp kinh tế lượng phục vụ cho việc ước lượng tham số trong phương trình hồi quy Nói chung, mục đích của phương pháp bình phương nhỏ nhất là tối thiểu hoá tổng bình phương của các khoảng cách theo phương thẳng đứng giữa số liệu thu thập được và đường hồi quy
3 Mô tả
Hàm đa thức
*Trường hợp y = a + bx
- Gọi là sai số tại các điểm :
- S là tổng bình phương của sai số
+ S =
Từ các giá trị và đã có ta thay vào phương trình trên => các giá trị a, b
*Trường hợp
- Gọi là sai số tại các điểm :
Khi đó tổng bình phương các sai số S=
Trang 13Các hệ số a,b,c được xác định sao cho S bé nhất Như vậy thì a,b,c là nghiệm của hệ phương trình
4 Ví dụ
Cho biết sự phụ thuộc giữa hai đại lượng x và y có dạng y = a + bx và cho bảng số liệu:
Hãy xác định a và b bằng phương pháp bình phương bé nhất
Giải
Trước hết ta lập bảng số:
n = 5
-1.1 2.1 3.2 4.4 5.2
0.78 7.3 9.2 11.9 13.3
1.21 4.41 10.24 19.36 27.04
-0.858 15.33 29.44 52.36 69.16
Ta có hệ phương trình:
Giải hệ này ta được:
a=2.9939036;
b=1.9935131;
Vậy có quan hệ: y = 3+2x
5 Thuật toán và code
%X p x hàm s băng ph ấ ỉ ố ươ ng pháp bình ph ươ ng t i thi u (D ng đa th c) ố ể ạ ứ
%Code b i nhóm 4 ở
Trang 14clear all
clc
%B ướ c 1: Nh p d li u x, y ậ ữ ệ
x = input( 'Nh p x theo cú pháp [a b c ] = ' ậ ); %Nh p x ậ
y = input( 'Nh p y theo cú pháp [a b c ] = ' ậ ); %Nh p y ậ
if length(x)~=length(y) %Ki m tra đ dài c a x,y ể ộ ủ
errordlg( 'Đ dài c a x, y không b ng nhau!' ộ ủ ằ )
disp( 'Vui lòng ki m tra l i d li u và nh p l i!' ể ạ ữ ệ ậ ạ );
disp( 'Nh n b t kì phím nào đ ti p t c.' ấ ấ ể ế ụ )
pause
x = input( 'Nh p x theo cú pháp [a b c ] = ' ậ );
y = input( 'Nh p y theo cú pháp [a b c ] = ' ậ );
end
%B ướ c 2: Ch n b c cho đa th c ọ ậ ứ
n = menu( 'Ch n b c cho đa th c' ọ ậ ứ , 'B c 1' ậ , 'B c 2' ậ , 'B c 3' ậ , 'B c cao h n' ậ ơ );
if n>3
n = input( 'M i b n nh p b c cho đa th c = ' ờ ạ ậ ậ ứ );
end
%B ướ c 3: X p x ph ấ ỉ ươ ng trình
%%3.1: T o ma tr n các giá tr ạ ậ ị
A = zeros(n+1,n+1);
for i=1:n+1
for j=i:n+i
A(i,j-i+1)=sum(x.^(j-1)); %Tính t ng x, x^2, x^3, ổ
end
B(i,:)=sum(x.^(i-1).*y); %Tính t ng y, xy, (x^2)y, ổ
end
%%3.2: Gi i ma tr n b ng ph ả ậ ằ ươ ng pháp Gauss
Ag = [A B]; %T o ma tr n m r ng [A|B] ạ ậ ở ộ
for i=1:size(Ag,1)
for j=i+1:size(Ag,1)
key1=Ag(j,i)./Ag(i,i); %Tìm h s nhân ệ ố
Ag(j,:)=Ag(j,:)-key1.*Ag(i,:); %Kh các h s bên d ử ệ ố ướ i
end
end
Xopt = zeros(1,size(A,2));
for i=size(Ag,1):-1:1
hg=sum(Ag(i,i+1:end-1).*Xopt(i+1:end));
Xopt(i)=(Ag(i,end)-hg)./Ag(i,i); %Tìm nghi m ệ
end
disp(Xopt); %Đ a ra giá tr theo d ng y = a1 + a2x + a3x^2 + + anx^n ư ị ạ
Kết quả code dựa theo ví dụ ở phần 4:
Trang 156 Đánh giá ưu, nhược điểm
Ưu điểm:
- Độ chính xác cao
- Phương pháp đơn giản, dễ hiểu
Nhược điểm:
- Quá trình tính toán phức tạp, dễ gây nhầm lẫn