Có một thuật toán để nâng một ma trận lên sức mạnh thứ thời gian?
Tôi đã tìm kiếm trực tuyến, nhưng cho đến nay đã không thành công.
Có một thuật toán để nâng một ma trận lên sức mạnh thứ thời gian?
Tôi đã tìm kiếm trực tuyến, nhưng cho đến nay đã không thành công.
Câu trả lời:
Đây là mã giả cho một thuật toán lũy thừa ma trận. Lưu ý rằng toán tử * biểu thị phép nhân ma trận thông thường.
MATHPOWER (M, n)
if n == 1
then return M
else
P = MATHPOWER (M, floor(n/2))
if n mod 2 == 0
then return P * P
else
return P * P * M
Có hai thuật toán khác có thể có hoặc không có liên quan. Thuật toán đầu tiên cắt chéo ma trận của bạn (thường có thể), viết nó thành, Ở đâu nói chung có thể có giá trị phức tạp. Sau đó bạn tính toán. Lưu ý rằng rất dễ dàng để nâng một ma trận đường chéo lênsức mạnh thứ. Nếukhông thể chéo, bạn tìm biểu mẫu Jordan của nó và tiếp tục như trước đây (bây giờ bạn cũng phải tính toán một số hệ số nhị thức). Thuật toán này có thể không ổn định về số lượng.
Một thuật toán khác sử dụng thực tế là thỏa mãn đa thức đặc trưng của nó (hoặc thậm chí là đa thức tối thiểu của nó). Giả sử cho một số , nói đa thức đặc trưng. Sau đó chúng ta có thể tính toán kết thúc và sau đó thay thế . Điều đó có nghĩa là chúng tôi tính toán như một đa thức, sử dụng thực tế rằng và chỉ ở cuối thay thế các giá trị của . Chúng tôi thậm chí có thể tính toán trước tất cả các quyền hạn cần thiết của và tất cả các giá trị của cho và sau đó thuật toán này có thể nhanh hơn thuật toán là câu trả lời của Massimo Cafaro. Nó có thể ổn định hơn về mặt số so với thuật toán trước đó.