Seyrek ve son derece kötü koşullandırılmış bir sistemi çözme


9

A'nın karmaşık, seyrek, simetrik olmayan ve son derece kötü koşullandırılmış (koşul numarası ~ 1E + 20) kare veya dikdörtgen matris olduğu Ax = b'yi çözmek niyetindeyim. LAPACK'te ZGELSS ile sistemi doğru bir şekilde çözebildim. Ancak sistemimdeki özgürlük dereceleri büyüdükçe, ZGELSS'li bir bilgisayarda sistemi, spariteden istifade etmediği için çözmek uzun zaman alıyor. Son zamanlarda aynı sistem için SuperLU'yu (Harwell-Boeing depolama alanı kullanarak) denedim ama sonuçlar> 1E + 12 durum numarası için yanlıştı (bunun pivotlama ile sayısal bir sorun olup olmadığından emin değilim).

Daha önce geliştirilmiş çözücüler kullanmaya daha eğilimliyim. Bahsettiğim sistemi hızlıca çözebilen (örn. Seyrekliği kullanan) ve güvenilir bir şekilde (durum sayıları göz önünde bulundurularak) çözülebilecek sağlam bir çözücü var mı?


1
Önkoşul yapabilir misiniz? Eğer öyleyse, Krylov altuzay yöntemleri etkili olabilir. Doğrudan yöntemlerde ısrar etseniz bile, ön koşullandırma sayısal hataların kontrolüne yardımcı olacaktır.
Geoff Oxberry

1
Ayrıca, ön koşullandırma ile hemen hemen burada anlatıldığı şekilde iyi bir deneyim kazandım: en.wikipedia.org/wiki/… Ön koşullandırmayı tam aritmetik olarak yapabilirsiniz. Ancak matrislerim yoğun, bu yüzden sizi burada daha spesifik yöntemlere / rutinlere yönlendiremezsiniz.
AlexE

11
Durum numarası neden bu kadar büyük? Belki de sistemi daha iyi şartlandırmak için formülasyon geliştirilebilir mi? Genel olarak, daha doğru bir artık değerlendirebilecektir bekleyemezsiniz Eğer bit tükendi sonra çok az bir değer Krylov'un yapar. Koşul numarası gerçekten , dört duyarlık kullanmalısınız ( GETS ile PETSc dahil birkaç paket tarafından desteklenir). (machine precision)(condition number)1020__float128
Jed Brown

2
Bu koşul numarası tahminini nereden alıyorsunuz? Matlab'dan boş bir alana sahip bir matrisin durum numarasını tahmin etmesini isterseniz, size sonsuzluk verebilir veya bazen size gerçekten çok büyük bir sayı verebilir (sahip olduğunuz gibi). Bakmakta olduğunuz sistemde boş bir alan varsa ve bunun ne olduğunu biliyorsanız, onu yansıtabilirsiniz ve geride bıraktığınız şey daha iyi bir koşul numarasına sahip olabilir. Daha sonra PETSc veya Trilinos'u veya neyiniz olduğunu kullanabilirsiniz.
Daniel Shapero

3
Daniel- ZGELSS tarafından kullanılan kesik SVD yöntemi boş alanı belirler (SVD'deki küçük tekil değerlerle ilişkili tekil vektörler N (A) için bir temeldir) ve üzerinde . minAxbperp(N(A))
Brian Borchers

Yanıtlar:


13

Bu sorunu gidermek için ZGELSS kullandığınızda, bu son derece kötü koşullu sorunu düzenli hale getirmek için kesilmiş tekil değer ayrıştırma kullanırsınız. bu kütüphane rutininin için en küçük kareler çözümünü bulmaya çalışmadığını , bunun yerine en aza indiren bir çözümü bulmaya çalıştığını anlamak önemlidirminimizasyona karşı. Ax=bxAxb

ZGELSS'e iletilen RCOND parametresinin, hangi tekil değerlerin dahil edilmesi ve çözümün hesaplanmasının dışında tutulması gerektiğini belirtmek için kullanılabileceğini unutmayın. RCOND * S (1) (S (1) 'den küçük herhangi bir tekil değer en büyük tekil değerdir) göz ardı edilecektir. Bize RCOND parametresini ZGELSS'de nasıl ayarladığınızı söylemediniz ve matrisinizdeki veya sağ taraftaki katsayılarının gürültü seviyesi hakkında hiçbir şey yapmadık , bu nedenle uygun miktarda düzenlenme. Ab

ZGELSS ile elde ettiğiniz düzenli çözümlerden memnun görünüyorsunuz, bu yüzden kesilmiş SVD yönteminden etkilenen düzenlemenin ( en aza indiren en küçük kareler çözümleri arasında minimum çözüm bulduğu RCOND * S (1)) 'den daha büyük tekil değerlerle ilişkili tekil vektörlerin kapsadığı çözümlerin alanı sizin için tatmin edicidir. xAxb

Sorunuz, "Bu büyük, seyrek ve çok kötü koşullu doğrusal en küçük kareler sorununa nasıl düzenli olarak düzenlenmiş en küçük kareler çözümlerini verimli bir şekilde elde edebilirim?"

Benim önerim, açıkça düzenlenmiş en küçük kareler sorununu en aza indirmek için yinelemeli bir yöntem (CGLS veya LSQR gibi) kullanmaktır.

minAxb2+α2x2

düzenlileştirme parametresi ayarlanır, böylece sönümlü en küçük kareler sorunu iyi koşullandırılır ve sonuçta ortaya çıkan düzenli çözümlerden memnun kalırsınız. α


Başından bahsetmediğim için özür dilerim. Çözülen problem FEM kullanarak Helmholtz akustiği denklemidir. Çözelti yaklaşıklaştırmak için kullanılan düzlem dalga temeli nedeniyle sistem yetersiz koşullandırılmıştır.
user1234

ve katsayılar nereden geliyor? Ölçülen veriler mi? Bazı nesnelerin tasarımından "kesin" değerler (pratikte 15 basamaklı toleranslara işlenemez ...)? Ab
Brian Borchers

1
A ve b matrisleri, Helmholtz PDE'nin zayıf formülasyonu kullanılarak oluşturulur, bakınız: asadl.org/jasa/resource/1/jasman/v119/i3/…
user1234 28:03

9

Jed Brown bunu soruya yapılan yorumlarda zaten belirtti, ancak durum numaranız büyükse, normal çift hassasiyette yapabileceğiniz çok fazla bir şey yoktur: çoğu durumda, muhtemelen tek bir doğruluk rakamı elde edemezsiniz. ve daha da kötüsü söyleyemezsiniz, çünkü çözüm vektörünüze karşılık gelen kalıntıyı doğru bir şekilde değerlendiremezsiniz. Başka bir deyişle: hangi doğrusal çözücüyü seçmeniz gerektiği sorusu değildir - hiçbir doğrusal çözücü bu matrisler için yararlı bir şey yapamaz.

Bu tür durumlar genellikle uygun değildir çünkü uygun olmayan bir temel seçersiniz. Örneğin, Galerkin yönteminin temeli olarak işlevlerini seçerseniz bu tür koşulsuz matrisler elde edersiniz . (Bu, kötü bir şekilde kötü şartlandırılmış Hilbert matrisine yol açar.) Bu gibi durumlarda, hangi çözücünün doğrusal sistemi çözebileceğini sormak değil, kullanılabilecek daha iyi bazların olup olmadığını sormaktır. Aynı şeyi yapmanızı teşvik ediyorum: bu tür matrislerle sonuçlanmamak için probleminizi yeniden biçimlendirmeyi düşünün.1,x,x2,x3,...


PDE için kötü bir problemi ayrıştırırken, örneğin geriye doğru ısı denklemi, kesinlikle kötü koşullu bir matris denklemi ile sonuçlanacağız. Bu, denklemi yeniden formüle ederek veya verimli bir matris çözücü seçerek veya kayan nokta sayısındaki hassasiyeti artırarak çözebileceğimiz durum değildir. Bu durumda [yani akustik ters problemler], bir düzenleme yöntemi gereklidir.
tqviet

7

Koşulsuz sorunları çözmenin en basit / en hızlı yolu hesaplamaların hassasiyetini artırmaktır (kaba kuvvetle). Başka bir (ancak her zaman mümkün olmayan) yol, sorununuzu yeniden formüle etmektir.

Dörtlü hassasiyet kullanmanız gerekebilir (34 ondalık basamak). Bir kursta 20 basamak kaybedilecek olsa da (koşul numarası nedeniyle) yine de 14 doğru basamak alacaksınız.

Herhangi bir ilgi varsa, şimdi dört hassasiyetli seyrek çözücüler MATLAB'de de mevcuttur.

(Bahsedilen araç kutusunun yazarıyım).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.