Saya memiliki matriks dan . jarang dan dengan sangat besar (bisa dalam urutan beberapa juta.) adalah matriks tinggi dengan agak kecil ( ) dan setiap kolom dapat hanya memiliki satu entri dengan sisanya menjadi 's, sehingga . sangat besar, jadi sangat sulit untuk membalikkan, dan saya bisa menyelesaikan sistem linear seperti secara iteratif menggunakan metode ruang bagian Krylov seperti , tapi saya tidak punyaG A n × n n G n × m m 1 < m < 1000 1 0 G T G = I A A x = b B i C G S t a b ( l ) A - 1 secara eksplisit.
Saya ingin menyelesaikan sistem formulir: , di mana dan adalah vektor panjang . Salah satu cara untuk melakukannya adalah dengan menggunakan algoritma iteratif dalam algoritma iteratif untuk menyelesaikan untuk untuk setiap iterasi dari algoritma iteratif luar. Ini akan menjadi sangat mahal secara komputasi. Saya bertanya-tanya apakah ada cara komputasi yang lebih mudah untuk menyelesaikan masalah ini.x b m A - 1
Jawaban:
Perkenalkan vektor dan selesaikan sistem berpasangan besar , untuk secara bersamaan, menggunakan metode iteratif. Jika adalah simetris (seperti tampaknya meskipun Anda tidak menyatakannya secara eksplisit) maka sistemnya adalah simetris (tetapi tidak terbatas, meskipun quasidefinite jika adalah pasti positif), yang mungkin membantu Anda memilih metode yang tepat. (kata kunci yang relevan: matriks KKT, matriks quasidefinite).A y + G x = 0 G T y = - b ( y , x ) A Ay: = - A- 1G x A y+ G x = 0 GTy= - b ( y, x ) SEBUAH SEBUAH
Sunting: Karena adalah simetris yang kompleks, demikian pula matriks yang ditambah, tetapi tidak ada quasidefiniteness. Namun Anda dapat menggunakan rutin untuk menghitung ; karena itu Anda dapat mengadaptasi metode seperti QMR ftp://ftp.math.ucla.edu/pub/camreport/cam92-19.pdf (dirancang untuk sistem nyata, tetapi Anda dapat dengan mudah menulis ulang untuk sistem yang kompleks, menggunakan adjoin di tempat transpos) untuk menyelesaikan masalah Anda.A x A ∗ x = ¯ A ¯ xSEBUAH A x SEBUAH∗x = A x¯¯¯¯¯¯¯¯¯¯
Sunting2: Sebenarnya, (0,1) -struktur berarti Anda dapat menghilangkan dan komponen secara simbolis, sehingga berakhir dengan sistem yang lebih kecil untuk dipecahkan. Ini berarti mengacaukan struktur , dan membayar hanya ketika diberikan secara eksplisit dalam format jarang daripada sebagai operator linier.x G T y A AG x GTy SEBUAH SEBUAH
sumber
Mengikuti jawaban Arnold, ada sesuatu yang dapat Anda lakukan untuk menyederhanakan masalah. Secara khusus, tulis ulang sistem sebagai . Kemudian perhatikan bahwa dari pernyataan bahwa adalah tinggi dan sempit dan setiap baris hanya memiliki satu 1 dan nol sebaliknya, maka pernyataan berarti bahwa himpunan bagian dari elemen memiliki nilai tetap, yaitu unsur-unsur dari .G G T y = - b y - bAy+Gx=0,GTy=−b G GTy=−b y −b
Mari kita katakan bahwa untuk kesederhanaan bahwa memiliki kolom dan baris dan bahwa persis baris pertama memiliki yang di dalamnya dan yang menyusun kembali unsur-unsur saya dapat membuatnya sehingga memiliki matriks identitas di atas dan nol matriks di bagian bawah. Kemudian saya dapat mempartisi ke dalam "constrained" dan "free" sehingga . Saya juga dapat mempartisi sehingga . Dari persamaanm n m x G m × m n - m × m y = ( y c , y f ) m n - m y c = - b A A = ( A c c A c f A f c A f f ) A y + G x = 0 A c c y cG m n m x G m×m n−m×m y=(yc,yf) m n−m yc=−b A A=(AccAfcAcfAff) Ay+Gx=0 Saya kemudian mendapatkan yang berikut:
dan menggunakan apa yang kita ketahui tentang kita miliki dari persamaan kedua ini
dan akibatnya
Dengan kata lain, satu-satunya matriks yang harus Anda invert adalah subset dari yang baris dan kolomnya tidak disebutkan dalam (ruang nol dari ). Ini dapat Anda lakukan dengan mudah: (i) menghitung ; (ii) gunakan pemecah apa pun yang Anda miliki untuk menyelesaikan ; (iii) menghitung .y c A f f y f = A f c b x = A c c b - A c f A - 1 f f A f c b . A G G z = A f c b A f f h = z x
Dengan kata lain, mengingat struktur , memecahkan sistem linear yang Anda miliki adalah benar-benar tidak lebih sulit daripada memecahkan sistem linear tunggal dengan .AG A
sumber
Tapi kita tahu , dan , jadiG T AG GT A
Karena , maka , jadi :G T = G - 1 G G T = IGTG=I GT=G−1 GGT=I
Kecuali jika saya melewatkan sesuatu, Anda tidak perlu iterasi, atau pemecah apa pun untuk menghitung x yang diberikan , dan .G A b
sumber