Khi xác định một hàm số để bao phủ một mặt phẳng, chúng ta cóthể sử dụng hàm số đó để tính toán các giá trị tại bất kỳ điểm nào trên mặt phẳngđó.. Điều này rất hữu ích trong việc giải qu
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
BÁO CÁO BÀI TẬP LỚN
Môn: PHƯƠNG PHÁP TÍNH
Đề tài: Sử dụng Spline bậc 3 tạo đường bao cho 1 hình
phẳng bất kỳ LỚP L04 - NHÓM 13 - HK 231 Giảng viên hướng dẫn: Thầy Võ Trần An Sinh viên thực hiện Mã số sinh viên Phân công
Thành phố Hồ Chí Minh – 12/2023
Trang 2MỤC LỤC
LỜI MỞ ĐẦU 3
NỘI DUNG BÀI BÁO CÁO 4
I CƠ SỞ LÝ THUYẾT 4
1 CÁC KHÁI NIỆM CƠ BẢN 4
2 PHƯƠNG PHÁP GIẢI 5
2.1 Spline bậc 3 tự nhiên 5
2.2 Spline bậc 3 ràng buộc 6
II THIẾT LẬP BÀI TOÁN 7
1 BÀI 1 7
2 BÀI 2 9
3 BÀI 3 11
4 BÀI 4 14
5 BÀI 5 16
6 BÀI 6 18
TÀI LIỆU THAM KHẢO 20
Trang 3LỜI MỞ ĐẦU
Mặt phẳng là một khái niệm toán học đơn giản nhưng rất quan trọng trong nhiều lĩnh vực Khi xác định một hàm số để bao phủ một mặt phẳng, chúng ta có thể sử dụng hàm số đó để tính toán các giá trị tại bất kỳ điểm nào trên mặt phẳng
đó Điều này rất hữu ích trong việc giải quyết các vấn đề liên quan, như tìm kiếm các điểm cực trị, tìm kiếm các điểm cực đại và cực tiểu, và tìm kiếm các điểm giao nhau của các đường thẳng và mặt phẳng.
Spline là một phương pháp được sử dụng để xấp xỉ các hàm số Spline bậc 3
là một trong những phương pháp spline phổ biến nhất và được sử dụng rộng rãi trong các ứng dụng thực tế Spline bậc 3 có thể được sử dụng để tạo đường bao một mặt phẳng bằng cách xác định các điểm và tạo ra một hàm spline bậc 3 dựa trên các điểm đó
Một số lợi ích của việc sử dụng spline bậc 3 để bao phủ mặt phẳng bao gồm:
Tính liên tục: Hàm spline bậc 3 là một hàm liên tục trên toàn bộ mặt phẳng, do đó
nó có thể được sử dụng để xác định giá trị của hàm số tại bất kỳ điểm nào trên mặt
phẳng Tính mượt: Hàm spline bậc 3 là một hàm mượt trên toàn bộ mặt phẳng, do
đó nó có thể được sử dụng để xác định giá trị của đạo hàm tại bất kỳ điểm nào trên
mặt phẳng Tính linh hoạt: Spline bậc 3 có thể được sử dụng để xấp xỉ các hàm số
phức tạp trên mặt phẳng, do đó nó có thể được sử dụng trong nhiều ứng dụng khác nhau.
Trang 4NỘI DUNG BÀI BÁO CÁO
I CƠ SỞ LÝ THUYẾT
1 CÁC KHÁI NIỆM CƠ BẢN
Việc xây dựng một đa thức đi qua các điểm nội suy cho trước trong trường hợp n lớn là rất khó khăn Biện pháp khắc phục là trên từng đoạn liên tiếp của các cặp điểm nút nội suy ta nối chúng bởi các đường cong đơn giản như đoạn thẳng Tuy nhiên, khi đó tại các điểm nút hàm sẽ mất tính khả vi Do đó, phải xây dựng đường cong bằng cách nối các đoạn cong nhỏ lại với nhau Đường cong như vậy được gọi
là đường spline (đường ghép trơn) Các hàm trên các đoạn nhỏ này thường là các
đa thức và bậc cao nhất của các đa thức đó gọi là bậc của spline
Đường cong spline bậc 3 có thể được sử dụng để xây dựng các đường cong mượt
mà và liền mạch trong không gian hai chiều Tuy nhiên, để bao quát một mặt phẳng, cần sử dụng đường cong spline bậc 3 trong không gian ba chiều
Để tạo ra một đường cong spline bậc 3 trong không gian ba chiều, cần có một tập
hợp các điểm kiểm soát Sau đó, sử dụng các thuật toán như Casteljau hoặc De
Boor để giải quyết đường cong spline bậc 3.
Định nghĩa:
Đường cong trơn y=S ( x )={ g0(x )nếu x ∈[x0, x1]
g1(x )nếu x ∈[x1, x2]
…
g n−1(x)nếu x ∈[ x n−1 , x n]
được gọi là đường cong spline
=> g k(x )=a k+b k(x−x k)+c k(x−x k)2+d k(x−x k)3 được gọi là nội suy bậc 3
Cho f(x) xác định trên đoạn [a;b] và một phép phân hoạch của nó:
a=x0<x1<x2=b
y0=f(x0), y1=f(x1)=f (x2)
Một spline bậc 3 nội suy hàm f(x) trên [a;b] là hàm g(x) thỏa các điều kiện sau:
1 g(x) có đạo hàm đến cấp 2 liên tục trên [a;b]
2 g ( x )={g0( x ) x ∈[ x0, x1]
g1( x ) x ∈[ x1, x2]
3 g(x0)=f (x0)=y0, g(x1)=f(x1)=y1
Trang 5Bổ sung 2 điều kiện ở biên x = a và x = b
2 PHƯƠNG PHÁP GIẢI
2.1 Spline bậc 3 tự nhiên
Cách giải spline bậc 3 tự nhiên:
Các hệ số a k , b k , c k , k k , k=0 , … ,n−1
Bước 1: Giải hệ AC = B để tìm C
c0=c n=0
Trang 6A là
(h10
0
…
0
0
0
2(h0+h1)
h1
…
0
0
0
h1
2(h1+h2)
…
0 0
…
…
h2
…
…
…
…
…
…
…
h n−2
…
0 0
…
…
2(h n−2+h n−1) 0
0 0 0
…
h n−1
1 )
và B là
( 3 y2−y1 0
y1−y0
h0
…
3 y n−y n−1
y n−1−y n−2
h n−2
với h k=x k+1−x k
Bước 2: Xác định được c0, c1, … , c n−1 , c n
b k=y k +1−y k
h k
3 (c k+1+2 ck)
d k=c k+1−c k
3 h k
∀ k =0 , …, n−1
2.2 Spline bậc 3 ràng buộc
Thỏa điều kiện S’(a) = α , S’(b) = β
Các hệ số a k , b k , c k , k k , k=0 , … ,n−1
A là
(2 h h00
0
…
0
0
h0
2(h0+h1)
h1
…
0
0
0
h1
2(h1+h2)
…
0 0
…
…
h2
…
…
…
…
…
…
…
h n−2
…
0 0
…
…
2(h n−2+h n−1)
h n−1
0 0 0
…
h n−1
2 h n−1)
Trang 7và B là
y1−y0
3 y2−y1
y1−y0
h0
…
3 y n−y n−1
y n−1−y n−2
h n−2
3 β−3 y n−y n−1
II THIẾT LẬP BÀI TOÁN
Ở bài báo cáo này, spline bậc 3 được sử dụng để vẽ nên đường bao của hình phẳng bất
kỳ, với điều kiện xác định được tọa độ của các điểm theo trục x, trục y
Bước 1: Cho hình ảnh cần vẽ đường bao vào trình duyệt Geogebra để xác định tọa độ của các điểm
Bước 2: Thu thập giá trị tọa độ và thực hiện code bằng MATLAB
Bước 3: Hình ảnh thu được của code là đường bao cần xác định
Sau đây là phần trình bày cụ thể về phương pháp vẽ đường bao với 6 bài toán tương ứng với 6 hình bất kỳ
1 BÀI 1
Yêu cầu: Với dữ liệu đã cho, vẽ đường bao phần lưng con vịt (như hình vẽ)
Trang 8Thực hiện code MATLAB:
% Các điểm dữ liệu
x =
[0.9,1.3,1.9,2.1,2.6,3.0,3.9,4.4,4.7,5.0,6.0,7.0,8.0,9.2,10.5,11 3,11.6,12.0,12.6,13,13.3];
y =
[1.3,1.5,1.85,2.1,2.6,2.7,2.4,2.15,2.05,2.1,2.25,2.3,2.25,1.95,1 4,0.9,0.7,0.6,0.5,0.4,0.25];
[x_unique, idx] = unique(x);
y_unique = y(idx);
pp = csape(x_unique, y_unique, 'variational');
xx = linspace(min(x_unique),max(x_unique),1000);
yy = ppval(pp,xx);
figure;
plot(x_unique,y_unique,'LineWidth',1.5);
axis equal;
axis ([0 14 0 4]);
grid on;
title('Đường bao lưng vịt');
xlabel('Trục x');
Trang 9ylabel('Trục y');
hold on;
scatter(x_unique,y_unique,25,'filled','r');
legend('Spline Curve');
Hình ảnh thu được:
2 BÀI 2
Yêu cầu: Cho hình sau, thực hiện vẽ đường bao phần trên của máy bay
Trang 10Xác định tọa độ các điểm bằng Geogebra:
Thực hiện code MATLAB:
% Các điểm dữ liệu
x = […]
y = […]
[x_unique, idx] = unique(x);
y_unique = y(idx);
pp = csape(x_unique, y_unique, 'variational');
xx = linspace(min(x_unique), max(x_unique), 1000);
yy = ppval(pp, xx);
figure;
plot(x_unique, y_unique, 'o', xx, yy, 'LineWidth', 2, 'Color', [0.2, 0.4, 0.8]) % Thay đôi màu sắ$c và độ rộng đường spline
xlabel('X')
ylabel('Y')
title('Spline bậc 3 từ dữ liệu không cầ/n sắ$p xể$p (tùy chỉnh
legend('Data Points', 'Spline Curve')
% Đặt giới hạn cho trục x và y
Trang 11xlim([xmin xmax]); % Giới hạn trục x
ylim([0 14]); % Giới hạn trục y
Hình ảnh thu được:
3 BÀI 3
Yêu cầu: Cho hình sau, thực hiện vẽ đường bao miếng phô mai
Trang 12Xác định tọa độ các điểm bằng Geogebra:
Bảng số liệu (có làm tròn số):
Thực hiện code MATLAB:
% Các điểm dữ liệu
x =
[40,50.9,56.9,61.9,68,71,84.2,97.4,115,126.7,136,146,157,168.7,1 73.7,177.7,183,189];
y =
[53.7,54.3,50.2,50.5,45.3,38.6,41.8,47.6,50.4,51.6,53.7,50.6,49 5,46.2,51.2,55.2,53.7,53.1];
% Tạo spline bậc 3 bằng hàm csape
Trang 13pp = csape(x, [0, y, 0], 'variational');
% Đánh giá spline tại các điểm bô sung để hiển thị mượt hởn
t_interp = linspace(min(x), max(x), 1000);
y_interp = fnval(pp, t_interp);
figure;
plot(x, y, 'o', 'MarkerFaceColor', 'b', 'MarkerSize', 8,
hold on;
plot(t_interp, y_interp, 'r-', 'LineWidth', 2, 'DisplayName',
legend('Location', 'best');
axis equal;
xlabel('Trục x');
ylabel('Trục y');
title('Đường bao miể$ng phô mai');
grid on;
Hình ảnh thu được:
Trang 144 BÀI 4
Yêu cầu: Cho bảng số liệu đã được xác định như sau, thực hiện vẽ đường bao nóc tòa nhà BK.B1
Bảng số liệu:
Thực hiện code MATLAB:
% Các điểm dữ liệu
x = [0.6762, 3.02603, 3.0184, 3.5779, 3.5856, 4.5001, 5.4036, 5.4128, 5.9181, 5.9423, 7.9535];
Trang 15y = [3.8265, 4.5909, 4.8055, 4.9741, 5.29606, 5.5916, 5.2915, 4.9730, 4.8015, 4.5850, 4.0040];
t = linspace(0, 1, length(x));
pp_x = spline(t, x);
pp_y = spline(t, y);
% Đánh giá spline tại các điểm bô sung để hiển thị mượt hởn
num_points = 200;
t_interp = linspace(0, 1, num_points);
x_interp = ppval(pp_x, t_interp);
y_interp = ppval(pp_y, t_interp);
figure;
plot(x_interp, y_interp, 'r', 'LineWidth', 2);
axis equal;
hold on;
scatter(x, y, 100, 'filled', 'b');
hold off;
title('Nóc tòa BK.B1');
xlabel('X');
ylabel('Y');
legend('Đường bao spline bậc 3', 'Điểm tuyể$n');
axis equal;
Hình ảnh thu được:
Trang 165 BÀI 5
Yêu cầu: Thiết lập code dùng spline bậc 3 để vẽ đường bao cho ảnh Áp dụng code để vẽ đường bao cho trái hồ lô như hình sau
Dùng phần mềm Demos để xác định tọa độ các điểm, ta được bảng số liệu như sau:
Trang 17Thực hiện code MATLAB:
clc;
clearvars;
n = input('Nhap so diem can tao: ');
x = zeros(1, n);
y = zeros(1, n);
for i = 1:n
fprintf('Nhap toa do diem %d:\n', i);
x(i) = input('Nhap x: ');
y(i) = input('Nhap y: ');
end
% Xầy dựng ma trận hệ sô$
A = [ones(n, 1), x', x'.^2, x'.^3];
Bx = y';
% Giai hệ phưởng trình để tìm các hệ sô$
Cx = linsolve(A, Bx);
% Tạo đường bao spline bậc 3
t = linspace(min(x), max(x), 100); % Tạo 100 điểm trển đoạn
[min(x), max(x)]
P_x = Cx(1) + Cx(2) * t + Cx(3) * t.^2 + Cx(4) * t.^3;
P_y = Cx(1) + Cx(2) * t + Cx(3) * t.^2 + Cx(4) * t.^3;
figure;
plot(t, P_x, 'b-', 'LineWidth', 2);
hold on;
scatter(x, y, 'ro'); % Hiển thị điểm
title('Đường bao Spline Bậc 3');
xlabel('X-axis');
ylabel('Y-axis');
grid on;
axis equal;
% Hiển thị các điểm
for i = 1:n
text(x(i), y(i), sprintf('P%d', i));
end
hold off;
Trang 18Hình ảnh thu được:
6 BÀI 6
Yêu cầu: Tính toán đường cong cổng hình vòm Si Loius ở Mỹ được biểu diễn qua hàm số:
f ( x )=−4
9 x
2
bằng spline bậc 3 với khoảng chia n = 12 trên đoạn [-3;3]
Thực hiện code MATLAB:
x(1) = -3;
y(1) = -4/9*x(1)^2;
x(13) = 3;
y(13) = -4/9*x(13)^2;
dx = (x(13) - x(1)) / 12;
for i = 2:12
x(i) = x(i-1) + dx;
y(i) = -4/9*x(i)^2;
end
pp = spline(x,[0,y,0]);
xx = linspace(x(1), x(13), 100);
yy = ppval(pp,xx);
figure;
plot(xx,yy,'r',x,y,'bo');
xlabel('x');
ylabel('y');
title('f(x)');
Trang 19legend('Spline bậc 3', 'các điểm tuyể$n', 'Location', 'Best');
Hình ảnh thu được:
Trang 20TÀI LIỆU THAM KHẢO
[1] Richard Burden – Numerical Analysis 10th edition
[2] Steven C Chapra Applied Numerical Methods with MATLAB® for Engineers and Scientists Fourth Edition
[3] Lê Thái Thanh, Giáo trình Phương pháp tính, Nxb Đại học Quốc gia TP Hồ Chí
Minh