Không có một số thông tin về việc xây dựng ma trận đối xứng thực xác định , các đề xuất được đưa ra là rất cần thiết khá hạn chế.12×12
Tôi đã tải xuống gói Armadillo từ Sourceforge và xem tài liệu này. Cố gắng cải thiện hiệu suất của tính toán riêng biệt và , trong đó là ma trận xếp hạng một của tất cả các ma trận, bằng cách đặt ví dụ . Tài liệu lưu ý rằng đây là mặc định cho ma trận có kích thước , do đó, tôi cho rằng tùy chọn này là mặc định cho trường hợp .det(Q)det(12I−Q−J)Jdet(Q,slow=false)
4×4slow=true
12×12
Những gì slow=true
có lẽ làm là xoay vòng một phần hoặc toàn bộ trong việc có được một hình thức phản hồi hàng, từ đó dễ dàng tìm thấy định thức. Tuy nhiên, bạn biết trước ma trận là xác định dương, do đó, việc xoay vòng là không cần thiết cho sự ổn định (ít nhất là đối với phần lớn các tính toán của bạn. Không rõ gói Armadillo có ném ngoại lệ hay không nếu pivots trở nên quá nhỏ, nhưng điều này sẽ là một Tính năng của gói đại số tuyến tính số hợp lý. EDIT: Tôi tìm thấy mã Armadillo thực hiện trong tệp tiêu đề , sử dụng các mẫu C ++ cho chức năng quan trọng. Cài đặt dường như không ảnh hưởng đến cáchQdet
include\armadillo_bits\auxlib_meat.hpp
slow=false
12×12yếu tố quyết định sẽ được thực hiện bởi vì tính toán được "ném qua tường" thành LAPACK (hoặc ATLAS) tại thời điểm đó mà không có dấu hiệu cho thấy không cần phải xoay vòng; xem det_lapack
và các yêu cầu của nó trong tập tin đó.
Điểm khác là tuân theo khuyến nghị của họ về việc xây dựng gói Armadillo liên kết với các thay thế tốc độ cao cho BLAS và LAPACK, nếu bạn thực sự đang sử dụng các gói đó; xem phần 5 tệp Armadillo README.TXT để biết chi tiết. [Việc sử dụng phiên bản BLAS hoặc LAPACK 64 bit chuyên dụng cũng được khuyến nghị cho tốc độ trên các máy 64 bit hiện tại.]
Giảm hàng thành dạng hồi âm về cơ bản là loại bỏ Gaussian và có độ phức tạp số học . Đối với cả hai ma trận, số này sau đó lên tới hai lần hoạt động hoặc . Các hoạt động này có thể là "nút cổ chai" trong quá trình xử lý của bạn, nhưng có rất ít hy vọng rằng nếu không có cấu trúc đặc biệt trong (hoặc một số mối quan hệ đã biết trong số các trường hợp thử nghiệm nghìn tỷ cho phép khấu hao) thì công việc có thể giảm xuống .23n3+O(n2)43n3+O(n2)QO(n2)
Để so sánh, việc mở rộng bởi các đồng yếu tố của ma trận liên quan đếnphép toán nhân (và gần như nhiều phép cộng / phép trừ), do đó, đối với phép so sánh ( so với ) rõ ràng ủng hộ việc loại bỏ các cofactors.n×nn!n=1212!=47900160023n3=1152
Một cách tiếp cận khác yêu cầu công việc sẽ giảm thành dạng tridia chéo với các phép biến đổi Householder, cũng đưa thành dạng tridia chéo. Việc tính toán và sau đó có thể được thực hiện trong các hoạt động . [Hiệu ứng của bản cập nhật cấp một trong định thức thứ hai có thể được biểu thị dưới dạng một yếu tố vô hướng được đưa ra bằng cách giải quyết một hệ thống ba cực.]43n3+O(n2)Q12I−Qdet(Q)det(12I−Q−J)O(n)−J
Việc thực hiện một tính toán độc lập như vậy có thể đáng giá như một kiểm tra về kết quả của các cuộc gọi thành công (hoặc thất bại) đến det
chức năng của Armadillo .
Trường hợp đặc biệt: Theo đề xuất của một bình luận của Jernej, giả sử rằng trong đó như trước là ma trận (hạng 1) của tất cả những người và là một ma trận đường chéo không tích cực (dương). Thật vậy, đối với ứng dụng được đề xuất trong lý thuyết đồ thị, đây sẽ là các ma trận nguyên. Sau đó, một công thức rõ ràng cho là:Q=D−JJD=diag(d1,…,dn)det(Q)
det(Q)=(∏i=1ndi)(1−∑i=1nd−1i)
Một bản phác thảo bằng chứng của nó tạo cơ hội để minh họa khả năng ứng dụng rộng hơn, tức là bất cứ khi nào có một định thức đã biết và hệ thống nhanh chóng được giải quyết. Bắt đầu bằng cách bao thanh toán:DDv=(1…1)T
det(D−J)=det(D)⋅det(I−D−1J)
Bây giờ lại xếp hạng 1, cụ thể là . Lưu ý rằng yếu tố quyết định thứ hai chỉ đơn giản là:D−1J(d−11…d−1n)T(1…1)
f(1)=det(I−D−1J)
nơi là đa thức đặc trưng của . Là ma trận hạng 1, phải có (ít nhất) số của để tính đến khoảng trống của nó. Giá trị riêng "thiếu" là , như có thể thấy từ tính toán:f(x)D−1Jf(x)n−1x∑d−1i
D−1J(d−11…d−1n)T=(∑d−1i)(d−11…d−1n)T
Theo sau đó là đa thức đặc trưng và như được hiển thị ở trên cho , .f(1)det(I-D-1J)1-Σd - 1 if(x)=xn−1(x−∑d−1i)f(1)det(I−D−1J)1−∑d−1i
Cũng lưu ý rằng nếu , thì , một ma trận đường chéo có xác định đơn giản là sản phẩm của các mục chéo.12 I - Q - J = 12 I - D + J - J = 12 I - DQ=D−J12I−Q−J=12I−D+J−J=12I−D