Tính gần đúng đạo hàm của y tại x = 0.7 bằng cách áp dụng công thức Taylor Code:... Code: hàm main Code: hàm function langrange... Tính chính xác kết quả đạo hàm.. So sánh với 2 kết quả
Trang 1TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
Họ và tên: Đỗ Minh Nhật
MSSV:22200115
Lớp:22DTV2
THỰC HÀNH PHƯƠNG PHÁP TÍNH VÀ MATLAB
GVPT: Nguyễn Mai Minh Kha
BÁO CÁO THỰC HÀNH TUẦN 6
Câu 1: Cho hàm số: y(x) = arcsin (x) với các giá trị tại:
x = [0.1 0.3 0.5 0.7 0.9]
y = [0.1002 0.3047 0.5236 0.7754 1.1198]
a Tính gần đúng đạo hàm của y tại x = 0.7 bằng cách áp dụng công thức Taylor
Code:
Trang 22
- Kết quả:
syms x; %lệnh tạo đa thức
y = @(x) asin(x); %đa thức đề bài
%fx = @(x) x^3*sin(x)+x*cos(x);
h=1e-4; %h là số rất bé gần bằng 0
%a=0;
%b=1;
%N=10;
xa = [0.1 0.3 0.5 0.7 0.9]; %mảng x đề bài
ya = [0.1002 0.3047 0.5236 0.7754 1.1198]; %mảng y đề bài
x=0.7;
%syms x;
y1=(y(0.7+h)-y(0.7))/h %câu a sử dụng công thức taylor
%subs(diff(y(x)),0.7) %câu c
%result = subs(diff(lagrange(xa,ya,x)),0.7) %câu b
%tichphan = tichphanhinhthang(fx,a,b,N);
%tichphanS = tichphanSimpson(fx,a,b,N);
Trang 3b Tính gần đúng đạo hàm của hàm số: y = arcsin (x) tại x = 0.7 bằng cách dùng đa thức nội suy Lagrange
Code: hàm main
Code: hàm function langrange
syms x;
y = @(x) asin(x);
xa = [0.1 0.3 0.5 0.7 0.9];
ya = [0.1002 0.3047 0.5236 0.7754 1.1198];
x=0.7;
syms x;
result = subs(diff(lagrange(xa,ya,x)),0.7) %câu b gọi ra hàm function
lagrange sử dụng làm diff để đạo hàm và subs để tìm ra kết quả với
x=0.7
function ketqua = lagrange(xa, ya, x) % hàm function lagrange ở
tuần trước
n = length(xa);
ketqua = 0;
for i = 1:n
L_i = 1;
for j = 1:n
if j ~= i
L_i = L_i * (x - xa(j)) / (xa(i) - xa(j));
end
end
ketqua = ketqua + ya(i) * L_i;
end
end
Trang 4
4
- Kết quả:
c Tính chính xác kết quả đạo hàm So sánh với 2 kết quả gần đúng ở trên và nhận xét
- Code:
syms x;
y = @(x) asin(x);
%fx = @(x) x^3*sin(x)+x*cos(x);
h=1e-4;
%a=0;
%b=1;
%N=10;
xa = [0.1 0.3 0.5 0.7 0.9];
ya = [0.1002 0.3047 0.5236 0.7754 1.1198];
x=0.7;
syms x;
%y1=(y(0.7+h)-y(0.7))/h %câu a
subs(diff(y(x)),0.7) %câu c
%result = subs(diff(lagrange(xa,ya,x)),0.7) %câu b
%tichphan = tichphanhinhthang(fx,a,b,N);
%tichphanS = tichphanSimpson(fx,a,b,N);
Trang 5
- Kết quả:
- Sai số giữa kết quả đạo hàm chính xác và kết quả đạo hàm taylor là:
|10 ∗ 51
1 2
51 − 1.4004| = 1.1991 ∗ 10
−4
- Sai số giữa kết quả đạo hàm chính xác và kết quả đạo hàm lagrange là:
|10 ∗ 51
1 2
17083
12000| = 0.023303
- Nhận xét: phương pháp đạo hàm taylor sẽ cho ra kết quả gần đúng nhất và ít sai số hơn phương pháp lagrange
Trang 66
Câu 2: Viết function tính gần đúng tích phân của một hàm số f(x) bất kỳ trong khoảng [a,b] sử dụng công thức hình thang với N đoạn con bằng nhau
function y = tichphanhinhthang(fx,a,b,N)
Áp dụng tính gần đúng tích phân của hàm số f(x) = x^3sin (𝑥) + 𝑥𝑐𝑜𝑠(𝑥) trong khoảng [0,1] với N = 10
- Code: hàm main
- Code: hàm function tichphanhinhthang.m
syms x; %lệnh tạo đa thức
%y = @(x) asin(x); %đa thức đề bài
fx = @(x) x^3*sin(x)+x*cos(x);
%h=1e-4;
a=0; %giá trị biên bên trái của khoảng [0;1] là 0
b=1; % giá trị biên bên phải của khoảng [0;1] là 1
N=10; %số phần tử muốn lấy trong khoảng [0;1]
%xa = [0.1 0.3 0.5 0.7 0.9];
%ya = [0.1002 0.3047 0.5236 0.7754 1.1198];
%x=0.7;
%syms x;
%y1=(y(0.7+h)-y(0.7))/h %câu a
%subs(diff(y(x)),0.7) %câu c
%result = subs(diff(lagrange(xa,ya,x)),0.7) %câu b
tichphan = tichphanhinhthang(fx,a,b,N); %gọi hàm function
%tichphanS = tichphanSimpson(fx,a,b,N);
function y = tichphanhinhthang(fx,a,b,N)
M=0; %khởi tạo giá trị của tổng ban đầu là 0
h=(b-a)/N; %bước nhảy trung bình trong khoảng [0;1]
for i=1:1:(N-1) %lặp từ i=1 đến N-1
M = M+fx(a+i*h); %tổng fx(a+i*h) với i từ 1 đến N-1
end
y = (h/2)*(fx(a) + fx(b) +2*M); %công thức tích phân hình thang
fprintf('result hinh thang=%.5f\n',y) %in ra kết quả với thập phân 5 số
end
Trang 7- Kết quả:
Câu 3: Viết function tính gần đúng tích phân của một hàm số f(x) bất kỳ trong khoảng [a,b] sử dụng công thức Simpson với với N đoạn con bằng nhau
function y = tichphanSimpson(fx,a,b,N)
Áp dụng tính gần đúng tích phân của hàm số f(x) = x3sin (𝑥) + 𝑥𝑐𝑜𝑠(𝑥) trong khoảng [0,1] với
N = 10
Trang 88
- Code: hàm main
syms x;
%y = @(x) asin(x);
fx = @(x) x^3*sin(x)+x*cos(x);
%h=1e-4;
a=0;
b=1;
N=10;
%xa = [0.1 0.3 0.5 0.7 0.9];
%ya = [0.1002 0.3047 0.5236 0.7754 1.1198];
%x=0.7;
%syms x;
%y1=(y(0.7+h)-y(0.7))/h %câu a
%subs(diff(y(x)),0.7) %câu c
%result = subs(diff(lagrange(xa,ya,x)),0.7) %câu b
%tichphan = tichphanhinhthang(fx,a,b,N);
tichphanS = tichphanSimpson(fx,a,b,N); %gọi hàm function
Trang 9
- Code: hàm function tichphanSimpson.m
- kết quả:
function y = tichphanSimpson(fx,a,b,N)
C=0; %khởi tạo chẵn = 0
L=0; %khởi tạo lẻ = 0
h=(b-a)/N; %tính bước nhảy trung bình trong khoảng [0;1]
for i=1:2:(N-1) %lệnh for lặp từ i=1 đến N-1 với bước nhảy là 2 để i luôn lẻ
L=L + fx(a+i*h); %tổng fx(a+i*h) với i luôn lẻ
end
for i=2:2:(N-1) %lệnh for lặp từ i=2 đến N-1 với bước nhảy là 2 để i luôn chẵn
C=C + fx(a+i*h); % tổng fx(a+i*h) với i luôn chẵn
end
y=(h/3)*(fx(a) + fx(b) +4*L +2*C); %công thức tích phân simpson
fprintf('result simpson=%.5f\n',y) % in ra kết quả với sau dấu chấm 5 chữ số thập phân end
Trang 1010
Câu 4:
a Tính chính xác tích phân của hàm số f(x) = x3sin(x) +𝑥𝑐𝑜𝑠(𝑥) trong khoảng [0,1] So sánh với giá trị gần đúng ở câu 2 và câu 3 rồi nhận xét Gợi ý: tìm hiểu lệnh integral
- code:
- Kết quả:
fun = @(x) x.^3.*sin(x)+x.*cos(x);
q = integral(fun,0,1);
fprintf('result=%.5f\n',q)
Trang 11b Viết chương trình tính sự chênh lệch của 2 phương pháp hình thang và Simpson so với tích phân chính xác integral ở ba trường hợp N = 1, N = 10 và N = 50 (in ra chi tiết giá trị chênh lệch) Từ đó rút ra kết luận phương pháp nào có độ chính xác cao hơn?
- code: hàm main
- Ta sử dụng lại function tichphanhinhthang.m và tichphanSimpson.m ở bài 2, 3 cho bài này
fun = @(x) x.^3.*sin(x)+x.*cos(x); %đa thức đề bài để tính tích tích
q = integral(fun,0,1); %lệnh tính tích phân cận từ 0 đến 1
fprintf('result tich phan chuan=%.5f\n',q) %in ra kết quả tích phân chuẩn thập phân 5 chữ số
syms x;
fx = @(x) x^3*sin(x)+x*cos(x); %khởi tạo đa thức đề bài
a=0; %cận trái = 0
b=1; %cận phải = 1
N=10; %số mẫu
tichphan = tichphanhinhthang(fx,a,b,N); %gọi hàm function hình thang
tichphanS = tichphanSimpson(fx,a,b,N); %gọi hàm function Simpson
o=abs(q-tichphanhinhthang(fx,a,b,N)); %công thức tính sai số tích phân chuẩn với
hình thang
k=abs(q-tichphanSimpson(fx,a,b,N)); %công thức tính sai số tích phân chuẩn với
simpson
fprintf('ket qua chenh lech giua tich phan chuan va tich phan hinh thang la: %.5f\n',o)
%in ra kết quả sai số với thập phân 5 chữ số
fprintf('ket qua chenh lech giua tich phan chuan va tich phan simpson la: %.6f\n',k)
%in ra kết quả sai số với thập phân 6 chữ số
Trang 12
12
- Với N=1, kết quả:
- Với N=10, kết quả:
- Với N=50, kết quả:
- Nhận xét: ta thấy được thứ tự độ chính xác tính tích phân như sau:
+ Tích phân chuẩn > tích phân Simpson > tích phân hình thang
+ Ta nhận thấy được khi ta lấy mẫu càng lớn (N càng lớn) thì độ chính xác của các phương pháp càng cao