วิธีแก้ปัญหาของระบบเชิงเส้นของสมการสามารถประมาณค่าสำหรับตัวแปรแรกเท่านั้นหรือไม่


15

ฉันมีระบบเชิงเส้นของสมการขนาด mxm โดยที่ m มีขนาดใหญ่ อย่างไรก็ตามตัวแปรที่ฉันสนใจเป็นเพียงตัวแปร n ตัวแรก (n มีค่าน้อยเมื่อเทียบกับ m) มีวิธีที่ฉันสามารถประมาณโซลูชันสำหรับค่า m แรกโดยไม่ต้องแก้ไขระบบทั้งหมดหรือไม่ ถ้าใช่การประมาณนี้จะเร็วกว่าการแก้ระบบเชิงเส้นเต็มหรือไม่


2
ไม่เว้นแต่ว่าฟังก์ชั่นการบังคับของคุณจะถูก จำกัด ด้วยตัวแปร n ตัวแรก ถ้าเป็นเช่นนั้นคุณสามารถสร้างส่วนประกอบ Schur ได้แม้ว่าจะมีความหนาแน่นสูงก็ตาม หากผู้ให้บริการดั้งเดิมของคุณเบาบางอาจไม่คุ้มค่า
Jack Poulson

1
ฉันคิดว่าคุณสามารถใช้การกำจัดเกาส์เซียนได้โดยเริ่มจากมุมล่างขวาของเมทริกซ์ นี่จะเร็วกว่าการกำจัด Gaussian ประมาณ 2 เท่าหากคุณสนใจองค์ประกอบสองสามอย่างแรกและหยุดครึ่งทาง ฉันไม่รู้ว่ามันจะเปรียบเทียบกับวิธีการวนซ้ำได้อย่างไร
ด่าน

4
@OscarB: โปรดอย่า กฎของ Cramer เป็นความโหดร้ายในการคำนวณเลขทศนิยม ฉันไม่เคยได้ยินมาก่อนว่ามันถูกใช้สำหรับการคำนวณที่จริงจังและต้องใช้ความคิดที่พอเหมาะเพื่อหลีกเลี่ยงความซับซ้อนของแฟกทอเรียลซึ่งมันยังไม่สามารถแข่งขันกับการกำจัดแบบเกาส์เซียนได้
Jack Poulson

1
@Paul: การลดลำดับโมเดลส่วนใหญ่จะใช้ในบริบทของระบบ ODE หรือ DAE ขนาดใหญ่ บางครั้งวิธีการลดแรงจูงใจเกิดขึ้นจากระบบ ODE หรือ DAE ที่เกิดขึ้นจากการแยกส่วนของ PDE ฉันไม่เห็นการลดแบบจำลองที่ใช้กับสมการพีชคณิตล้วนๆ (ถ้าคุณมีโปรดส่งการอ้างอิงมาให้ฉันเพราะฉันทำวิทยานิพนธ์เกี่ยวกับวิธีการลดขนาดแบบจำลองและสนใจที่จะเห็นมันมาก) หากคุณต้องการฉันสามารถสรุปได้ว่าการลดแบบจำลองนั้นเป็นอย่างไรถ้าเราปฏิบัติต่อ สมการพีชคณิตเป็นกรณีเลวของระบบสมการเชิงอนุพันธ์พีชคณิต
Geoff Oxberry

1
@JackPoulson - คุณคิดจะสรุปความคิดเห็นของคุณเป็นคำตอบหรือไม่? ฉันคิดว่ามันเป็นทางออกที่ถูกต้องที่สุดและฉันไม่ต้องการให้มันหายไปในความคิดเห็น
Aron Ahmadia

คำตอบ:


13

ดังที่คนอื่น ๆ ชี้ว่าสิ่งนี้เป็นเรื่องยากที่จะแก้ไขด้วยตัวแก้ปัญหาโดยตรง ที่กล่าวว่ามันไม่ได้เป็นเรื่องยากที่จะทำอย่างไรกับนักแก้ซ้ำ ด้วยเหตุนี้โปรดทราบว่านักแก้ปัญหาที่วนซ้ำส่วนใหญ่ไม่ทางใดก็ทางหนึ่งให้ลดข้อผิดพลาดที่เกี่ยวข้องกับบรรทัดฐานบางอย่าง บ่อยครั้งที่บรรทัดฐานนี้ถูกเหนี่ยวนำโดยเมทริกซ์เอง แต่บางครั้งมันก็เป็นแค่เวกเตอร์ l2 แต่นั่นไม่ได้เป็นกรณี: คุณสามารถเลือกบรรทัดฐานที่คุณต้องการลดข้อผิดพลาด (หรือส่วนที่เหลือ) ในและตัวอย่างเช่นคุณสามารถเลือกบรรทัดฐานที่คุณชั่งน้ำหนักส่วนประกอบที่คุณสนใจด้วย 1 และ คนอื่น ๆ ทั้งหมดที่มี 1e-12 เช่นตัวอย่างเช่น (1e-24)N i = 6 x 2 i และผลิตภัณฑ์สเกลาร์ที่สอดคล้องกัน จากนั้นเขียนขั้นตอนทั้งหมดของตัวแก้ซ้ำ ๆ โดยคำนึงถึงบรรทัดฐานและผลิตภัณฑ์สเกลาร์นี้และคุณจะได้รับตัวแก้ซ้ำที่ให้ความสำคัญกับองค์ประกอบเวกเตอร์ที่คุณสนใจมากกว่าคนอื่น ๆ||x||2=i=15xi2+i=6Nxi2

คำถามของหลักสูตรคือคุณต้องการการวนซ้ำน้อยกว่าการใช้ผลิตภัณฑ์ norm / scalar ที่มีน้ำหนักส่วนประกอบทั้งหมดเท่า ๆ กัน แต่นั่นควรจะเป็นกรณีนี้: สมมุติว่าคุณสนใจองค์ประกอบเวกเตอร์ห้าตัวแรกเท่านั้น จากนั้นคุณควรต้องการการวนซ้ำสูงสุดห้าครั้งเพื่อลดข้อผิดพลาดด้วย 1e12 เนื่องจากการทำซ้ำห้าครั้งเป็นสิ่งที่จำเป็นสำหรับระบบ 5x5 ที่อธิบายพวกเขา นั่นไม่ใช่ข้อพิสูจน์ แต่ฉันค่อนข้างแน่ใจว่าคุณควรหลีกเลี่ยงการวนซ้ำที่น้อยกว่านี้ถ้าน้ำหนักในเกณฑ์ปกติ (1e-12 ด้านบน) มีขนาดเล็กกว่าความอดทนที่คุณต้องการแก้ระบบเชิงเส้นซ้ำ ๆ .


2
อืมจุดดี ฉันสนใจที่จะเห็นตัวอย่างจริงเนื่องจากฉันค่อนข้างกังวลเกี่ยวกับผลกระทบของการพยายามที่จะแก้ไขปัญหาอิสรภาพเพียงไม่กี่องศาเท่านั้น แม้ว่าส่วนที่เหลืออาจมีขนาดเล็กบางทีบรรทัดฐานของข้อผิดพลาดยังคงมีขนาดใหญ่ (ทำเพื่อละเว้นการดำเนินการส่วนใหญ่ได้อย่างมีประสิทธิภาพ)
Jack Poulson

โดยสังหรณ์ใจสิ่งนี้ดูเหมือนจะใช้ได้เฉพาะในกรณีที่องค์ประกอบของระบบขนาดเล็กมาก ๆ ครองคำตอบใน L2 (หรือบรรทัดฐานที่คุณเข้าใจถึงข้อผิดพลาดของคุณที่ต้องวัด) มิฉะนั้นผมคิดว่าความกังวลของแจ็คถูกต้อง แต่แน่นอนผมจะให้ความสนใจในการได้เห็นหลักฐานตัวเลขนี้ ...
อารอน Ahmadia

หนึ่งจะต้องให้แน่ใจว่าคุณใช้วิธีการที่ลดข้อผิดพลาดไม่เหลือ ฉันคิดว่า MinErr อาจเป็นจุดเริ่มต้นที่ดี
Wolfgang Bangerth

@ WolfgangBangerth: ฉันไม่คุ้นเคยกับ MINERR: นี่เป็นข้อมูลอ้างอิงหลักหรือไม่
Jack Poulson

1
แม้จะไม่เพียงพอเพราะคุณจะไม่ถูกต้อง คุณไม่สามารถรับส่วนประกอบบางอย่างได้อย่างถูกต้องด้วยการใช้น้ำหนักนี้
Matt Knepley

17

การสร้างส่วนประกอบ Schur

สมมติว่าคุณได้อนุญาตและแบ่งเมทริกซ์ของคุณลงในแบบฟอร์ม

A=(A11A12A21A22),

เช่นที่มีองศาอิสระในการสนใจของคุณและมีขนาดเล็กกว่าA 11มากจากนั้นคุณสามารถสร้างส่วนประกอบ Schur ได้A22A11

S22:=A22A21A111A12,

ไม่ว่าจะผ่านการแยกตัวประกอบ LU ที่ดูขวาหรือสูตรที่ชัดเจนจากนั้นสามารถเข้าใจได้ในแง่ต่อไปนี้:S22

S22x=y(A11A12A21A22)(x)=(0y),

โดยที่แสดงถึงส่วน ' uninteresting ' ของโซลูชัน ดังนั้นที่ให้ทางด้านขวาซึ่งไม่ใช่ศูนย์ในองศาอิสระของ Schur เติมเต็มS 22เราต้องการเพียงแก้ไขกับS 22เพื่อให้ได้สัดส่วนของการแก้ปัญหาที่สอดคล้องกับองศาอิสระเหล่านั้นS22S22

ความซับซ้อนในการคำนวณในกรณีที่ไม่มีโครงสร้างที่หนาแน่น

การตั้งค่ากับความสูงของและnความสูงของ22แล้ววิธีการมาตรฐานสำหรับการคำนวณS 22แรกคือปัจจัยL 11 U 11 : = 11 (ขอละเว้นแกนตอนนี้) ในประมาณ2 / 3 ( N - n ) 3งานจากนั้นจึงสร้างNAnA22S22L11U11:=A112/3(Nn)3

S22:=A22(A21U111)(L111A12)=A22A21A111A12

ใช้สองแก้สามเหลี่ยมที่กำหนดให้การทำงานในแต่ละและจากนั้นทำการอัพเดตเพื่อ22ใน2 n 2 ( N - n )การทำงานn(Nn)2A222n2(Nn)

ดังนั้นการทำงานรวมเป็นประมาณ ) เมื่อnมีขนาดเล็กมากN - n Nดังนั้นค่าใช้จ่ายที่สามารถมองเห็นจะเป็นประมาณ2 / 3 N 3ซึ่งเป็นค่าใช้จ่ายของตีนเป็ดเต็ม2/3(Nn)3+2n(Nn)2+2n2(Nn)nNnN2/3N3

ประโยชน์คือถ้ามีจำนวนมากของด้านขวามือจะได้รับการแก้ไขได้ด้วยระบบเดียวกันของสมการแล้วอาจจะนำกลับมาใช้เป็นจำนวนมากครั้งซึ่งแต่ละแก้เพียงจะต้องมี2 n 2งาน (มากกว่า2 N 2งาน) ถ้าS 22เป็นปัจจัยS222n22N2S22

ความซับซ้อนในการคำนวณในกรณีกระจัดกระจาย (ทั่วไป)

หากระบบกระจายของคุณเกิดขึ้นจากการประมาณค่าความแตกต่างหรือการ จำกัด องค์ประกอบบางชนิดแล้วตัวแก้ปัญหาแบบกระจัดกระจายจะเกือบจะสามารถใช้ประโยชน์จากโครงสร้างบางอย่างได้ ระบบ 2D สามารถแก้ไขได้ด้วยการทำงานและO ( N บันทึกN )การจัดเก็บข้อมูลในขณะที่ระบบ 3D ที่สามารถแก้ไขได้ด้วยO ( N 2 )การทำงานและO ( N 4 / 3 )การจัดเก็บข้อมูล ระบบที่มีการแยกตัวสามารถแก้ไขได้ด้วยปริมาณงานเท่ากันกับข้อกำหนดด้านการจัดเก็บO(N3/2)O(NlogN)O(N2)O(N4/3)

จุดนำขึ้นความซับซ้อนในการคำนวณคือว่าถ้าและคุณมีระบบ 2d จากนั้นเนื่องจากส่วนประกอบของ Schur จะมีความหนาแน่นสูงการแก้ปัญหาความซับซ้อนที่ได้รับจากส่วนประกอบ Schur ที่เป็นปัจจัยจะเป็นO(n2)=O(N)ซึ่งหายไปเพียงปัจจัยลอการิทึมเท่านั้น ระบบ! ในแบบ 3 มิติก็ต้องใช้O(N)ทำงานแทนO(N 4 / 3 )nNO(n2)=O(N)O(N)O(N4/3)

ดังนั้นโปรดจำไว้ว่าในกรณีของคุณที่จะมีการออมที่สำคัญหากคุณทำงานในหลายมิติและมีฝ่ายขวามากมายที่จะแก้ไขn=N


1
นี่เป็นบทสรุปที่ยอดเยี่ยมของวิธีการเสริม Schur และเมื่อมันมีประสิทธิภาพในการใช้!
พอล

6

แนวทางการลดแบบจำลอง

ตั้งแต่ที่ Paul ถามฉันจะพูดถึงสิ่งที่จะเกิดขึ้นถ้าคุณใช้วิธีการลดแบบจำลองการฉายตามปัญหานี้ สมมติว่าคุณสามารถสร้างโปรเจ็กเตอร์ขึ้นมาได้เช่นช่วงPซึ่งแสดงR ( P )มีคำตอบของระบบเชิงเส้นA x = bและมีมิติkโดยที่kคือจำนวนนิรนามที่คุณ ต้องการที่จะแก้ปัญหาในระบบเชิงเส้นPPR(P)Ax=bkk

การสลายตัวของค่าเอกพจน์ของจะให้เมทริกซ์ที่แบ่งพาร์ติชันต่อไปนี้:P

P=[V][diag(1k)000][WT].

เมทริกซ์ที่ถูกบดบังโดยดาวมีความสำคัญสำหรับสิ่งอื่น ๆ (เช่นการประเมินข้อผิดพลาดเป็นต้น) แต่สำหรับตอนนี้เราจะหลีกเลี่ยงการจัดการกับรายละเอียดภายนอก มันติดตามว่า

P=VWT

เป็นอันดับสลายตัวเต็มรูปแบบของPP

เป็นหลักคุณจะแก้ปัญหาระบบ

PAx=Pb

VWWTV=IPAx=PbWTy=Vx^x

WTAx^=WTb.

x^Vyx

ทำไมวิธีเสริมของ Schur น่าจะดีกว่า

PAx=bR(P)y=xyyxPxyP. You could use an SVD of A, for instance, and select P to be the product of the first k left singular vectors of A and the adjoint of the first k right singular vectors of A, assuming that singular vectors are arranged in decreasing order of singular value. This choice of projector would be equivalent to performing proper orthogonal decomposition on A, and it would minimize the L2-error in the approximate solution.

In addition to introducing approximation errors, this approach also introduces three extra matrix multiplies on top of the linear solve of the smaller system and the work needed to calculate V, and W. Unless you're solving the same linear system a lot, only changing the right hand side, and P is still a "good" projection matrix for all of those systems, those extra costs will probably make solving the reduced system more expensive than solving your original system.

The drawbacks are much like JackPoulson's approach, except that you're not quite leveraging the structure that you mentioned.


4

The long answer is...sort of.

You can re-arrange your system of equations such that the farthest right k columns are the variables which you wish to solve for.

Step 1: Perform Gaussian Elimination so that the matrix is upper triangular. Step 2: solve by back substitution for only the first (last) k variables which you are interested in

This will save you the computational complexity of having to solve for the last nk variables via back-substitution, which could be worth it if n is as large as you say. Keep in mind that a fair amount of work will still have to be done for step 1.

Also, keep in mind that restricting the order in which you are going to perform back-substituion may restrict the form of the matrix (it takes away the ability to exchange columns) which could possibly lead to an ill conditioned system, but I am not sure about that - just something to keep in mind.


Gaussian elimination requires O(n3) work, but backward substitution only requires O(n2). Thus, as n grows larger, the percentage of time spent in the triangle solve becomes vanishingly small.
Jack Poulson

which is why the answer is "sort of" instead of "yes" =)
drjrm3

It makes sense that it can be done this way... However, the bulk of the computation in a Gaussian Elimination is in the forward elimination phase, yielding an O(n^3) complexity despite the truncated backward substitution phase. I was hoping there was a faster method...
Paul
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.