python-094Đọc toàn bộ đề miễn phí

Trực chuẩn hóa Gram-Schmidt cải tiến (Modified Gram-Schmidt) và phân rã QR

Viết hàm qr_gram_schmidt(A: np.ndarray) -> tuple[np.ndarray, np.ndarray]:

PythonNâng cao35 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

qr decompositiongram schmidtorthogonalizationnumpy

Kiến thức tiên quyết: orthogonality, vector projection.

Nội dung đề bài

Mục tiêu kiến thức

  • Hiểu quá trình trực giao hóa và trực chuẩn hóa các vector cột.
  • Phân biệt Classical Gram-Schmidt (CGS) dễ mất tính trực giao do sai số làm tròn số thực và Modified Gram-Schmidt (MGS) có tính ổn định số học cao.
  • Phân rã ma trận A = Q · R trong đó Q là ma trận trực chuẩn (QT Q = IN) và R là ma trận tam giác trên.

Mô tả bài toán

Viết hàm qr_gram_schmidt(A: np.ndarray) -> tuple[np.ndarray, np.ndarray]:

  • A: Ma trận thực kích thước (M, N) với M ≥ N.
  • Kiểm tra tính hợp lệ:
  • Nếu M < N hoặc len(A) == 0, raise ValueError("Ma tran phai co so hang lon hon hoac bang so cot").
  • Khởi tạo:
  • Ma trận Q kích thước (M, N) khởi tạo từ bản sao của A.
  • Ma trận R kích thước (N, N) khởi tạo toàn số 0.
  • Thuật toán Modified Gram-Schmidt (MGS):
  • Với mỗi cột i = 0, 1, …, N-1:
  • Tính độ dài chuẩn cột: R[i, i] = |Q[:, i]|2 = √(∑r=0M-1 Q[r, i]2).
  • Nếu R[i, i] < 10-12, cột phụ thuộc tuyến tính, gán Q[:, i] = 0.
  • Ngược lại: chuẩn hóa Q[:, i] = Q[:, i]R[i, i].
  • Với từng cột còn lại j = i + 1, …, N-1:
  • Chiếu: R[i, j] = Q[:, i]T · Q[:, j].
  • Trừ hình chiếu trực tiếp (ngay lập tức cập nhật Q[:, j]):

Q[:, j] = Q[:, j] - R[i, j] · Q[:, i].

  • Trả về (Q, R).

Input

  • Tham số: A: np.ndarray.

Output

  • Trả về: tuple[np.ndarray, np.ndarray].

Ràng buộc

  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.
  • Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.

Ví dụ 1

Input

qr_gram_schmidt(A=[[1.0, 1.0], [1.0, 0.0], [0.0, 1.0]])

Output

True

Giải thích

Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.

Ví dụ 2

Input

qr_gram_schmidt(A=[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], raises='ValueError')

Output

True

Giải thích

Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.