Skip to Content
CoursesCSC102การคูณเมทริกซ์ขนาด 3x3

การคูณเมทริกซ์ขนาด 3x3

โจทย์

เขียนโปรแกรมที่อ่านเมทริกซ์ขนาด 3 x 3 จำนวนสองเมทริกซ์ และแสดงผลคูณของทั้งสองเมทริกซ์ ในการคูณเมทริกซ์ a ด้วยเมทริกซ์ b จำนวนคอลัมน์ใน a ต้องเท่ากับจำนวนแถวใน b และทั้งสองเมทริกซ์ต้องมีประเภทของสมาชิกที่เหมือนกันหรือเข้ากันได้ ให้ c เป็นผลลัพธ์ของการคูณ ตัวอย่างเช่น สำหรับเมทริกซ์ขนาด 3 x 3 สองเมทริกซ์ a และ b, ผลลัพธ์ c คือ

[a11a12a13a21a22a23a31a32a33]+[b11b12b13b21b22b23b31b32b23]=[ab11ab12ab13ab21ab22ab23ab31ab32ab23]\begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{bmatrix} + \begin{bmatrix} b_{11} & b_{12} & b_{13} \\ b_{21} & b_{22} & b_{23} \\ b_{31} & b_{32} & b_{23} \end{bmatrix} = \begin{bmatrix} {ab}_{11} & {ab}_{12} & {ab}_{13} \\ {ab}_{21} & {ab}_{22} & {ab}_{23} \\ {ab}_{31} & {ab}_{32} & {ab}_{23} \end{bmatrix}

โดยที่

cij=ai1b1j+ai2b2j+ai3b3jc_{ij} = a_{i1}b_{1j} + a_{i2}b_{2j} + a_{i3}b_{3j}

ถ้าเมทริกซ์ 1 คือ 1 2 3 4 5 6 7 8 9 และเมทริกซ์ 2 คือ 0 2 4 1 4.5 2.2 1.1 4.3 5.2 การคูณเมทริกซ์จะเป็นดังนี้:

แต่ละสมาชิกของเมทริกซ์ผลคูณ ab สามารถคำนวณได้ดังนี้:

  • ab11=(1.0×0.0)+(2.0×1.0)+(3.0×1.1)=5.3{ab}_{11} = (1.0 \times 0.0) + (2.0 \times 1.0) + (3.0 \times 1.1) = 5.3
  • ab12=(1.0×2.0)+(2.0×4.5)+(3.0×4.3)=11.6{ab}_{12} = (1.0 \times 2.0) + (2.0 \times 4.5) + (3.0 \times 4.3) = 11.6
  • ab13=(1.0×4.0)+(2.0×2.2)+(3.0×5.2)=17.9{ab}_{13} = (1.0 \times 4.0) + (2.0 \times 2.2) + (3.0 \times 5.2) = 17.9
  • ab33=(7.0×4.0)+(8.0×2.2)+(9.0×5.2)=92.4{ab}_{33} = (7.0 \times 4.0) + (8.0 \times 2.2) + (9.0 \times 5.2) = 92.4

คำแนะนำ: ใช้ double เป็นประเภทข้อมูล

InputOutput
1 2 3 4 5 6 7 8 9
0 2 4 1 4.5 2.2 1.1 4.3 5.2
5.300000000000001 23.9 24.0
11.600000000000001 56.3 58.2
17.9 88.69999999999999 92.4

โค้ด

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double[][] matrixA = new double[3][3]; double[][] matrixB = new double[3][3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { matrixA[i][j] = scanner.nextDouble(); } } for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { matrixB[i][j] = scanner.nextDouble(); } } for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { double product = (matrixA[i][0] * matrixB[0][j]) + (matrixA[i][1] * matrixB[1][j]) + (matrixA[i][2] * matrixB[2][j]); System.out.print(product + " "); } System.out.println(); } } }

คำอธิบาย

import java.util.Scanner;
  • เราเริ่มต้นด้วยการนำเข้า (import) คลาส Scanner ซึ่งใช้สำหรับการรับข้อมูลจากผู้ใช้
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
  • เราสร้างคลาสหลักชื่อ Main
  • เมธอด main เป็นจุดเริ่มต้นของโปรแกรม
  • เราสร้างออบเจ็กต์ Scanner เพื่อรับข้อมูลจากผู้ใช้
double[][] matrixA = new double[3][3]; double[][] matrixB = new double[3][3];
  • เราสร้างอาร์เรย์สองมิติสองชุด matrixA และ matrixB ขนาด 3x3 เพื่อเก็บข้อมูลของเมทริกซ์สองเมทริกซ์
  • เราใช้ double เป็นประเภทข้อมูลตามคำแนะนำ เพื่อรองรับทั้งจำนวนเต็มและทศนิยม
for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { matrixA[i][j] = scanner.nextDouble(); } }
  • เราใช้ลูปซ้อนเพื่อรับค่าจากผู้ใช้สำหรับเมทริกซ์ A
  • scanner.nextDouble() ใช้เพื่อรับค่าทศนิยมจากผู้ใช้
for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { matrixB[i][j] = scanner.nextDouble(); } }
  • เราทำเช่นเดียวกันเพื่อรับค่าสำหรับเมทริกซ์ B
for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { double product = (matrixA[i][0] * matrixB[0][j]) + (matrixA[i][1] * matrixB[1][j]) + (matrixA[i][2] * matrixB[2][j]); System.out.print(product + " "); } System.out.println(); }
  • เราใช้ลูปซ้อนอีกครั้งเพื่อคำนวณผลคูณของเมทริกซ์
  • สำหรับแต่ละตำแหน่ง (i, j) ในเมทริกซ์ผลลัพธ์ เราคำนวณผลรวมของผลคูณระหว่างแถว i ของ matrixA และคอลัมน์ j ของ matrixB
  • product เก็บผลลัพธ์ของการคูณเมทริกซ์สำหรับแต่ละตำแหน่ง
  • เราใช้ System.out.print() เพื่อแสดงผลลัพธ์ในแต่ละตำแหน่ง โดยเว้นวรรคระหว่างแต่ละค่า
  • System.out.println() ใช้เพื่อขึ้นบรรทัดใหม่หลังจากแสดงผลครบทุกคอลัมน์ในแต่ละแถว
ปรับปรุงล่าสุด