Bài 11. Tích vô hướng của hai vectơ
Trong cơ học, khi bạn kéo một chiếc hòm trượt trên mặt sàn bằng một sợi dây hợp với mặt sàn một góc , lực kéo sinh ra một công cơ học . Công này chỉ phụ thuộc vào thành phần lực chiếu theo phương dịch chuyển , và được tính bằng công thức nổi tiếng:
Để toán học hóa hiện tượng vật lý quan trọng này, các nhà toán học đã xây dựng nên phép toán nhân hai vectơ cho ra kết quả là một số thực: Tích vô hướng (Dot Product / Scalar Product).
Tích vô hướng là một trong những công cụ toán học quyền năng nhất của đại số tuyến tính:
- Là thước đo góc chính xác giữa hai đối tượng trong không gian.
- Kiểm tra tính vuông góc tức thì: .
- Là linh hồn của công nghệ Trí tuệ nhân tạo hiện đại (thuật toán đo độ tương đồng Cosine Similarity trong các mô hình ngôn ngữ lớn LLM như ChatGPT hay Gemini)!
1. Sơ đồ tư duy: Tích vô hướng của hai vectơ
1. Góc giữa hai vectơ
• Ký hiệu: với .
• Dựng từ chung một gốc :
• Hai vectơ cùng hướng: góc bằng .
• Hai vectơ ngược hướng: góc bằng .
• Hai vectơ vuông góc: góc bằng ().
2. Định nghĩa Tích vô hướng
•
• Kết quả là một số thực.
• Bình phương vô hướng: .
• Điều kiện vuông góc:
.
3. Biểu thức Tọa độ
Cho và :
• Tích vô hướng:
• Độ dài:
• Góc:
• Vuông góc: .
4. Hằng đẳng thức vectơ
•
•
•
• Chứng minh vuông góc, tính khoảng cách cực nhanh.
2. Khởi động: 5 câu hỏi phản xạ nhanh
- Tích vô hướng của hai vectơ là một vectơ hay một số thực?
Đáp án: Là một số thực (đại lượng vô hướng), không có mũi tên hay hướng. - Nếu góc giữa hai vectơ là góc nhọn thì tích vô hướng mang dấu gì?
Đáp án: Dấu dương (), vì khi góc nhọn thì . - Khi nào thì tích vô hướng (với )?
Đáp án: Khi hai vectơ vuông góc với nhau (). - Bình phương vô hướng bằng gì?
Đáp án: Bằng bình phương độ dài của nó: . - Cho và . Tính nhanh tích vô hướng ?
Đáp án: Hoành nhân hoành cộng tung nhân tung: (hai vectơ này vuông góc nhau!).
3. Lý thuyết trọng tâm
3.1. Góc giữa hai vectơ
Cho hai vectơ và đều khác vectơ-không .
Từ một điểm bất kỳ, dựng và .
Góc với số đo từ đến được gọi là góc giữa hai vectơ và , ký hiệu là .
- Quy ước: Nếu hoặc thì góc giữa chúng có thể nhận số đo tùy ý từ đến .
- Khi , ta nói và vuông góc với nhau, ký hiệu là .
- Hai vectơ cùng hướng có góc bằng , hai vectơ ngược hướng có góc bằng .
3.2. Định nghĩa tích vô hướng của hai vectơ
Ghi nhớĐỊNH NGHĨA TÍCH VÔ HƯỚNG:
Tích vô hướng của hai vectơ và là một số thực, ký hiệu là (hoặc ), được xác định bởi công thức:Nếu ít nhất một trong hai vectơ là thì .
Các trường hợp đặc biệt:
- Bình phương vô hướng: Tích vô hướng của vectơ với chính nó được gọi là bình phương vô hướng của , ký hiệu :(Bình phương vô hướng của một vectơ luôn bằng bình phương độ dài của vectơ đó).
- Dấu của tích vô hướng:
- là góc nhọn ().
- là góc tù ().
- (hoặc một trong hai vectơ bằng ).
Các tính chất của tích vô hướng:
Với ba vectơ và số thực :
- Giao hoán:
- Phân phối:
- Kết hợp với số:
- Hằng đẳng thức:
3.3. Biểu thức tọa độ của tích vô hướng
Ghi nhớTrong mặt phẳng tọa độ , cho và :
- Tích vô hướng:
- Độ dài vectơ:
- Côsin của góc giữa hai vectơ:
- Điều kiện vuông góc:
4. Widget tương tác: Phòng Thí Nghiệm Tích Vô Hướng Động
Kéo đầu mút của hai vectơ và để quan sát góc , giá trị và tích vô hướng biến thiên theo thời gian thực:
<div style="background: #f8fafc; border: 1px solid #cbd5e1; border-radius: 12px; padding: 20px; margin: 24px 0; font-family: system-ui, sans-serif;">
<div style="display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; margin-bottom: 16px;">
<h3 style="margin: 0; font-size: 1.15rem; color: #1e293b;">⚡ Máy Tính Tích Vô Hướng Trực Quan</h3>
<div style="font-weight: 700; font-size: 1.1rem; color: #0284c7;">
u · v = <span id="dotDisplay">24.00</span>
</div>
</div>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); gap: 20px; align-items: center;">
<!-- Interactive Canvas SVG -->
<div style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; padding: 10px; text-align: center;">
<svg data-interactive-done="true" id="dotSvg" viewBox="-120 -120 240 240" style="width: 100%; max-width: 320px; height: auto; touch-action: none; cursor: crosshair;">
<defs>
<marker id="arrUdot" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M 0 1 L 10 5 L 0 9 z" fill="#2563eb" />
</marker>
<marker id="arrVdot" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M 0 1 L 10 5 L 0 9 z" fill="#dc2626" />
</marker>
</defs>
<!-- Coordinate axes -->
<g stroke="#cbd5e1" stroke-width="1.2">
<line x1="-110" y1="0" x2="110" y2="0" />
<line x1="0" y1="110" x2="0" y2="-110" />
</g>
<text x="100" y="15" font-size="10" fill="#64748b">x</text>
<text x="6" y="-100" font-size="10" fill="#64748b">y</text>
<!-- Angle Arc Sector -->
<path id="arcSector" d="M 0,0" fill="#fef08a" fill-opacity="0.5" stroke="#ca8a04" stroke-width="1.5" />
<!-- Vector u -->
<line id="lineUdot" x1="0" y1="0" x2="80" y2="0" stroke="#2563eb" stroke-width="3" marker-end="url(#arrUdot)" />
<!-- Vector v -->
<line id="lineVdot" x1="0" y1="0" x2="50" y2="-70" stroke="#dc2626" stroke-width="3" marker-end="url(#arrVdot)" />
<!-- Origin O -->
<circle cx="0" cy="0" r="4.5" fill="#0f172a" />
<text x="-12" y="14" font-size="10" fill="#0f172a">O</text>
<!-- Handle U -->
<circle id="hUdot" cx="80" cy="0" r="6" fill="#2563eb" style="cursor: move;" />
<text id="lblUdot" x="85" y="16" font-size="12" font-weight="bold" fill="#2563eb">u(4;0)</text>
<!-- Handle V -->
<circle id="hVdot" cx="50" cy="-70" r="6" fill="#dc2626" style="cursor: move;" />
<text id="lblVdot" x="55" y="-75" font-size="12" font-weight="bold" fill="#dc2626">v(2.5;3.5)</text>
<!-- Angle Text -->
<text id="lblAng" x="15" y="-15" font-size="10" font-weight="bold" fill="#854d0e">54°</text>
</svg>
</div>
<!-- Live Metrics Table -->
<div style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; padding: 14px;">
<div style="font-weight: 700; font-size: 0.95rem; color: #1e293b; margin-bottom: 8px;">Thông số tích vô hướng:</div>
<table style="width: 100%; font-size: 0.85rem; border-collapse: collapse;">
<tr style="border-bottom: 1px solid #f1f5f9;">
<td style="padding: 4px 0; color: #2563eb; font-weight: 600;">Vectơ u = (x; y):</td>
<td style="padding: 4px 0; font-weight: bold; text-align: right;" id="statUVal">(4.0; 0.0)</td>
</tr>
<tr style="border-bottom: 1px solid #f1f5f9;">
<td style="padding: 4px 0; color: #dc2626; font-weight: 600;">Vectơ v = (x'; y'):</td>
<td style="padding: 4px 0; font-weight: bold; text-align: right;" id="statVVal">(2.5; 3.5)</td>
</tr>
<tr style="border-bottom: 1px solid #f1f5f9;">
<td style="padding: 4px 0; color: #475569;">Góc θ = (u, v):</td>
<td style="padding: 4px 0; font-weight: bold; text-align: right;" id="statTheta">54°</td>
</tr>
<tr style="border-bottom: 1px solid #f1f5f9;">
<td style="padding: 4px 0; color: #475569;">cos θ:</td>
<td style="padding: 4px 0; font-weight: bold; text-align: right;" id="statCos">0.5878</td>
</tr>
<tr>
<td style="padding: 4px 0; color: #0284c7; font-weight: 700; font-size: 0.95rem;">Tích vô hướng u · v:</td>
<td style="padding: 4px 0; font-weight: bold; color: #0284c7; font-size: 1.05rem; text-align: right;" id="statDot">10.00</td>
</tr>
</table>
<div id="dotStatusMsg" style="margin-top: 10px; background: #eff6ff; border-left: 3px solid #3b82f6; padding: 8px; border-radius: 4px; font-size: 0.8rem; color: #1e40af; line-height: 1.4;">
• Góc nhọn ($θ < 90^\circ$): Tích vô hướng mang dấu DƯƠNG (+).<br>
• Công thức: $\vec{u} \cdot \vec{v} = xx' + yy' = |\vec{u}||\vec{v}|\cos\theta$.
</div>
</div>
</div>
</div>
<script>
(function() {
const svg = document.getElementById('dotSvg');
const scale = 20; // 20px = 1 unit
let u = { x: 4, y: 0 };
let v = { x: 2.5, y: 3.5 };
let activeHandle = null;
function update() {
const sxU = u.x * scale, syU = -u.y * scale;
const sxV = v.x * scale, syV = -v.y * scale;
const lenU = Math.hypot(u.x, u.y);
const lenV = Math.hypot(v.x, v.y);
const dot = u.x * v.x + u.y * v.y;
let cosTheta = (lenU * lenV > 0) ? (dot / (lenU * lenV)) : 1;
cosTheta = Math.max(-1, Math.min(1, cosTheta));
const angDeg = Math.round(Math.acos(cosTheta) * 180 / Math.PI);
// Update lines and handles
document.getElementById('lineUdot').setAttribute('x2', sxU);
document.getElementById('lineUdot').setAttribute('y2', syU);
document.getElementById('hUdot').setAttribute('cx', sxU);
document.getElementById('hUdot').setAttribute('cy', syU);
document.getElementById('lblUdot').setAttribute('x', sxU + 8);
document.getElementById('lblUdot').setAttribute('y', syU + 14);
document.getElementById('lblUdot').textContent = `u(${u.x.toFixed(1)}; ${u.y.toFixed(1)})`;
document.getElementById('lineVdot').setAttribute('x2', sxV);
document.getElementById('lineVdot').setAttribute('y2', syV);
document.getElementById('hVdot').setAttribute('cx', sxV);
document.getElementById('hVdot').setAttribute('cy', syV);
document.getElementById('lblVdot').setAttribute('x', sxV + 8);
document.getElementById('lblVdot').setAttribute('y', syV - 6);
document.getElementById('lblVdot').textContent = `v(${v.x.toFixed(1)}; ${v.y.toFixed(1)})`;
// Angle text and arc
document.getElementById('lblAng').textContent = `${angDeg}°`;
const arcR = 30;
const a1 = Math.atan2(syU, sxU);
const a2 = Math.atan2(syV, sxV);
const p1x = arcR * Math.cos(a1), p1y = arcR * Math.sin(a1);
const p2x = arcR * Math.cos(a2), p2y = arcR * Math.sin(a2);
document.getElementById('arcSector').setAttribute('d', `M 0,0 L ${p1x},${p1y} A ${arcR},${arcR} 0 0,${a2 < a1 ? 0 : 1} ${p2x},${p2y} Z`);
// Metrics table
document.getElementById('dotDisplay').textContent = dot.toFixed(2);
document.getElementById('statUVal').textContent = `(${u.x.toFixed(1)}; ${u.y.toFixed(1)})`;
document.getElementById('statVVal').textContent = `(${v.x.toFixed(1)}; ${v.y.toFixed(1)})`;
document.getElementById('statTheta').textContent = `${angDeg}°`;
document.getElementById('statCos').textContent = cosTheta.toFixed(4);
document.getElementById('statDot').textContent = dot.toFixed(2);
const msg = document.getElementById('dotStatusMsg');
if (Math.abs(dot) < 0.05) {
msg.style.background = '#f0fdf4';
msg.style.borderLeftColor = '#22c55e';
msg.style.color = '#166534';
msg.innerHTML = '★ <strong>VUÔNG GÓC (u ⊥ v):</strong> Tích vô hướng bằng 0!';
} else if (dot > 0) {
msg.style.background = '#eff6ff';
msg.style.borderLeftColor = '#3b82f6';
msg.style.color = '#1e40af';
msg.innerHTML = '• Góc nhọn ($θ < 90^\circ$): Tích vô hướng mang dấu DƯƠNG (+).';
} else {
msg.style.background = '#fef2f2';
msg.style.borderLeftColor = '#ef4444';
msg.style.color = '#991b1b';
msg.innerHTML = '• Góc tù ($θ > 90^\circ$): Tích vô hướng mang dấu ÂM (-).';
}
}
function getMathCoords(e) {
const rect = svg.getBoundingClientRect();
const cx = e.clientX || (e.touches && e.touches[0].clientX);
const cy = e.clientY || (e.touches && e.touches[0].clientY);
const svgX = (cx - rect.left) * (240 / rect.width) - 120;
const svgY = (cy - rect.top) * (240 / rect.height) - 120;
return {
x: Math.round((svgX / scale) * 2) / 2,
y: Math.round((-svgY / scale) * 2) / 2
};
}
document.getElementById('hUdot').addEventListener('mousedown', () => { activeHandle = 'U'; });
document.getElementById('hUdot').addEventListener('touchstart', (e) => { e.preventDefault(); activeHandle = 'U'; }, { passive: false });
document.getElementById('hVdot').addEventListener('mousedown', () => { activeHandle = 'V'; });
document.getElementById('hVdot').addEventListener('touchstart', (e) => { e.preventDefault(); activeHandle = 'V'; }, { passive: false });
window.addEventListener('mousemove', (e) => {
if (!activeHandle) return;
const m = getMathCoords(e);
if (activeHandle === 'U') { u.x = m.x; u.y = m.y; }
else { v.x = m.x; v.y = m.y; }
update();
});
window.addEventListener('touchmove', (e) => {
if (!activeHandle) return;
e.preventDefault();
const m = getMathCoords(e);
if (activeHandle === 'U') { u.x = m.x; u.y = m.y; }
else { v.x = m.x; v.y = m.y; }
update();
}, { passive: false });
const endDrag = () => { activeHandle = null; };
window.addEventListener('mouseup', endDrag);
window.addEventListener('touchend', endDrag);
update();
})();
</script>
5. Bốn dạng toán điển hình & Phương pháp giải chi tiết
Dạng 1: Tính tích vô hướng của hai vectơ bằng định nghĩa
Phương pháp:
- Xác định độ dài hai vectơ: và .
- Xác định góc giữa hai vectơ bằng cách đưa về chung gốc : .
- Áp dụng công thức: .
Bài toán 1
Cho tam giác đều cạnh , có chiều cao hạ từ đỉnh . Tính các tích vô hướng sau:
Lời giải chi tiết:
Tính :
Hai vectơ chung gốc , góc .
Độ dài: .Tính :
Đưa về chung gốc : .Góc .
Do đó:Tính :
Vì tam giác đều nên đường cao vuông góc với cạnh đáy :Theo tính chất vuông góc của tích vô hướng:
Dạng 2: Tính tích vô hướng và góc bằng biểu thức tọa độ
Phương pháp:
Cho và :
- .
- .
Bài toán 2
Trong mặt phẳng tọa độ , cho ba điểm .
- Tính tích vô hướng .
- Tính góc của tam giác .
Lời giải chi tiết:
Tính tọa độ hai vectơ:
- Tích vô hướng:
Tính góc :
Vì , hai vectơ và vuông góc với nhau.
Suy ra tam giác vuông tại đỉnh , tức:
Dạng 3: Chứng minh hai đường thẳng vuông góc hoặc tìm tham số
Phương pháp:
- Hai đường thẳng .
- Thiết lập phương trình theo tham số và giải tìm .
Bài toán 3
Trong mặt phẳng tọa độ , cho hai vectơ và .
- Tìm để hai vectơ và vuông góc với nhau.
- Với , hãy tính độ dài của vectơ .
Lời giải chi tiết:
Tìm để :
Vậy với thì .
Với :
- Vectơ Độ dài của vectơ :
Dạng 4: Ứng dụng tích vô hướng chứng minh đẳng thức hình học
Phương pháp:
- Sử dụng công thức phân tích vectơ và biến đổi bằng bình phương vô hướng.
- Nhớ: .
Bài toán 4
Cho tam giác . Gọi là trung điểm của cạnh . Bằng phương pháp vectơ, hãy chứng minh công thức độ dài đường trung tuyến:
Lời giải chi tiết:
- Vì là trung điểm của , theo tính chất trung điểm:
- Bình phương vô hướng hai vế:
- Mặt khác, xét vectơ . Bình phương vô hướng:Suy ra:
- Thay vào :
6. Ứng dụng khoa học & Trí tuệ nhân tạo (AI)
| Lĩnh vực ứng dụng | Sức mạnh phi thường của Tích vô hướng (Dot Product) |
|---|---|
| Trí tuệ nhân tạo (Cosine Similarity) | Các hệ thống tìm kiếm thông minh và LLM đo mức độ tương đồng giữa câu hỏi và tài liệu: . Giá trị nghĩa là hai văn bản có cùng ý nghĩa. |
| Đồ họa máy tính & Game 3D (Backface Culling) | Loại bỏ mặt khuất: Nhân tích vô hướng giữa vector pháp tuyến bề mặt và vector hướng nhìn . Nếu , mặt phẳng quay lưng về phía camera và không cần vẽ (tiết kiệm GPU). |
| Vật lý cơ học (Công & Công suất) | Công cơ học . Công suất tức thời (tích vô hướng của lực kéo và vận tốc). |
| Xử lý tín hiệu & Âm thanh (Audio Convolution) | Lọc tiếng ồn và nhận diện giọng nói: Tích vô hướng của chuỗi sóng âm với bộ lọc số học (Dot product matching). |
| Mạng nơ-ron nhân tạo (Neural Network Layer) | Phép toán cốt lõi của mọi tế bào nơ-ron nhân tạo: (tích vô hướng giữa ma trận trọng số và dữ liệu đầu vào ). |
7. Trắc nghiệm tương tác kiểm tra năng lực (10 câu)
8. Luyện tập tự do & Thử thách thực tế
Bài tập 1 (Tìm trực tâm tam giác bằng tích vô hướng)
Trong mặt phẳng tọa độ , cho tam giác có các đỉnh .
- Tìm tọa độ trực tâm của tam giác .
- Kiểm tra xem điểm có trùng với điểm nào trong ba đỉnh không.
Hướng dẫn giải:
- Trực tâm là giao điểm của ba đường cao, tức và :
- và .
- và . Hệ phương trình vuông góc:Vậy trực tâm là .
- Tọa độ hoàn toàn khác với , tam giác là tam giác nhọn (hoặc tù không vuông).
Bài tập 2 (Khoa học máy tính - Cosine Similarity)
Trong một hệ thống gợi ý bài viết AI, nội dung của hai bài viết được biểu diễn bởi hai vectơ đặc trưng:
- Hãy tính tích vô hướng và độ dài của mỗi vectơ.
- Tính độ tương đồng cosin (Cosine Similarity) giữa hai bài viết:Nếu hệ thống quy định hai bài viết có liên quan chặt chẽ khi , hãy cho biết hai bài viết trên có được xếp vào cùng một chủ đề không?
Hướng dẫn giải:
- Tính toán tích vô hướng mở rộng trong không gian 4 chiều:Độ dài:
- Độ tương đồng Cosine:Vì , hệ thống kết luận hai bài viết này có liên quan chặt chẽ và sẽ được xếp vào cùng một chủ đề gợi ý cho người đọc!
Tự kiểm tra kiến thức
Các thẻ lấy từ nội dung bài học. Với câu điền khuyết, bấm vào dấu “…” để chọn cụm từ phù hợp; với thẻ nhớ lại, em tự đối chiếu và đánh giá.