Giải hệ phương trình tuyến tính với đối số ma trận


10

Chúng ta đều quen thuộc với nhiều phương pháp tính toán để giải quyết hệ thống tuyến tính tiêu chuẩn

Ax=b.
Tuy nhiên, tôi tò mò liệu có bất kỳ phương pháp tính toán "tiêu chuẩn" nào để giải quyết một hệ thống tuyến tính tổng quát (chiều hữu hạn) hơn của mẫu

A m 1 × n 1 B m 2 × n 2 L m 1 × n 1 m 2 × n 2 A x = b

LA=B,
trong đó, giả sử, là ma trận , là ma trận và là toán tử tuyến tính lấy ma trận ma trận , không liên quan đến vectơ các ma trận , tức là chuyển đổi mọi thứ thành dạng tiêu chuẩn . Am1×n1Bm2×n2Lm1×n1m2×n2Ax=b

Lý do tôi hỏi là tôi cần giải phương trình sau cho :u

R R * u f

(RR+λI)u=f
trong đó là biến đổi Radon 2d, sự điều chỉnh của nó và cả và là mảng 2d (hình ảnh). Có thể vector hóa phương trình này, nhưng đó là một nỗi đau, đặc biệt là nếu chúng ta đi đến 3D.RRuf

Tổng quát hơn, những gì về mảng ? Chẳng hạn, giải trong đó và là mảng 3D (tôi cũng cần phải làm điều này với phép biến đổi Radon tại một số điểm).L A = B A BnDLA=BAB

Cảm ơn trước và thoải mái gửi tôi đến một StackExchange khác nếu bạn cảm thấy cần thiết.


1
Bạn có thể xây dựng một điều kiện tiên quyết đa cấp hiệu quả sau đó sử dụng gradient liên hợp. Tôi có một vấn đề tương tự trong đó điều này khá hiệu quả và rất song song. Nếu bạn muốn phương pháp trực tiếp, hãy xem xét việc cắt giảm thành dạng schur như trong bài viết này về phương trình Lyapunov: cs.cornell.edu/cv/ResearchPDF/Hessenberg.Schur.Method.pdf
Nick Alger

Tuyệt vời, cảm ơn các ref! Tôi chỉ có CG để làm việc hiệu quả, vì vậy tôi rất vui.
icurays1

Câu trả lời:


9

Rny,xRe(yHx)

Một điều bạn phải cẩn thận khi thực hiện CG (hoặc các cách tiếp cận lặp tương tự) với các toán tử tuyến tính chung là thực hiện đúng sự điều chỉnh của toán tử tuyến tính của bạn. Đó là, mọi người thường nhận được đúng, nhưng mắc lỗi khi thực hiện .z = F ( y )y=F(x)z=F(y)

Tôi khuyên bạn nên thực hiện một thử nghiệm đơn giản, tận dụng lợi thế của danh tính sau: đối với mọi và , Vì vậy, những gì bạn làm là tạo ra các giá trị ngẫu nhiên của và , chạy chúng thông qua các hoạt động chuyển tiếp và điều chỉnh của bạn, và tính toán hai sản phẩm bên trong ở trên. Hãy chắc chắn rằng chúng khớp với độ chính xác hợp lý và lặp lại một vài lần.y y , F ( x ) = F * ( y ) , x . x yxy

y,F(x)=F(y),x.
xy

EDIT: bạn sẽ làm gì nếu toán tử tuyến tính của bạn được coi là đối xứng? Vâng, bạn cũng cần phải xác minh tính đối xứng đó. Vì vậy, sử dụng cùng một bài kiểm tra, chỉ cần lưu ý rằng --- áp dụng thao tác tương tự cho và . Tất nhiên, OP có cả toán tử bất đối xứng và đối xứng để đối phó với ... x yF=Fxy


Cảm ơn @ChristianClason! Tôi biết từ kinh nghiệm làm thế nào các lỗi bực bội trong tính toán kết hợp có thể được. :) Trong gói TFOCS của chúng tôi, chúng tôi đã thực hiện một linop_test.mthói quen vì lý do này. Gói đó cũng hỗ trợ ma trận, mảng và các sản phẩm của Cartesian trong không gian vectơ.
Michael Grant

3

Hóa ra, vì hệ thống của tôi đối xứng và xác định dương (vì toán tử tuyến tính của tôi được viết là ), gradient liên hợp có thể được điều chỉnh để giải quyết loại phương trình lặp này. Việc sửa đổi duy nhất có được khi tính toán các sản phẩm bên trong - tức là một tính toán sản phẩm bên trong điển hình trong CG trông giống như hoặc . Trong phiên bản sửa đổi, chúng tôi sử dụng sản phẩm bên trong Frobenius, có thể được tính bằng cách tính tổng các mục của sản phẩm Hadamard (theo chiều). I Er T k r k p T k A p kRR+λIrkTrkpkTApk

A,B=i,jAijBij

Tôi nghi ngờ điều này sẽ ổn khi tôi nâng cấp lên mảng 3D, mặc dù tôi chưa thấy sản phẩm bên trong Frobenius được xác định trên mảng 3D (Tôi sẽ làm việc theo giả định rằng tôi có thể chỉ tổng hợp lại sản phẩm theo chiều).

Tôi vẫn sẽ quan tâm đến các phương pháp tổng quát hơn nếu có ai biết về bất kỳ phương pháp nào!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.