2010-07-20 14 views
11

1000'den 1.000'e kadar kare matrisim olsaydı, Lapack bu matrisin özdeğerlerini ve özdeğerlerini hesaplayabilir miydi? Ve eğer ne kadar sürebilirse? Ayrıca 10.000 x 10.000 matris ve hatta 1.000.000 x 1.000.000 matris için ne dersiniz?Büyük çaplı matrislerin özdeğerleri ve özvektörlerini hesaplamak için Lapack'i kullanabilir miyim?

Not: Bunlar, öncelikli olarak 0'ların (matrisler sosyal ağları temsil eden grafikler olacak) seyrek olarak seyrek seyrek olacaklardır. Lapack'de seyrek matrislerle uğraşmak için herhangi bir özel prosedür var mı? Arpack tavsiyesini görüyorum. Ancak bu, çok büyük matrislerin hesaplanmasını sağlar mı?

+0

Aynı amaç için Intel MKL'de LAPACK kullanıyorum. Genellikle hesaplamalarm matrisler n = 20k, m = 100m ve 1m arasındadır. Özdeğerlerin hesaplanması oldukça hızlıdır, eğer tüm özvektörlere ihtiyacınız varsa, hızlı bir PC'de yaklaşık 30 dakika sürer (i7-2600, 4 çekirdekli). 16GB ram varsa, bellek sorun değil. – mete

cevap

1

Lapack yalnızca yoğun ve bantlanmış matrisler için destek sunar (genel seyrek matrisler için destek yok). Dolayısıyla, seyrek matrisiniz bantlanmamışsa (açıklamanızdan, genellikle sıkıştırılmış sıralı bir depolama düzeninde saklanan genel seyrek bir matris olacağı gibi), daha sonra kullanmak istediğiniz şey bir lapack değildir.

Büyük çaplı seyrek matrisler için, Arpack başlamak için iyi bir yer olabilir.

9

LAPACK'in seyrek matrisler için yerleşik özel desteği yoktur, ancak ARPACK yapar. Bu makineyi çalıştırmayı planladığınıza göre, çok büyük matrisler için bellek tükenebileceğinden, bu LAPACK kullanımını engelleyebilir. Çeşitli lineer cebir kütüphanelerinin bir özeti için http://www.netlib.org/utk/people/JackDongarra/la-sw.html'a bakınız.

Bu hesaplamaların, beklediğiniz matrislerin ayrıntılarını (simetrik olanlar çok daha hızlı olacaktır), hangi işlemciyi çalıştırmayı planladığınızı, ne kadar bellek harcayacağınızı anlamanız için anlamlı bir tahminde bulunmanın bir yolu yoktur. Mevcut var, vb.

Diğer sorularınıza dayanarak MATLAB ile yapışmasını öneriyorum. Seyrek matris desteğine sahiptir ve genel olarak lineer cebir için iyidir.

3

Matrisleriniz seyrek ise, sparse matrix paketini kullanmanız daha iyi olacaktır. Daha fazla bilgi için bkz. StackOverflow article.

Lapack'ı kullanarak birkaç saniye içinde 1000 x 1000 yapabilirsiniz (makinenize bağlı olarak). Algoritmaların tümü O (n^3) olma eğiliminde olduğundan, 10000 x 10000 1000 kat daha uzun sürer.

İlgili konular