Saya ingin memecahkan di mana K adalah matriks kekakuan saya. Namun beberapa kendala mungkin hilang dan karena itu beberapa gerakan tubuh yang kaku mungkin masih ada dalam sistem (karena nilai eigen nol). Karena saya menggunakan CG untuk menyelesaikan sistem linear, ini tidak dapat diterima karena kadang-kadang CG tidak konvergen pada masalah semi-positif (tapi saya terkadang konvergen).
Sebenarnya saya menggunakan pendekatan perpindahan hukuman dalam arti bahwa saya menambahkan hukuman berupa untuk energi elastis. Jadi energinya bertuliskan W ( u ) : = 1manaαdiambil secara proporsional dengan beberapa entri diagonal dari matriks kekakuan. Tetapi sebenarnya ini memiliki efek untuk meredam beberapa mode deformasi yang kadang ingin saya miliki.
Beberapa pertanyaan saya adalah:
a) dapatkah saya mengubah sistem asli sehingga harus membuatnya bebas dari singularitas dan kepastian positif (seperti transformasi koordinat atau transformasi kongruensi atau apa pun)? Ide saya adalah menggunakan transformasi tersebut untuk tetap menggunakan CG pada masalah yang diubah
b) Apakah ada cara standar untuk menangani singularitas itu?
Terima kasih banyak !
Salam,
Tom
Jika Anda tahu ruang nol, Anda dapat membuat sisi kanan kompatibel dan memiliki metode Krylov mencegah prekondisi menyebabkan polusi, lihat Mengapa menjepit suatu titik untuk menghapus ruang nol buruk? untuk diskusi lebih lanjut. Dalam PETSc, ini dilakukan menggunakan
MatNullSpace
objek. Perhatikan bahwa Anda dapat menyediakan fungsi Anda sendiri untuk memproyeksikan ruang nol, yang akan berguna untuk mengurangi biaya proyeksi ketika Anda memiliki banyak struktur apung.Jika Anda tidak tahu ruang nol dan tidak dapat menghindari sisi kanan yang tidak kompatibel, ada metode khusus Krylov seperti MINRES-QLP yang dapat menemukan solusi norma minimum. Pendekatan ini mungkin berguna jika Anda memiliki engsel dan koneksi titik tunggal yang hanya memasangkan beberapa mode. Perhatikan bahwa Anda harus tetap berhati-hati tentang prekondisi yang menyebabkan pencemaran (misalnya, karena faktorisasi LU menemukan nol pivot, mungkin pada tingkat multigrid kasar).
sumber
MatSetNullSpace()