LỜI NÓI ĐẦU Chào cô và các bạn sinh viên thân mến, dưới đây là bài báo cáo Bài tập lớn môn học Phương pháp tính của nhóm 21 lớp L08 thực hiện.. Chúng ta thấy rằng hầu hết các bài toán tr
LÝ THUYẾT
1 Sử dụng phương pháp Simpson 1/3 tính tích phân kép trên miền hình chữ nhật
Xét bài toán tính tích phân kép ∫∫ Dxyf(x,y)dxdy trên miền Dxy như hình vẽ với các tọa độ các điểm: A(x i ,y i ), B(x i +1,y i ), C(x i +2,y i ), H(x i ,y i+1 ), I(x i+1 ,y i+1 ), D(x i+2 ,y i+1 ), G(x i ,y i+2 ), F(x i+1 ,y i+2
Nhận xét: ã f (A) + f (C) + f (E) + f (G) là tổng cỏc giỏ trị tại 4 đỉnh HCN ã f (I) là giỏ trị tại tõm HCN ã f (B) + f (D) + f (D) + f (H) là tổng cỏc giỏ trị tại 4 trung điểm của 4 cạnh HCN Code Matlab phương pháp Simpson :
%f= inline (‘f (x) ‘, ‘x’) function [I] = simpson (f, a, b, n) if nNhận xét: phương pháp Runge-Kutta bậc 4 cho nghiệm gần giống với kết quả chính xác hơn phương pháp Euler cải tiến c)
) Xét hàm số 𝑓(𝑐 𝑑 ) có công thức:
) − 𝑣 Theo đề bài ta có m= 95(kg) , v = 46(m/s), t(s), thay vào 𝑓(𝑐 𝑑 ) ta được:
; Dùng Geogebra ta vẽ được g(x) và h(x):
Dựa vào đồ thị ta có khoảng cách li gnhiệm là khoảng [0,4;0,5]
Theo đề bài, sai số tương đối của giá trị tìm được nhỏ hơn 5%;
) − 46 Xét phương pháp chia đôi ta có:
Phương trình có nghiệm chính xác 𝑥̅ ≈ 0,4124421639
Ta có bảng giá trị sau: n 𝑎 𝑛 𝑏 𝑛 𝑥 𝑛 𝑥 𝑛 (%)
Vậy với n=1 thì (%)=3,04475 < 5%, lúc này 𝑐 𝑑 = 0,425
-Phương pháo Secant(phương pháp các tuyến);
Vậy với n=2 thì (%)=0,38% < 5%, lúc này 𝑐 𝑑 ≈ 0,414009709
Enzim đóng vai trò là chất xúc tác đẩy nhanh tốc độ phản ứng hóa học trong tế bào sống Trong hầu hết các trường hợp, enzim chuyển đổi một hóa chất, chất nền, thành một hóa chất khác, sản phẩm khác Phương trình Michaelis-Menten thường được sử dụng để mô tả các phản ứng như vậy:
Trong đó v = vận tốc phản ứng ban đầu, 𝑣 𝑚 = vận tốc phản ứng ban đầu cực đại, S là nồng độ chất nền và 𝑘 𝑠 = hằng số bán bão hòa a) Mối quan hệ giữa S và v được cho trong bảng sau:
Sử dụng phương pháp bình phương nhỏ nhất để xác định vm và ks bằng cách chuyển đổi mô hình nhất định thành mô hình tuyến tính b) Với phương trình 𝑣 = 𝑎𝑆 2 + 𝑏𝑆 + 𝑐, sử dụng phương pháp bình phương nhỏ nhất để xác định a, b, c Ước tính phương trình nào (tuyến tính hoặc parabol) cho kết quả gần đúng nhất
2.1 Phương pháp bình phương nhỏ nhất Định nghĩa: Phương pháp bình phương tối thiểu (Ordinary least square), còn gọi là bình phương nhỏ nhất là một phương pháp tối ưu hóa để lựa chọn một đường khớp nhất cho một dải dữ liệu ứng với cực trị của tổng các sai số thống kê (error), sao cho khoảng cách từ sai số toàn phương trung bình của các điểm của tập dữ liệu đến đường này là ngắn nhất
Phương pháp bình phương nhỏ nhất dùng để lập công thức thực nghiệm hay xác định hàm xấp xỉ f(x) từ bảng thực nghiệm thu được qua các kết quả thực nghiệm từ thực tế Để tìm ra được hàm này, đầu tiên ta cần đưa bài toán hiện tại về bài toán cực tiểu của hàm có dạng: 𝑔 = ∑( 𝑓(𝑥 𝑖 ) − 𝑦 𝑖 ) 2 ; i chạy từ 0 →n ứng với x0 →xn
Một số dạng hàm xấp xỉ thường gặp:
Ta đi tìm a, b sao cho hàm g(a,b) đạt cực tiểu với
Ta đi tìm a, b, c sao cho hàm g(a,b,c) đạt cực tiểu với:
Với g(x) và h(x) là các hàm liên tục cho trước: ta tìm a, b sao cho hàm S(a,b)
2.1.1 Biến đổi phương trình thành dạng tuyến tính bằng cách nghịch đảo 2 vế của phương trình
𝑘 𝑠 2 + 𝑆 2 ta được phương trình sau:
Phương trình (2) có dạng y = ax + b Ta đi tìm a, b sao cho hàm
𝑣 𝑖 ) 2 đạt cực tiểu Đạo hàm riêng hàm S(a,b) theo a, b để tìm điểm dừng:
Ta lập được bảng từ dữ liệu của đề bài: i 𝑆 𝑖 𝑣 𝑖 1
Thay bảng giá trị trên vào hệ phương trình (3) ta được:
2.1.2 Phương trình v = aS 2 + bS + c có dạng y = ax 2 + bx + c
Ta đi tìm a, b, c sao cho hàm S(a,b,c)=∑(𝑎𝑆 𝑖 2 + 𝑏𝑆 𝑖 + 𝑐 − 𝑣 𝑖 ) 2 đạt cực tiểu Đạo hàm riêng hàm S(a,b,c) theo a, b, c để tìm điểm dừng:
Ta lập được bảng từ dữ liệu của đề bài: i 𝑆 𝑖 𝑣 𝑖 𝑆 𝑖 2 𝑆 𝑖 3 𝑆 𝑖 4 𝑆 𝑖 𝑣 𝑖 𝑆 𝐼 2 𝑣 𝑖
Tổng 33.6000 1.7400 215.1800 1583.1540 12457.4162 10.2725 71.7083 Thay bảng giá trị trên vào hệ phương trình (4) ta được:
Nhận xét: Để so sánh mô hình tuyến tính hay parabol mô tả chính xác dữ liệu hơn, ta cần đi so sánh độ chênh lệch bình phương trung bình giữa các giá trị ước tính và giá trị thực tế (từ dữ kiện của đề bài cung cấp) Đối với mô hình tuyến tính, với Ks = 2.8127 và vm = 0.4083 ta có: 𝑣 𝑖 ′ = 0.4084∗𝑆 2
Tính Mean Square Error MSE= 1
Với n = 7; các giá trị vi và 𝑣 𝑖 ′ được thể hiện trong bảng sau: i 𝑆 𝑖 𝑣 𝑖 𝑣 𝑖 ′ (𝑣 𝑖 − 𝑣 𝑖 ′ ) 2
Vậy giá trị MSE của mô hình tuyến tính là MSE = 0.000115412 Đối với mô hình parabol, với hệ số a, b, c đã tính được ta có: vi ‘=-0.0062S2+0.0987S-0.0352 Tương tự, ta có n = 7; các giá trị vi và v’I được thể hiện trong bảng sau: i 𝑆 𝑖 𝑣 𝑖 𝑣 𝑖 ′ (𝑣 𝑖 − 𝑣 𝑖 ′ ) 2
Vậy giá trị MSE của mô hình parabol là MSE = 0.000093191 < 0.000115412
Kết luận: Có thể thấy giá trị MSE của mô hình parabol nhỏ hơn so với mô hình tuyến tính, nên ước lượng đưa ra bởi mô hình parabol chính xác hơn
Trong sinh học, mô hình kẻ săn mồi – con mồi được dùng để quan sát sự tương tác giữa các loài Mô hình được đề xuất bởi Lotka-Volterra là
𝑑𝑡 = −𝑐𝑦 + 𝑑𝑥𝑦 trong đó ,xy lần lượt là số lượng của con mồi và động vật săn mồi, a là tốc độ tăng trưởng số lượng loài bị săn, c là tốc độ chết đi của loài đi săn, b và d theo thứ tự là tỷ lệ đặc trưng cho ảnh hưởng của tương tác kẻ săn mồi – con mồi lên sự chết đi của con mồi và sự tăng trưởng của loài săn mồi, t là thời gian tính bằng tháng a) a/ Cho 𝑎=1.2,𝑏=0.6,𝑐=0.8,𝑑=0.3 với điều kiện đầu là 𝑥=2 và 𝑦=1 Tìm số lượng kẻ săn mồi và con mồi sau 10 tháng, sử dụng công thức Euler cải tiến với bước chia
Ta có t0=0 ; x0=2 ; y0=1 ; h= 0.625 f(t,x,y)= 12x-0.6xy ; g(t,x,y)= -0,8y+0.3xy ; Áp dụng công thức Euler cải tiến
By = 0.625(-0.8(yj-1+B 0 y)+0.3(xj-1+A 0 x)(yj-1+B 0 y)) x(tj) ≈ xj = xj-1 + 1
Vậy số lượng con mồi sau 10 năm là x(10)=1.897 , số lượng kẻ săn mồi là y(10)= 3.683 b) Tính spline bậc 3 của x(t)
Với bước chia h=0.625 ta có 16 khoảng tương ứng với 16 phương trình x0(t)=a0+b0(t-t0)+c0(t-t0) 2 +d0(t-t0) 3 x1(t)=a1+b1(t-t1)+c0(t-t1) 2 +d0(t-t1) 3
Ta tìm a với ai=xi : a0=2 a1=2.955 a2=4.317 a3=5.637 a4=5.1999 a5=2.686 a6=1.428 a7=1.023 a8=0.993
Vì là spline tự nhiên nên c0= c15=0
Ta có phương trình Ax=B : ͇
42 Để tìm hệ số b,d áp dụng công thức :
Lấy các hệ số a,b,c,d thay vào công thức : xk(t)=ak+bk(t-tk)+ck(t-tk) 2 +dk(t-tk) 3 ta được :
Tương tự với hàm y ta chia y(t) thành 16 khoảng với h=0.625 nên có 16 phương trình tương ứng:
Spline tự nhiên có c0=c15=0 k y hk 2( hk-2+hk-1
42 Áp dụng công thức tìm bk, dk k bk dk
Lấy các hệ số a,b,c,d thay vào công thức : yk(t)=ak+bk(t-tk)+ck(t-tk) 2 +dk(t-tk) 3 ta được :
Lập trình giải mã đề PPT_de-thi-ck-bk-hk3-2019-2020
Câu 1 Cường độ chiếu sáng của một vật nhận ánh sáng từ một nguồn sáng được cho bởi công thức I = 𝑘
𝑥 2 , với k là cường độ sáng của nguồn và x là khoảng cách từ vật đến nguồn Một vật được đặt ở giữa 2 nguồn sáng A, B, với cường độ sáng của A gấp 3 lần B và khoảng cách từ A đến B là 10m Dùng phương pháp chia đôi, sau [𝑀] + 3lần lặp, xác định khoảng cách từ vật đến nguồn A sao cho cường độ sáng của vật là yếu nhất Đánh giá sai số kết quả tìm được.( [𝑀] là phần nguyên của M)
-Code matlab: clc; clear; disp('Cau 1');syms x f;
% Nhập mã số sinh viên và xác định m, n mssv = input('Ma so sinh vien: '); m = floor(mod(mssv, 100) / 10); n = mod(mssv, 10);
M = (m + 2*n + 12) / 10; %tinh M disp('Phuong trinh cuong do sang cua vat phu thuoc vao vi tri cach A mot doan x'); disp('I=3k/x^2+k/(x-10)^2'); f=diff(3/x^2+1/(x-10)^2,x); fA=subs(f,x,1);
M=floor(M+3); fprintf('So lan can lap: %.0f \n',M);
A=0;B; ss=(B-A)/2^(M+1);ssl(ss*10000)/10000; for i=-1:M x1=(A+B)/2; fx=subs(f,x,x1); if (fA*fx>=0)
B=x1; end end fprintf('Gia tri x can tim la %.4f \n',x1); fprintf('Gia tri sai so la %.4f', ss);
) Dùng phương pháp lập Jacobi, tìm sai số ∆𝑥 (2) của vector lặp thứ 2 x (2) theo công thức hậu nghiệm với chuẩn một
-Code matlab: clc; clear; disp('Cau 2');
% Nhập mã số sinh viên và xác định m, n mssv = input('Ma so sinh vien: '); m = floor(mod(mssv, 100) / 10); n = mod(mssv, 10);
M = (m + 2*n + 12) / 10; %tinh M k=input('nhap so lan lap k= '); x1=0.5;%nhap vecto x0 x2=0.2; x3=0.3; for i=1:k %tinh toan cac vecto nghiem
T=norm(D*(LU),1); %tinh chuan 1 dx2 = T*norm(X2-X1,1)/(1-T);
%in ra các vecto nghiem va denntax2 disp(['Vector lap X(1) = [', num2str(X1(1)), '; ', num2str(X1(2)), '; ', num2str(X1(3)), ']']); disp(['Vector lap X(2) = [', num2str(X2(1)), '; ', num2str(X2(2)), '; ', num2str(X2(3)), ']']); disp('deltax2='); disp(dx2);
) Sử dụng phương pháp lặp Gauss- seidel, tim vector lặp thứ ba 𝑋 (3)
- Code matlab: clc; clear; disp('Cau 3');
% Nhập mã số sinh viên và xác định m, n mssv = input('Ma so sinh vien: '); m = floor(mod(mssv, 100) / 10); n = mod(mssv, 10);
% Chuyển hệ phương trình về dạng x = Ax + b
% Sử dụng phương pháp lặp Gauss-Seidel để tìm vector X(3) for i = 1:3 for j = 1:4 xj_new = (b(j) - A(j,1:j-1)*X(1:j-1) - A(j,j+1:end)*X(j+1:end)) / A(j,j);
% Xuất kết quả vector lặp thứ ba X(3) disp(['Vector lap thu ba X(3) = [', num2str(X(1)), '; ', num2str(X(2)), '; ', num2str(X(3)), '; ', num2str(X(4)), ']']);
Câu 4: Cho hàm bảng số x 1.0 1.5 2.0 2.5 3 3.2 3.5 4.3 5 f(x) M 5.7 4 3.5 4 4 5 4.5 4
Tìm hàm 𝑓(𝑥) = 𝐴𝑐𝑜𝑠𝑥 + 𝐵𝑙𝑛𝑥 xấp xỉ tốt nhất bảng trên bằng phương pháp bình phương cực tiểu
- Code matlab: clc; clear; disp('Cau 4');
% Nhập mã số sinh viên mssv = input('Ma so sinh vien: ', 's');
% Xác định m và n từ mã số sinh viên m = str2double(mssv(end-1)); % Chữ số thứ hai từ cuối n = str2double(mssv(end)); % Chữ số cuối cùng
% Tính giá trị của biểu thức M
M = (m + 2*n + 12) / 10; disp('Ta co bang sau:'); disp('x | 1.0 1.5 2.0 2.5 3.0 3.2 3.5 4.3 5.0'); fprintf('y | M 5.7 4.0 3.5 4.0 4.0 5.0 4.5 4.0');
% Tạo ma trận A và vector b từ bảng số
A = [cos(1.0) log(1.0); cos(1.5) log(1.5); cos(2.0) log(2.0); cos(2.5) log(2.5); cos(3) log(3); cos(3.2) log(3.2); cos(3.5) log(3.5); cos(4.3) log(4.3); cos(5) log(5)]; b = [M; 5.7; 4; 3.5; 4; 4; 5; 4.5; 4];
% Giải phương trình tìm hàm f(x) bằng phương pháp bình phương cực tiểu x = A \ b;
% In giá trị của hệ số A và B của hàm f(x) disp(['Hệ số A = ', num2str(x(1))]); disp(['Hệ số B = ', num2str(x(2))]);
Tìm giá trị a để tích phân I = ∫ [𝑥𝑓(𝑥) + √𝑥𝑓(𝑥)] 𝑑𝑥 1.2 2.4 = 5 bằng phương pháp hình thang mở rộng
-Code matlab: clc; clear; disp('Cau 5');
% Nhập mã số sinh viên và xác định m, n mssv = input('Ma so sinh vien: '); m = floor(mod(mssv, 100) / 10); n = mod(mssv, 10);
%nhập các giá trị của y y(1)=0.65; y(2)=0; y(3)=2.35; y(4)=1.15; y(5)=M; y(6)=2.1; y(7)=4.2;f=0;h=0.2; for i = 1:7 %tính giá trị của tích phân
43 if i == 1 b = 1/2; else if i == 7 b=1/2; else if i == 2 b = 0; else b = 1; end end end f=f+h*b*y(i)*(1+0.2*i + sqrt(1+0.2*i)); end a=(5-f)/(0.2*(1.4+sqrt(1.4))); %tính và in ra a disp('gia tri cua a là ');disp(a);
Câu 6 Hàm f(x) cho theo bảng số liệu x 2.0 2.2 2.4 2.6 2.8 3.0 3.2 f(x) -M -1.3 -1.6 -1 -2.1 -2.4 -2.5
Cho tích phân I = πI 1 với π = 3.14 ± 0.0016 và I 1 = ∫ [𝑥𝑓 2.0 3.2 2 (𝑥) + 3.2𝑓(𝑥)] 𝑑𝑥 ± 0.0025 Dùng phương pháp Simson mở rộng, tính I và sai số của I
-Code matlab: clc; clear; disp('Cau 6');
% Nhập mã số sinh viên và xác định m, n mssv = input('Ma so sinh vien: '); m = floor(mod(mssv, 100) / 10); n = mod(mssv, 10);
%nhập các giá trị của y y(1)=-M; y(2)=-1.3; y(3)=-1.6; y(4)=-1; y(5)=-2.1; y(6)=-2.4; y(7)=-2.5;f=0;h=0.2; for i = 1:7 %tính giá trị của tích phân if i == 1 b = 1; else if i == 7 b=1; else if mod(i,2) == 1 b=4; else b=2; end end end f=f+(h/3)*b*y(i)*((1.8+0.2*i)*y(i) + 3.2); end di=3.14*0.0025+f*0.0016;%tinh sai so
%in ra gia tri tich phan va sai so cua tich phan disp('gia tri cua tich phan I là ');disp(f); disp(' va sai so cua tich phan I là ');disp(di);
Câu 7 Giải phương trình vi phân y’ = x 2 + y − sin(x + y) với điều kiện y(1.0) = M Tìm y(1.2) và y(1.4) với bước chia h = 0.2 theo công thức Runge - Kutta 4
Kết quả: y(1.2)= ; y(1.4) = _ -Code matlab: clc; clear; disp('Cau 7');
% Nhập mã số sinh viên và xác định m, n mssv = input('Ma so sinh vien: '); m = floor(mod(mssv, 100) / 10); n = mod(mssv, 10);
%nhap cac gia tri cua bai toan x = input('nhap x0: '); y = M; h=input('Nhap step: ');
%tinh toan va in ra gia tri cua y while X >= x fprintf('gia tri y(runge-kutta 4) tai x=%0.2f la %f \n',x,y); k1 = h.*f(x,y);
Câu 8 Tốc độ tăng kích thước của khối u trong cơ thể được mô tả bởi phương trình 𝑑𝑉
𝑑𝑡 = a(ln b - ln V)V, V là thể tích khối u, t là thời gian đo bằng ngày Giả sử một bệnh nhân có kích thước khối u ban đầu là 1mm 3 , sử dụng phương pháp Euler cải tiến, tính kích thước khối u sau đó 1 tuần, với bước chia h=0.5, với a = 2/3 và b = M
Kết quả: Kích thước khối u sau một tuần = _
-Code matlab: clc; clear; disp('Cau 8');
% Nhập mã số sinh viên và xác định m, n mssv = input('Ma so sinh vien: '); m = floor(mod(mssv, 100) / 10); n = mod(mssv, 10);
M = (m + 2*n + 12) / 10; %tinh M f = @(t,v) (2/3)*(log(M)-log(v))*v; %nhập hàm f
%nhập các giá trị của bài toán t0 = input('Nhap t0 :'); v0 = input('Nhap v0 :');
V(1) = v0; h=input('Nhap h :'); tc = input('Nhap t cuoi:');
%tính toán và in ra V k=(tc-t0)/h;T=T(1):h:tc for i=1:k
V(i+1)=V(i) + h*0.5*(f(T(i),V(i)) + f(T(i+1), V(i+1))); fprintf('gia tri V(euler cai tien) tai t=%f la %f \n',T(i+1),V(i+1)); end
Câu 9 Cho phương trình vi phân bậc 2: e x y”(x) − xy’(x) + y(x) = x + M với điều kiện ban đầu y(1) = 0 và y’(1) = M Tính gần đúng y(1.4) với bước chia h = 0.2 bằng phương pháp Euler cải tiến
-Code matlab: clc; clear; disp('Cau 9');
% Nhập mã số sinh viên và xác định m, n mssv = input('Ma so sinh vien: '); m = floor(mod(mssv, 100) / 10); n = mod(mssv, 10);
%nhập các giá trị của bài toán x0 = input('Nhap x0 :'); y0 = input('Nhap y0 :'); z0 = M;
Z(1) = z0; h=input('Nhap h:'); xc = input('Nhap x cuoi:'); k=(xc-x0)/h; X=X(1):h:xc
%tính toán và in ra giá trị của x,y,z for i=1:k+1
Câu 10 Cho bài toán biên {(𝑀 + 𝑥)𝑦" + 𝑙𝑛 𝑥𝑦′ − 2𝑥 2 𝑦 = 𝑥 2 (𝑥 − 1)
𝑦(0.5) = 2.5 𝑦(1.5) = 𝑀 , dùng phương pháp sai phân hữu hạn tính gần đúng y(0.75), y(1.0), y(1.25) với bước h = 0.25
-Code matlab: clc; clear; disp('Cau 10');
% Nhập mã số sinh viên và xác định m, n mssv = input('Ma so sinh vien: '); m = floor(mod(mssv, 100) / 10); n = mod(mssv, 10);
B=zeros(3,1); for x=0.75:h:1.25 i=i+1; pk=(M+x); qk=log(x); rk=-2*x^2; fk=(x-1)*x^2;