2010-07-20 63 views
11

Nếu tôi có một ma trận vuông là 1.000 x 1.000 thì Lapack có thể tính toán các giá trị riêng và các giá trị riêng cho ma trận này không? Và nếu nó có thể mất bao lâu? Còn về 10.000 ma trận 10.000 hoặc thậm chí 1.000.000 1.000.000 ma trận thì sao?Tôi có thể sử dụng Lapack để tính toán các giá trị riêng và các giá trị riêng của các ma trận thưa thớt lớn không?

Xin lưu ý đây sẽ là ma trận thưa thớt chủ yếu được điền bằng 0s (ma trận sẽ là biểu đồ đại diện cho mạng xã hội). Có bất kỳ thủ tục đặc biệt trong Lapack để đối phó với ma trận thưa thớt? Tôi thấy đề xuất Arpack. Nhưng điều này có cho phép tính toán các ma trận rất lớn không?

+0

Tôi đang sử dụng LAPACK trong Intel MKL cho cùng một mục đích. Thông thường tính toán của tôi là với ma trận n = 20k, m = từ 100m đến 1m. Tính toán các giá trị riêng là khá nhanh, nếu bạn cũng cần tất cả các eigenvectors, nó mất khoảng 30 phút trên một máy tính nhanh (i7-2600, 4-lõi). Nếu bạn có ram 16GB, bộ nhớ không phải là vấn đề. – mete

Trả lời

1

Lapack chỉ hỗ trợ các ma trận dày đặc và dải (không hỗ trợ cho ma trận thưa thớt nói chung). Vì vậy, trừ khi ma trận thưa thớt của bạn là dải (từ mô tả của bạn có vẻ như nó sẽ là một ma trận thưa thớt nói chung, thường được lưu trữ trong một sơ đồ lưu trữ hàng nén), sau đó lapack không phải là những gì bạn muốn sử dụng.

Đối với các ma trận thưa thớt lớn, Arpack sẽ là một nơi tốt để bắt đầu.

9

LAPACK không có hỗ trợ đặc biệt được tích hợp cho ma trận thưa thớt, nhưng ARPACK có. Tùy thuộc vào máy bạn có kế hoạch để chạy này, điều này có thể loại trừ việc sử dụng LAPACK, vì bạn có thể hết bộ nhớ cho các ma trận rất lớn. Xem http://www.netlib.org/utk/people/JackDongarra/la-sw.html để biết tóm tắt về các thư viện đại số tuyến tính khác nhau.

Không có cách nào để cung cấp cho bạn ước tính có ý nghĩa về các phép tính sẽ mất bao lâu mà không có chi tiết về ma trận nào bạn mong đợi (đối xứng sẽ nhanh hơn gấp nhiều lần), bộ xử lý bạn định chạy cái này bạn có sẵn, v.v.

Dựa trên các câu hỏi khác của bạn, tôi khuyên bạn nên gắn bó với MATLAB. Nó có hỗ trợ ma trận thưa thớt và tốt cho đại số tuyến tính nói chung.

3

Nếu ma trận của bạn thưa thớt, có thể bạn nên sử dụng gói sparse matrix. Xem StackOverflow này article để biết thêm thông tin.

Sử dụng lapack bạn có thể thực hiện 1000 x 1000 trong một vài giây (tùy thuộc vào máy của bạn). Một 10000 x 10000 sẽ mất 1000 lần nữa, vì các thuật toán tất cả có xu hướng là O (n^3).

Các vấn đề liên quan