Cách chọn phương pháp giải phương trình tuyến tính


31

Theo hiểu biết của tôi, có 4 cách để giải một hệ phương trình tuyến tính (sửa tôi nếu có nhiều hơn):

  1. Nếu ma trận hệ thống là ma trận vuông bậc đầy đủ, bạn có thể sử dụng Quy tắc của Cramer;
  2. Tính toán nghịch đảo hoặc giả của ma trận hệ thống;
  3. Sử dụng các phương pháp phân rã ma trận (loại bỏ Gaussian hoặc Gauss-Jordan được coi là phân rã LU);
  4. Sử dụng các phương pháp lặp, chẳng hạn như phương pháp gradient liên hợp.

Trên thực tế, bạn hầu như không bao giờ muốn giải các phương trình bằng cách sử dụng quy tắc của Cramer hoặc tính toán nghịch đảo hoặc giả, đặc biệt là đối với ma trận chiều cao, vì vậy câu hỏi đầu tiên là khi nào nên sử dụng phương pháp phân tách và phương pháp lặp. Tôi đoán nó phụ thuộc vào kích thước và tính chất của ma trận hệ thống.

Câu hỏi thứ hai là, theo hiểu biết của bạn, loại phương pháp phân rã hoặc phương pháp lặp nào phù hợp nhất với ma trận hệ thống nhất định về độ ổn định và hiệu quả của số.

Ví dụ: phương pháp gradient liên hợp được sử dụng để giải các phương trình trong đó ma trận đối xứng và xác định dương, mặc dù nó cũng có thể được áp dụng cho bất kỳ phương trình tuyến tính nào bằng cách chuyển đổi thành . Ngoài ra đối với ma trận xác định dương, bạn có thể sử dụng phương pháp phân tách Cholesky để tìm kiếm giải pháp. Nhưng tôi không biết khi nào nên chọn phương pháp CG và khi nào nên chọn phân tách Cholesky. Cảm giác của tôi là chúng ta nên sử dụng phương pháp CG tốt hơn cho các ma trận lớn.A T A x = A T bAx=bATAx=ATb

Đối với ma trận hình chữ nhật, chúng ta có thể sử dụng phân tách QR hoặc SVD, nhưng một lần nữa tôi không biết cách chọn một trong số chúng.

Đối với các ma trận khác, bây giờ tôi không biết cách chọn người giải thích hợp, như ma trận Hermiti / ma trận đối xứng, ma trận thưa thớt, ma trận ban nhạc, v.v.


1
Xin chào @chaohuang và chào mừng bạn đến với SciComp! Bạn có thể muốn xem cuộc thảo luận này: scicomp.stackexchange.com/questions/81/iêu
Paul

Xin chào @Paul, cảm ơn ý kiến ​​của bạn, chủ đề đó chỉ nói về ma trận thưa thớt hay ma trận nào?
chaohuang

6
Câu hỏi của bạn có phạm vi rộng lớn và có thể hơi rộng đối với định dạng Hỏi và Đáp mà chúng tôi có ở đây trên stackexchange ... có một lớp hệ thống ma trận cụ thể nào mà bạn quan tâm không?
Paul

3
@chaohuang Có rất nhiều sách về chủ đề này. Câu hỏi này giống như hỏi bác sĩ y khoa về cách họ chọn phương pháp điều trị "nói chung". Nếu bạn muốn hỏi một câu hỏi không dành riêng cho một loại vấn đề nhất định, bạn nên đưa vào công việc để làm quen đủ với lĩnh vực này để hỏi một cái gì đó chính xác. Nếu không, hãy giải thích vấn đề cụ thể mà bạn quan tâm.
Jed Brown

2
Từ Câu hỏi thường gặp: Nếu bạn có thể tưởng tượng toàn bộ cuốn sách trả lời câu hỏi của bạn, bạn đang hỏi quá nhiều. Có toàn bộ tạp chí, và hàng trăm cuốn sách, liên quan đến câu hỏi này.
David Ketcheson

Câu trả lời:


45

Câu hỏi của bạn giống như hỏi bạn nên chọn loại tuốc nơ vít nào tùy thuộc vào ổ đĩa (khe cắm, Phillips, Torx, ...): Bên cạnh đó có quá nhiều , sự lựa chọn cũng phụ thuộc vào việc bạn muốn siết chặt một ốc vít hay lắp ráp một toàn bộ kệ thư viện. Tuy nhiên, trong câu trả lời một phần cho câu hỏi của bạn, đây là một số vấn đề bạn cần lưu ý khi chọn phương pháp giải hệ phương trình tuyến tính . Tôi cũng sẽ hạn chế bản thân vào ma trận khả nghịch; các trường hợp của các hệ thống quá mức hoặc không xác định là một vấn đề khác nhau và thực sự nên là những câu hỏi riêng biệt.Ax=b

Ax~

  1. x~x~ x *x~x<103x
  2. Bạn cần nó nhanh như thế nào ? Số liệu duy nhất có liên quan ở đây là thời gian trên máy của bạn - một phương pháp chia tỷ lệ hoàn hảo trên một cụm lớn có thể không phải là lựa chọn tốt nhất nếu bạn không có một trong số đó, nhưng bạn có một trong những thẻ Tesla mới sáng bóng.

Vì không có gì gọi là bữa trưa miễn phí, bạn thường phải quyết định đánh đổi giữa hai người. Sau đó, bạn bắt đầu nhìn vào ma trận (và phần cứng của bạn) để quyết định một phương pháp tốt (hay đúng hơn là phương pháp mà bạn có thể tìm thấy một triển khai tốt). (Lưu ý cách tôi tránh viết "tốt nhất" ở đây ...) Các thuộc tính phù hợp nhất ở đây làA

  • Các cấu trúc : Là đối xứng? Nó dày đặc hay thưa thớt? Băng bó?A
  • Các giá trị riêng : Có phải tất cả đều dương (nghĩa là xác định dương)? Chúng có co cụm không? Do một số trong số chúng có cường độ rất nhỏ hoặc rất lớn?A

Với suy nghĩ này, sau đó bạn phải truy tìm tài liệu (rất lớn) và đánh giá các phương pháp khác nhau mà bạn tìm thấy cho vấn đề cụ thể của mình. Dưới đây là một số nhận xét chung:

  • Nếu bạn thực sự cần (gần) độ chính xác của máy cho giải pháp của mình hoặc nếu ma trận của bạn nhỏ (tối đa hàng), thật khó để đánh bại các phương pháp trực tiếp, đặc biệt là đối với các hệ thống dày đặc (vì trong trường hợp này, mọi phép nhân ma trận sẽ là và nếu bạn cần nhiều lần lặp lại, điều này có thể không xa so với một phương thức trực tiếp cần). Ngoài ra, phân rã LU (với xoay vòng) hoạt động cho bất kỳ ma trận khả nghịch nào, trái với hầu hết các phương pháp lặp. (Tất nhiên, nếu đối xứng và xác định dương, bạn sẽ sử dụng Cholesky.)O (1000O ( n 3 ) AO(n2)O(n3)A

    Điều này cũng đúng với các ma trận thưa thớt (lớn) nếu bạn không gặp phải các vấn đề về bộ nhớ: Các ma trận thưa thớt nói chung không có phân rã LU thưa thớt và nếu các yếu tố không phù hợp với bộ nhớ (nhanh), các phương thức này sẽ không sử dụng được.

    Bên cạnh đó, phương pháp trực tiếp đã được khoảng một thời gian dài, và phần mềm chất lượng rất cao xảy ra (ví dụ, UMFPACK, quai bị, SuperLU cho ma trận thưa thớt) mà có thể tự động khai thác cấu trúc ban nhạc của .A

  • Nếu bạn cần ít độ chính xác hơn hoặc không thể sử dụng các phương pháp trực tiếp, hãy chọn phương pháp Krylov (ví dụ: CG nếu là đối xứng dương xác định, GMRES hoặc BiCGStab nếu không) thay vì phương pháp đứng yên (như Jacobi hoặc Gauss-Seidel): hoạt động tốt hơn nhiều, vì độ hội tụ của chúng không được xác định bởi bán kính phổ của mà bởi (căn bậc hai) của số điều kiện và không phụ thuộc vào cấu trúc của ma trận. Tuy nhiên, để có được hiệu suất thực sự tốt từ phương pháp Krylov, bạn cần chọn một điều kiện tiên quyết tốt cho ma trận của mình - và đó là một nghề thủ công hơn là khoa học ...AAA

  • Nếu bạn liên tục cần giải các hệ thống tuyến tính với cùng một ma trận và các phía bên tay phải khác nhau, các phương thức trực tiếp vẫn có thể nhanh hơn các phương pháp lặp vì bạn chỉ cần tính toán phân tách một lần. (Điều này giả định giải pháp tuần tự; nếu bạn có tất cả các cạnh bên phải cùng một lúc, bạn có thể sử dụng các phương pháp khối Krylov.)

Tất nhiên, đây chỉ là những hướng dẫn rất thô sơ: Đối với bất kỳ câu nào ở trên, có khả năng tồn tại một ma trận mà điều ngược lại là đúng ...

Vì bạn đã yêu cầu tài liệu tham khảo trong các ý kiến, đây là một số sách giáo khoa và bài đánh giá để giúp bạn bắt đầu. (Cả hai điều này - cũng không phải tập hợp - là toàn diện; câu hỏi này quá rộng và phụ thuộc quá nhiều vào vấn đề cụ thể của bạn.)


2
Tôi thích sự tương tự của bạn của tuốc nơ vít!
Paul

@chaohuang Nếu điều này trả lời câu hỏi của bạn, bạn nên chấp nhận nó. (Nếu không, vui lòng chỉ ra những gì còn thiếu.)
Christian Clason

@ChristianClason chấp nhận nó. Tôi đã chờ đợi và hy vọng ai đó có thể làm sáng tỏ vấn đề ma trận hình chữ nhật. Vì đã được một thời gian dài, tôi đoán sẽ không bao giờ có câu trả lời như vậy :(
chaohuang

@chaohuang Cảm ơn bạn. Nếu bạn vẫn quan tâm đến ma trận hình chữ nhật, bạn nên đặt câu hỏi (được liên kết) về "Cách chọn phương pháp giải các hệ thống quá hạn".
Christian Clason

Ở đây một tài liệu tham khảo về việc sử dụng các phương pháp lặp để giải các hệ phương trình tuyến tính lớn.
chaohuang


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.