1. Giới thiệu chung về hyperbola và MATLAB

Hyperbola (đường hyperbol) là một trong ba loại conic sections (đường tròn, elip và hyperbola) cơ bản, có ứng dụng rộng rãi trong nhiều lĩnh vực như vật lý, kỹ thuật, kinh tế và đồ họa máy tính. Trong toán học, hyperbola được định nghĩa là tập hợp các điểm sao cho hiệu độ dài từ hai tiêu điểm tới bất kỳ điểm nào trên đường cong là một hằng số. Đối với người mới bắt đầu, việc hình dung và vẽ hyperbola có thể gặp khó khăn, nhưng nhờ vào môi trường lập trình mạnh mẽ như MATLAB, quá trình này trở nên đơn giản và trực quan.

MATLAB (Matrix Laboratory) là một ngôn ngữ lập trình và môi trường tính toán số học, được tối ưu hoá cho các phép toán ma trận, đồ họa và mô phỏng. Nhờ có các công cụ vẽ đồ thị mạnh mẽ, người dùng có thể nhanh chóng tạo ra các biểu đồ 2D, 3D, và thậm chí là các hình ảnh động. Bài viết này sẽ hướng dẫn bạn cách vẽ hyperbola trong MATLAB từ những kiến thức cơ bản nhất, qua các ví dụ thực tế, và cuối cùng sẽ đề cập đến một số kỹ thuật nâng cao để tùy chỉnh và mở rộng đồ thị hyperbola.

2. Cơ sở toán học của hyperbola

2.1 Định nghĩa chuẩn

Một hyperbola tiêu chuẩn trong hệ tọa độ Đề-các (Cartesian) có dạng:

\frac{x^{2}}{a^{2}} – \frac{y^{2}}{b^{2}} = 1 \quad \text{(hyperbola mở theo trục x)}

hoặc

\frac{y^{2}}{a^{2}} – \frac{x^{2}}{b^{2}} = 1 \quad \text{(hyperbola mở theo trục y)}

Trong đó:
– (a > 0) là khoảng cách từ tâm tới các đỉnh trên trục mở.
– (b > 0) liên quan tới khoảng cách tới các tiêu điểm và độ dốc của các tiệm cận (asymptotes).
– Các tiệm cận của hyperbola là các đường thẳng (y = \pm \frac{b}{a} x) (đối với dạng mở theo trục x) hoặc (x = \pm \frac{b}{a} y) (đối với dạng mở theo trục y).

2.2 Các tham số quan trọng

Tham số Ý nghĩa Công thức
(c) Khoảng cách từ tâm tới mỗi tiêu điểm (c = \sqrt{a^{2}+b^{2}})
Eccentricity (e) Độ lệch (độ phình) của hyperbola (e = \frac{c}{a} > 1)
Tiệm cận Đường thẳng không bao giờ cắt hyperbola nhưng tiếp cận vô hạn gần nó (y = \pm \frac{b}{a}x) (hoặc hoán đổi x, y)

2.3 Đồ thị parametric

Một cách khác để biểu diễn hyperbola là sử dụng tham số (\theta):

\begin{cases}
x = a \sec \theta \
y = b \tan \theta
\end{cases}
\qquad \text{với } \theta \in \left(-\frac{\pi}{2}, \frac{\pi}{2}\right) \cup \left(\frac{\pi}{2}, \frac{3\pi}{2}\right)

Biểu diễn này rất hữu ích khi vẽ trong MATLAB vì chúng ta có thể tạo một dải giá trị (\theta) và tính toán (x, y) một cách trực tiếp.

Cách Vẽ Hypebol Trong Matlab
Cách Vẽ Hypebol Trong Matlab

3. Chuẩn bị môi trường MATLAB

3.1 Cài đặt MATLAB

Nếu bạn chưa có MATLAB, bạn có thể tải bản dùng thử hoặc mua bản đầy đủ tại trang chính thức của MathWorks. Đối với sinh viên và giáo viên, MathWorks thường cung cấp giấy phép miễn phí hoặc giảm giá.

3.2 Các toolbox cần thiết

Đối với việc vẽ hyperbola, bạn chỉ cần MATLAB base (cơ bản). Tuy nhiên, nếu muốn thực hiện các thao tác nâng cao như đồ thị 3D, animation, hoặc xử lý ảnh, bạn có thể cần thêm:

  • Curve Fitting Toolbox (để khớp đường cong)
  • Symbolic Math Toolbox (để tính toán biểu thức ký hiệu)
  • MATLAB Graphics (đã tích hợp sẵn trong phiên bản mới)

3.3 Giới thiệu nhanh về giao diện

  • Command Window: Nhập lệnh trực tiếp.
  • Editor: Viết script (.m file) để lưu lại các bước thực hiện.
  • Figure Window: Hiển thị đồ thị.
  • Workspace: Quản lý biến.

Bạn có thể tạo một file script mới, đặt tên ví dụ draw_hyperbola.m, và bắt đầu viết code.

4. Vẽ hyperbola dạng chuẩn (Mở theo trục x)

4.1 Phương pháp 1: Dùng lệnh fimplicit

Cách Vẽ Hypebol Trong Matlab
Cách Vẽ Hypebol Trong Matlab

MATLAB cung cấp hàm fimplicit để vẽ các hàm 2‑đối‑1 ẩn một cách tự động. Đây là cách nhanh nhất để vẽ hyperbola chuẩn.

% Tham số a và b
a = 3;
b = 2; % Định nghĩa hàm ẩn
hyperbola = @(x,y) x.^2/a.^2 - y.^2/b.^2 - 1; % Vẽ đồ thị
figure;
fimplicit(hyperbola, -10 10 -6 6, 'LineWidth', 2);
grid on;
axis equal;
title('Hyperbola \frac{x^2}{a^2} - \frac{y^2}{b^2} = 1');
xlabel('x');
ylabel('y');

Giải thích:
– @(x,y) tạo một hàm ẩn nhận hai biến.
– fimplicit tự động tìm nghiệm trong vùng giới hạn -10 10 -6 6.
– axis equal giữ tỉ lệ trục, tránh biến dạng hình.

4.2 Phương pháp 2: Sử dụng tham số (\theta)

% Tham số
a = 3;
b = 2; % Giá trị theta
theta = linspace(-pi/2+0.01, pi/2-0.01, 1000); % tránh các điểm bất định % Tính x, y
x = a sec(theta);
y = b tan(theta); % Vẽ
figure;
plot(x, y, 'b', 'LineWidth', 2);
hold on;
plot(-x, y, 'b', 'LineWidth', 2); % Đối xứng qua trục y
grid on;
axis equal;
title('Hyperbola bằng tham số \theta');
xlabel('x'); ylabel('y');

Lưu ý:
– sec và tan có các điểm không xác định tại (\pm \pi/2). Vì vậy chúng ta tránh các giá trị này bằng cách trừ/ cộng một epsilon nhỏ (0.01 rad trong ví dụ).
– Để vẽ cả hai cánh hyperbola, chúng ta vẽ x và -x (đối xứng).

4.3 Thêm tiệm cận (asymptotes)

% Tiệm cận y = ± (b/a) x
x_line = linspace(-10, 10, 2);
y_asym1 = (b/a) x_line;
y_asym2 = -(b/a) x_line; plot(x_line, y_asym1, 'r--', 'LineWidth', 1);
plot(x_line, y_asym2, 'r--', 'LineWidth', 1);
legend('Hyperbola','Tiệm cận');

Kết quả sẽ cho bạn một hình ảnh rõ ràng, hyperbola cùng với hai đường tiệm cận màu đỏ gạch đứt.

5. Vẽ hyperbola mở theo trục y

Công thức chuẩn:

\frac{y^{2}}{a^{2}} – \frac{x^{2}}{b^{2}} = 1

Cách 1: fimplicit

a = 2; b = 1.5;
hyperbolaY = @(x,y) y.^2/a.^2 - x.^2/b.^2 - 1;
figure;
fimplicit(hyperbolaY, -6 6 -10 10, 'LineWidth', 2);
grid on; axis equal;
title('Hyperbola mở theo trục y');
xlabel('x'); ylabel('y');

Cách 2: Tham số (\theta)

theta = linspace(-pi/2+0.01, pi/2-0.01, 1000);
y = a sec(theta);
x = b tan(theta); figure;
plot(x, y, 'm', 'LineWidth', 2);
hold on;
plot(x, -y, 'm', 'LineWidth', 2);
% Tiệm cận
x_line = linspace(-10,10,2);
y_asym1 = (a/b) x_line;
y_asym2 = -(a/b) x_line;
plot(x_line, y_asym1, 'k--', 'LineWidth', 1);
plot(x_line, y_asym2, 'k--', 'LineWidth', 1);
axis equal; grid on;
title('Hyperbola mở theo trục y (parametric)');

6. Thay đổi vị trí và xoay hyperbola

Cách Vẽ Hypebol Trong Matlab
Cách Vẽ Hypebol Trong Matlab

6.1 Dịch chuyển (translation)

Nếu hyperbola có tâm tại ((h, k)), công thức becomes:

\frac{(x-h)^{2}}{a^{2}} – \frac{(y-k)^{2}}{b^{2}} = 1

Trong MATLAB:

h = 2; k = -1;
a = 3; b = 1.5;
hyperbolaShift = @(x,y) ((x-h).^2)/a^2 - ((y-k).^2)/b^2 - 1;
figure;
fimplicit(hyperbolaShift, -10 10 -10 10, 'LineWidth', 2);
axis equal; grid on;
title('Hyperbola đã dịch chuyển (h,k) = (2,-1)');

6.2 Xoay (rotation)

Khi hyperbola được xoay một góc (\phi) quanh gốc, các biến đổi:

\begin{cases}
x’ = x \cos\phi + y \sin\phi \
y’ = -x \sin\phi + y \cos\phi
\end{cases}

Thay vào công thức chuẩn:

phi = pi/6; % 30 độ
a = 3; b = 2; % Hàm xoay
hyperbolaRot = @(x,y) ((xcos(phi)+ysin(phi)).^2)/a^2 ... - ((-xsin(phi)+ycos(phi)).^2)/b^2 - 1; figure;
fimplicit(hyperbolaRot, -10 10 -10 10, 'LineWidth', 2);
axis equal; grid on;
title('Hyperbola xoay \phi = ' num2str(rad2deg(phi)) '^{\circ}');

6.3 Kết hợp dịch chuyển và xoay

Bạn chỉ cần thay đổi công thức thành:

\frac{((x-h)\cos\phi + (y-k)\sin\phi)^{2}}{a^{2}} –
\frac{(-(x-h)\sin\phi + (y-k)\cos\phi)^{2}}{b^{2}} = 1

h = -3; k = 4; phi = pi/4; % 45 độ
a = 2; b = 1;
hyperbolaFull = @(x,y) (( (x-h)cos(phi)+(y-k)sin(phi) ).^2)/a^2 ... - (( -(x-h)sin(phi)+(y-k)cos(phi) ).^2)/b^2 - 1;
figure;
fimplicit(hyperbolaFull, -10 10 -10 10, 'LineWidth', 2);
axis equal; grid on;
title('Hyperbola dịch chuyển + xoay');

7. Đánh dấu các đặc trưng quan trọng

7.1 Vẽ các tiêu điểm và các đỉnh

% Tham số
a = 3; b = 2;
c = sqrt(a^2 + b^2);
h = 0; k = 0; % tâm % Đỉnh
vertices = h+a, k; h-a, k;
% Tiêu điểm
foci = h+c, k; h-c, k; figure;
fimplicit(@(x,y) x.^2/a^2 - y.^2/b^2 - 1, -10 10 -6 6, 'LineWidth', 2);
hold on;
plot(vertices(:,1), vertices(:,2), 'ko', 'MarkerFaceColor','g', 'MarkerSize',8);
plot(foci(:,1), foci(:,2), 'rx', 'MarkerSize',10, 'LineWidth',2);
legend('Hyperbola','Đỉnh','Tiêu điểm');
axis equal; grid on;
title('Hyperbola kèm Đỉnh và Tiêu điểm');

7.2 Vẽ các tiệm cận và chú thích

Thêm các lệnh text để ghi chú:

% Tiệm cận
x_line = linspace(-10,10,2);
y_asym1 = (b/a)x_line;
y_asym2 = -(b/a)x_line;
plot(x_line, y_asym1, 'r--', 'LineWidth', 1);
plot(x_line, y_asym2, 'r--', 'LineWidth', 1);
% Chú thích
text(8, (b/a)8, 'y = (b/a)x', 'Color','r');
text(8, -(b/a)8, 'y = -(b/a)x', 'Color','r');

8. Tùy chỉnh giao diện đồ thị

MATLAB cho phép tùy biến hầu hết các thành phần của đồ thị:

Thành phần Lệnh Ví dụ
Màu sắc 'Color','m' hoặc plot(...,'m') plot(x,y,'Color',0.2 0.6 0.8)
Độ dày đường 'LineWidth',2 plot(x,y,'LineWidth',3)
Kiểu đường '--', ':', '-.' plot(x,y,'r--')
Đánh dấu điểm 'Marker','o' plot(x,y,'bo','MarkerSize',6)
Lưới grid on grid minor
Tỷ lệ trục axis equal hoặc axis tight axis(-5 5 -5 5)
Tiêu đề, nhãn title, xlabel, ylabel title('My Hyperbola')

Bạn có thể lưu đồ thị dưới dạng file ảnh (saveas, exportgraphics) hoặc file vector (.pdf, .eps) để sử dụng trong báo cáo, bài giảng.

Cách Vẽ Hypebol Trong Matlab
Cách Vẽ Hypebol Trong Matlab
% Lưu ảnh PNG
saveas(gcf,'hyperbola_example.png');
% Lưu vector PDF
exportgraphics(gcf,'hyperbola_example.pdf','ContentType','vector');

9. Đồ thị 3D: Hyperbola trên mặt phẳng 3D

Mặc dù hyperbola là đường cong 2D, đôi khi chúng ta muốn hiển thị nó trong không gian 3D, ví dụ như khi biểu diễn một mặt cắt của một hình chóp. Cách thực hiện:

a = 3; b = 2;
theta = linspace(-pi/2+0.01, pi/2-0.01, 1000);
x = a sec(theta);
y = b tan(theta);
z = zeros(size(x)); % mặt phẳng xy figure;
plot3(x, y, z, 'b','LineWidth',2);
hold on;
% Thêm một mặt phẳng để thấy độ sâu
surf(-10 10; -10 10, -6 -6; 6 6, 0 0; 0 0, 'FaceAlpha',0.2);
grid on; axis equal;
xlabel('X'); ylabel('Y'); zlabel('Z');
title('Hyperbola trong không gian 3D');

Bạn cũng có thể quay góc nhìn bằng view(az, el) để quan sát từ các góc độ khác nhau.

10. Animation: Đồ thị hyperbola động

Một ví dụ thú vị là tạo animation cho hyperbola khi các tham số (a) và (b) thay đổi theo thời gian.

figure;
hPlot = plot(NaN,NaN,'b','LineWidth',2);
axis(-10 10 -10 10); axis equal; grid on;
title('Animation: Thay đổi a và b');
for t = 1:100 a = 2 + 1.5sin(0.1t); b = 1 + 0.8cos(0.1t); theta = linspace(-pi/2+0.01, pi/2-0.01, 800); x = a sec(theta); y = b tan(theta); set(hPlot,'XData',x,'YData',y); drawnow;
end

Kết quả là một hyperbola “biến hình” mượt mà, hữu ích cho các bài giảng động hoặc minh hoạ các thay đổi tham số.

11. Kiểm tra tính chính xác: So sánh với Symbolic Math Toolbox

Nếu bạn muốn xác nhận rằng đồ thị được vẽ đúng, bạn có thể sử dụng syms để tạo biểu thức ký hiệu và kiểm tra một số điểm mẫu.

syms x y a b
eq = x^2/a^2 - y^2/b^2 - 1;
% Thử với a=3, b=2
a_val = 3; b_val = 2;
eq_sub = subs(eq, a,b, a_val, b_val);
% Kiểm tra một điểm (x=4, y=?)
x_val = 4;
y_val = solve(subs(eq_sub, x, x_val), y);
disp('y = ', char(y_val(1))); % In ra nghiệm dương

Kết quả sẽ cho bạn giá trị (y) tương ứng, giúp kiểm tra xem các điểm trên đồ thị có thỏa mãn phương trình hay không.

Cách Vẽ Hypebol Trong Matlab
Cách Vẽ Hypebol Trong Matlab

12. Tối ưu hoá hiệu suất khi vẽ nhiều hyperbola

Khi làm việc với hàng trăm hoặc hàng ngàn hyperbola (ví dụ khi mô phỏng hệ thống quỹ đạo), việc vẽ từng đường một bằng plot có thể chậm. Các mẹo tối ưu:

  1. Dùng line hoặc patch với vector lớn: Tạo một ma trận chứa tất cả các tọa độ và vẽ một lần.
  2. Tắt drawnow trong vòng lặp: Chỉ gọi drawnow sau khi hoàn thành toàn bộ vòng lặp.
  3. Sử dụng gpuArray (nếu có GPU) để tính toán nhanh hơn các hàm sec và tan.
  4. Giảm độ phân giải: Thay vì 1000 điểm, có thể giảm xuống 200-300 nếu độ chi tiết không quan trọng.
N = 500; % số hyperbola
theta = linspace(-pi/2+0.01, pi/2-0.01, 400);
X = zeros(N, length(theta));
Y = zeros(N, length(theta));
for i = 1:N a = 1 + 0.5rand(); % a ngẫu nhiên b = 1 + 0.5rand(); % b ngẫu nhiên X(i,:) = a sec(theta); Y(i,:) = b tan(theta);
end
figure;
line(X', Y', 'Color',0 0.5 0.8, 'LineWidth',1);
axis equal; grid on;
title('Nhiều hyperbola cùng lúc (tối ưu)');

13. Ứng dụng thực tế của hyperbola trong MATLAB

Lĩnh vực Ứng dụng Cách dùng MATLAB
Vật lý Đường quỹ đạo của các vật thể trong trường hấp dẫn (đường conic) Sử dụng ODE solver (ode45) để mô phỏng, sau đó vẽ bằng plot
Kỹ thuật điện Đường đồng vị (locus) của các mạch RLC Tính toán hàm truyền và vẽ biểu đồ Nyquist, nơi các đường hyperbola xuất hiện
Kinh tế Đường cầu cung – cầu trong mô hình chi phí Hàm chi phí dạng hyperbolic, sử dụng fplot để minh họa
Đồ họa máy tính Tạo hình ảnh 2D/3D dạng hyperbolic paraboloid meshgrid, surf để tạo bề mặt hyperbolic

Ví dụ minh hoạ một mô phỏng quỹ đạo:

mu = 398600; % Độ hấp dẫn Trái Đất (km^3/s^2)
e = 1.2; % Độ lệch > 1 => hyperbola
a = -8000; % bán trục lớn âm cho hyperbola
theta = linspace(-pi/2+0.01, pi/2-0.01, 1000);
r = a(1 - e^2)./(1 + ecos(theta));
% Chuyển sang hệ Đề-các
x = r . cos(theta);
y = r . sin(theta);
figure;
plot(x,y,'k','LineWidth',2);
axis equal; grid on;
title('Quỹ đạo hyperbolic của tàu vũ trụ');
xlabel('km'); ylabel('km');

14. Xử lý lỗi thường gặp

Lỗi Nguyên nhân Giải pháp
NaN xuất hiện Giá trị sec(theta) hoặc tan(theta) tại (\pm\pi/2) Tránh các điểm này bằng cách giảm epsilon hoặc dùng linspace không bao gồm các giá trị biên.
Đồ thị bị biến dạng axis không đồng tỷ lệ Sử dụng axis equal.
Cạnh đồ thị không liền mạch Độ phân giải theta quá thấp Tăng số điểm (linspace(..., 2000)).
Tiệm cận không hiện ra Độ dài trục quá ngắn Mở rộng giới hạn axis hoặc tăng x_line/y_line.
Lỗi cú pháp fimplicit Định nghĩa hàm ẩn sai (dùng .^ vs ^) Đảm bảo dùng phép toán phần tử (.^, .).

15. Tổng kết

Trong bài viết này, chúng ta đã đi từ những kiến thức nền tảng về hyperbola, qua các công thức toán học, đến cách thực hiện chi tiết trong MATLAB. Bạn đã học được:

  1. Cách vẽ hyperbola chuẩn bằng fimplicit và phương pháp tham số.
  2. Cách thêm tiệm cận, đỉnh, tiêu điểm để làm đồ thị hoàn chỉnh.
  3. Cách dịch chuyển và xoay hyperbola để phù hợp với các bài toán thực tế.
  4. Tùy biến giao diện, lưu file, và tạo animation cho đồ thị.
  5. Kỹ thuật tối ưu khi làm việc với số lượng lớn hyperbola.
  6. Ứng dụng thực tế trong vật lý, kỹ thuật và kinh tế.

Với những kiến thức này, bạn có thể tự tin xây dựng bất kỳ biểu đồ hyperbola nào trong MATLAB, từ những ví dụ đơn giản cho tới các mô phỏng phức tạp. Hãy thực hành, thử nghiệm các giá trị (a, b, h, k, \phi) khác nhau, và khám phá thêm các tính năng đồ họa nâng cao của MATLAB để tạo ra những hình ảnh sinh động và chuyên nghiệp. Chúc bạn thành công!

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *