Memecahkan sistem dengan pembaruan diagonal peringkat kecil

9

Misalkan saya memiliki sistem linier besar, jarang: . Sekarang, saya tidak memiliki A - 1 karena A terlalu besar untuk faktor atau segala bentuk penguraian A , tetapi berasumsi bahwa saya memiliki solusi x 0 yang ditemukan dengan penyelesaian berulang.Ax0=b0A1Ax0

Sekarang, saya ingin menerapkan pembaruan peringkat kecil ke diagonal A (mengubah beberapa entri diagonal): mana D adalah matriks diagonal dengan sebagian besar 0 pada diagonal dan beberapa nilai bukan nol. Jika saya memiliki A - 1 saya akan dapat mengambil keuntungan dari rumus Woodbury untuk menerapkan pembaruan ke kebalikannya. Namun, saya tidak memiliki ini tersedia. Adakah yang bisa saya lakukan selain menyelesaikan seluruh sistem lagi? Apakah ada beberapa cara yang mungkin saya dapat membuat prekondisi M yang mudah \ lebih mudah untuk dibalik, sehingga M A 1(A+D)x1=b0DA1M , sehingga yang harus saya lakukan jika saya memiliki x 0 adalah menerapkan M - 1 dan metode berulang akan menyatu dalam beberapa / beberapa iterasi?MA1A0x0M1

Costis
sumber
Apakah Anda memulai dengan prekondisi yang bagus untuk dan ingin tahu cara memperbaruinya? Apa peringkat pembaruan itu? ( Pembaruan peringkat 1000 adalah "kecil" dibandingkan dengan matriks ukuran 10 9 tetapi tidak kecil dalam hal jumlah iterasi.)A1000109
Jed Brown
berukuran sekitar 10 6 hingga 10 7 , dan pembaruannya <1000 (kemungkinan <100) elemen. Saya menggunakan jenis preconditioner diagonal untuk A yang bekerja dengan sangat baik, jadi memperbarui itu akan sepele, tapi saya bertanya-tanya apakah ada sesuatu yang lebih baik yang bisa saya lakukan daripada menyelesaikan sistem baru dari awal. A106107
Costis
2
Solusi dari satu sistem tidak memberi tahu Anda banyak tentang hal itu. Jika Anda memecahkan sistem yang sama beberapa kali, peta terbalik pada vektor tersebut (dan / atau ruang Krylov yang terkait) memberi Anda beberapa informasi yang dapat digunakan untuk mempercepat konvergensi. Berapa banyak sistem yang Anda selesaikan dalam setiap kasus?
Jed Brown
Saat ini saya hanya memecahkan untuk satu RHS ( vektor) dengan masing-masing A matriks sebelum memodifikasi A . bAA
Costis

Jawaban:

4
  1. Simpan di kolom dua matriks dan C semua vektor b j yang Anda terapkan matriks dalam iterasi sebelumnya dan hasilnya c j = A b j .BCbjcj=Abj

  2. Untuk setiap sistem baru (atau A x = b , yang merupakan kasus khusus D = 0 ), kira-kira selesaikan sistem linear yang terlalu ditentukan ( C + D B ) y b , misalnya , dengan memilih subset dari baris (mungkin semua) dan menggunakan metode kuadrat terkecil padat. Perhatikan bahwa hanya bagian C + D B yang dipilih yang perlu dirakit; jadi ini adalah operasi yang cepat!(A+D)x=bAx=bD=0(C+DB)ybC+DB

  3. Masukkan . Ini adalah perkiraan awal yang baik untuk memulai iterasi untuk menyelesaikan ( A + D ) x = b . Jika sistem lebih lanjut harus diproses, gunakan produk vektor matriks dalam iterasi baru ini untuk memperluas matriks B dan C pada subsistem yang dihasilkan.x0=By(A+D)x=bBC

Jika matriks dan C tidak sesuai dengan memori utama, simpan B pada disk, dan pilih subset baris terlebih dahulu. Ini memungkinkan Anda untuk tetap inti bagian yang relevan dari B dan C yang diperlukan untuk membentuk sistem kuadrat terkecil, dan x 0 berikutnya dapat dihitung dengan satu melewati B dengan sedikit penggunaan memori inti.BCBBCx0B

Baris harus dipilih sedemikian rupa sehingga kira-kira sesuai dengan diskritisasi kasar dari masalah penuh. Mengambil baris lima kali lebih banyak dari jumlah total perkalian vektor matriks yang diharapkan sudah cukup.

Sunting: Mengapa ini berfungsi? Dengan konstruksi, matriks dan C terkait dengan C = A B . Jika subruang yang direntang oleh kolom B berisi vektor solusi yang tepat x (situasi yang jarang tetapi sederhana) maka x memiliki bentuk x = B y untuk beberapa y . Mengganti ini menjadi persamaan yang mendefinisikan x memberikan persamaan ( C + D B ) y = b BCC=ABBxxx=Byyx(C+DB)y=b. Jadi dalam hal ini, proses di atas memberikan titik awal , yang merupakan solusi tepat.x0=By=x

Pada umumnya, satu tidak bisa mengharapkan untuk berbaring di ruang kolom dari B , tapi titik awal yang dihasilkan akan menjadi titik dalam ruang cloumn ini paling dekat dengan x ' , di metrik ditentukan oleh baris yang dipilih. Dengan demikian itu kemungkinan merupakan pendekatan yang masuk akal. Ketika lebih banyak sistem diproses, ruang kolom tumbuh dan perkiraan akan cenderung meningkat banyak, sehingga orang dapat berharap untuk bertemu dalam iterasi yang lebih sedikit dan lebih sedikit.xBx

Sunting2: Tentang subruang yang dihasilkan: Jika seseorang memecahkan setiap sistem dengan metode Krylov, vektor yang digunakan untuk mendapatkan titik awal untuk sistem kedua span subruang Krylov dari sisi kanan pertama. Dengan demikian orang mendapatkan perkiraan yang baik setiap kali ruang bagian Krylov ini mengandung vektor dekat dengan solusi sistem kedua Anda. Secara umum, vektor digunakan untuk mendapatkan titik awal untuk rentang sistem st ruang yang berisi Krylov ruang bagian pertama k sisi kanan.(k+1)k

Arnold Neumaier
sumber
Terima kasih, Prof. Neumaier. Saya akan mencoba ini. Bisakah Anda memberi saya penjelasan singkat tentang cara kerjanya?
Costis
Juga, bagaimana jika saya ingin menyelesaikan sistem yang sama untuk banyak vektor RHS yang berbeda? yaitu , A x 1 = b 1 , A x 2 = b 2 , dll. Apakah ada informasi yang dapat saya gunakan dari solves sebelumnya untuk mempercepat yang berikutnya? Ax0=b0Ax1=b1Ax2=b2
Costis
@ Costis: Resolusi dengan matriks yang sama hanyalah kasus khusus dari masalah umum. Untuk pertanyaan pertama Anda, lihat hasil edit. D=0
Arnold Neumaier
@ Costis: Saya menambahkan sedikit lebih detail ke langkah 2. - Jika Anda menulis aplikasi, silakan kirim cetak prapesanan.
Arnold Neumaier
(C+DB)yb