สมมติว่าเป็นหนาแน่นเมทริกซ์และคุณจะต้องแก้ ,m ถ้าเป็นขนาดใหญ่พอแล้วมีอะไรผิดปกติในn × n A x i = b i i = 1 … m mAn×n Axi=bii=1…mm
V = inv(A);
...
x = V*b;
Flops เป็นสำหรับและสำหรับดังนั้นเพื่อกำหนดค่าจุดคุ้มทุนสำหรับจำเป็นต้องมีการทดลอง ...O ( n 2 ) mO(n3)inv(A)
O(n2)V*b
m
>> n = 5000;
>> A = randn(n,n);
>> x = randn(n,1);
>> b = A*x;
>> rcond(A)
ans =
1.3837e-06
>> tic, xm = A\b; toc
Elapsed time is 1.907102 seconds.
>> tic, [L,U] = lu(A); toc
Elapsed time is 1.818247 seconds.
>> tic, xl = U\(L\b); toc
Elapsed time is 0.399051 seconds.
>> tic, [L,U,p] = lu(A,'vector'); toc
Elapsed time is 1.581756 seconds.
>> tic, xp = U\(L\b(p)); toc
Elapsed time is 0.060203 seconds.
>> tic, V=inv(A); toc
Elapsed time is 7.614582 seconds.
>> tic, xv = V*b; toc
Elapsed time is 0.011499 seconds.
>> [norm(xm-x), norm(xp-x), norm(xl-x), norm(xv-x)] ./ norm(x)
ans =
1.0e-11 *
0.1912 0.1912 0.1912 0.6183
ในการนี้เล็กน้อยตัวอย่างเช่นก่อนการคำนวณจะดีกว่าไปข้างหน้าและวิธีการแก้ปัญหาย้อนหลังม.> L U m > 125A−1LUm>125
บางบันทึก
สำหรับการวิเคราะห์เสถียรภาพและข้อผิดพลาดโปรดดูความคิดเห็นของคำตอบที่แตกต่างนี้โดยเฉพาะอย่างยิ่งคำตอบโดย VictorLiu
การกำหนดเวลาที่เสนอไม่ใช่ "วิทยาศาสตร์" เลย แต่มีไว้เพื่อแสดงให้เห็นว่าวิธีการที่เสนอในคำตอบของ Milind R ในขณะที่มันเหมาะสมที่จะนำไปใช้ใน C หรือ Fortran โดยการเรียกรูทีนย่อย LAPACK และ BLAS ที่เกี่ยวข้อง มีประสิทธิภาพในการ Matlab แม้สำหรับnm≪n
การจับเวลาทำได้ด้วย Matlab R2011b บนคอมพิวเตอร์ 12 คอร์ที่มีค่าเฉลี่ย UNIX ที่ค่อนข้างคงที่เท่ากับ 5; tic, toc
เวลาที่ดีที่สุดของสามโพรบ