Tại sao các hệ thống tuyến tính điều hòa có thể được giải quyết chính xác?


13

Theo câu trả lời ở đây , số điều kiện lớn (để giải hệ phương trình tuyến tính) làm giảm số lượng chữ số được bảo đảm trong giải pháp dấu phẩy động. Ma trận phân biệt bậc cao hơn trong các phương pháp giả ngẫu nhiên thường rất không điều hòa. Tại sao sau đó họ vẫn là phương pháp rất chính xác?

Tôi hiểu rằng độ chính xác thấp đến từ các ma trận điều hòa chỉ là một giá trị được bảo đảm , nhưng vẫn khiến tôi tự hỏi tại sao ma trận điều hòa được giải quyết chính xác bằng các phương pháp trực tiếp trong thực tế - ví dụ, các LCOLcột của Bảng 3.1 trên trang 11 của Wang và cộng sự, MỘT PHƯƠNG PHÁP THU THẬP CÓ ĐIỀU KIỆN ĐƯỢC SỬ DỤNG MỘT MATRIX TÍCH HỢP TÂM LÝ , SIAM J. Sci. Tính toán, 36 (3) .


2
Trực giác của tôi là khả năng thanh toán / độ chính xác của hệ thống Ax = b được gắn với vectơ cưỡng bức b, không chỉ là ma trận A. Có lẽ nếu b không "thăm dò" hoặc "kích thích" các chế độ điều hòa của A, thì giải pháp chính xác vẫn có thể Như một ví dụ hạn chế, A có thể chính xác là số ít (số điều kiện vô hạn), nhưng Ax = b vẫn có thể có một giải pháp, có thể được tính toán chính xác, nếu dữ liệu buộc b nằm trong phạm vi A. Tôi thừa nhận đây là số liệu khá -w lượn sóng, đó là lý do tại sao tôi chỉ nhận xét thay vì trả lời.
rchilton1980

@ rchilton1980 "nhưng Ax = b vẫn có thể có giải pháp" Nhưng giải pháp đó không phải là duy nhất. Và các ví dụ tôi đang đề cập để sở hữu một giải pháp độc đáo.
Zoltán Csáti

Đó là một đối trọng công bằng - có lẽ là một tạo tác của việc chọn số điều kiện vô hạn (một giá trị chính xác bằng 0). Tuy nhiên tôi nghĩ bạn có thể thay thế giá trị riêng bằng 0 bằng máy epsilon và quan điểm của tôi vẫn đứng vững. (Nghĩa là, sytem có số điều kiện rất lớn, hệ thống không có giải pháp với một giải pháp duy nhất, mà chúng ta có thể tính toán rất chính xác với điều kiện b không có thành phần nào dọc theo sự tuyệt vời nhỏ bé đó).
rchilton1980

1
Để cụ thể hơn, thí nghiệm suy nghĩ của tôi ở đây là một cái gì đó như A = diag ([1 1 1 1 1 eps]), b = [b1 b2 b3 b4 b5 0]. Điều đó là giả định, nhưng tôi nghĩ thật là khôn ngoan khi biện minh cho tuyên bố ban đầu: "đôi khi bệnh A có thể được giải quyết chính xác cho các lựa chọn cụ thể của b"
rchilton1980

1
Chỉ cần đưa ra một ví dụ khác từ blog của Moler.mathworks.com/cleve/2015/02/16/ mẹo
percusse

Câu trả lời:


7

Đã thêm sau câu trả lời ban đầu của tôi:

Bây giờ tôi thấy rằng tác giả của bài viết được tham chiếu đang đưa ra các số điều kiện (rõ ràng là số điều kiện 2 định mức nhưng có thể là số điều kiện vô hạn định mức) trong bảng trong khi đưa ra các lỗi tuyệt đối tối đa thay vì sai số tương đối định mức hoặc sai số tương đối tối đa ( đây là tất cả các biện pháp khác nhau.) Lưu ý rằng lỗi tương đối nguyên tố tối đa không giống với lỗi tương đối định mức vô cực. Hơn nữa, các lỗi trong bảng có liên quan đến giải pháp chính xác cho bài toán giá trị biên phương trình vi phân ban đầu thay vì hệ phương trình tuyến tính rời rạc. Do đó, thông tin được cung cấp trong bài báo thực sự không phù hợp để sử dụng với lỗi bị ràng buộc dựa trên số điều kiện.

Tuy nhiên, trong bản sao tính toán của tôi, tôi thấy các tình huống trong đó sai số định mức vô cực tương đối (hoặc sai số tương đối hai định mức) nhỏ hơn đáng kể so với giới hạn được đặt bởi số điều kiện vô cực (tương ứng là số điều kiện 2 định mức.) Đôi khi bạn chỉ nhận được may mắn.

Tôi đã sử dụng gói MATLAB DMSUITE và giải quyết vấn đề mẫu từ bài báo này bằng phương pháp giả ngẫu nhiên với đa thức Ch Quashev. Số điều kiện của tôi và các lỗi tuyệt đối tối đa tương tự như các báo cáo trong bài báo.

Tôi cũng đã thấy các lỗi tương đối thông thường có phần tốt hơn so với người ta có thể mong đợi dựa trên số điều kiện. Ví dụ, trên vấn đề ví dụ với , sử dụng N = 1024 , tôi nhận đượcε= =0,01N= =1024

cond (A, 2) = 7,9e + 8

cond (A, inf) = 7.8e + 8

định mức (u-uexact, 2) / Norm (uexact, 2) = 3.1e-12

định mức (u-uexact, inf) / Norm (uexact, inf) = 2.7e-12

Có vẻ như giải pháp này tốt cho khoảng 11-12 chữ số, trong khi số điều kiện là theo thứ tự 1e8.

Tuy nhiên, tình huống có lỗi phần tử là thú vị hơn.

tối đa (abs (u-uexact)) = 2,7e-12

Điều đó vẫn có vẻ tốt.

tối đa (abs ((u-uexact) ./ uexact) = 6.1e + 9

Ồ - có một lỗi tương đối lớn trong ít nhất một thành phần của giải pháp.

Chuyện gì đã xảy ra? Giải pháp chính xác của phương trình này có các thành phần rất nhỏ (ví dụ 1.9e-22) trong khi giải pháp gần đúng chạm đáy với giá trị lớn hơn nhiều là 9e-14. Điều này được ẩn bằng phép đo lỗi tương đối định mức (cho dù đó là định mức 2 hoặc vô cực) và chỉ hiển thị khi bạn nhìn vào các lỗi tương đối nguyên tố và lấy mức tối đa.

Câu trả lời ban đầu của tôi dưới đây giải thích lý do tại sao bạn có thể nhận được một lỗi tương đối định mức trong giải pháp nhỏ hơn giới hạn được đưa ra bởi số điều kiện.


Như bạn đã lưu ý trong câu hỏi, số điều kiện, của ma trận không đơn lẻ đưa ra một lỗi tương đối trong trường hợp xấu nhất bị ràng buộc đối với lời giải cho hệ phương trình bị nhiễu. Nghĩa là, nếu chúng ta giải A ( x + Δ x ) = b + Δ b chính xác và giải A x = b chính xác, thìκ(Một)Một(x+Δx)= =b+ΔbAx=b

Δxxκ(A)Δbb

Số điều kiện có thể được tính theo nhiều loại định mức, nhưng số điều kiện hai chỉ tiêu thường được sử dụng và đó là số điều kiện được sử dụng trong bài báo mà bạn đề cập.

Các lỗi trường hợp xấu nhất xảy ra khi là một vector số ít trái của A tương ứng với giá trị đơn lẻ nhỏ nhất của A . Trường hợp tốt nhất xảy ra khi Δ b là một vector số ít trái của A tương ứng với giá trị đơn lẻ lớn nhất của A . Khi Δ b là ngẫu nhiên, thì bạn phải xem xét các hình chiếu của Δ b lên tất cả các vectơ số ít bên trái của A và các giá trị số ít tương ứng. Tùy thuộc vào phổ của A , mọi thứ có thể diễn ra rất tệ hoặc rất tốt. ΔbAAΔbAAΔbΔbAA

Xét hai ma trận , cả hai đều có số điều kiện 2 định mức 1.0 × 10 10 . Ma trận đầu tiên có giá trị đặc biệt 1 , 1 × 10 - 10 , ... , 1 × 10 - 10 . Ma trận thứ hai có giá trị đặc biệt 1 , 1 , ... , 1 , 1 × 10 - 10 . A1.0×101011×10101×10101111×1010

Trong trường hợp đầu tiên, một nhiễu loạn ngẫu nhiên không có khả năng theo hướng của vectơ số ít bên trái đầu tiên, và nhiều khả năng gần với một trong các vectơ số ít có giá trị số . Do đó, sự thay đổi tương đối trong giải pháp có thể sẽ rất lớn. Trong trường hợp thứ hai, hầu như mọi nhiễu loạn sẽ gần với một vectơ số ít có giá trị số 1 và sự thay đổi tương đối trong giải pháp sẽ nhỏ. 1×10101

PS (được thêm vào sau khi tôi trở về từ lớp yoga ...)

Công thức cho giải pháp cho AΔx=Δb

Δx=VΣ1UTΔb=i=1nUiTΔbσiVi

Theo định lý Pythagore,

Δx22=i=1n(UiTΔbσi)2

Nếu chúng ta giữ , sau đó số tiền này là tối đa khi Δ b = U n và hạn chế tối đa khi Δ b = U 1 .Δb2=1Δb=UnΔb=U1

Trong tình huống được xem xét ở đây, là kết quả của các lỗi làm tròn ngẫu nhiên, do đó, tất cả các giá trị U T i Δ b đều có cùng độ lớn. Các thuật ngữ có giá trị nhỏ hơn σ i sẽ đóng góp rất nhiều cho lỗi, trong khi các thuật ngữ có giá trị lớn hơn σ tôi sẽ không đóng góp nhiều. Tùy thuộc vào phổ, điều này có thể dễ dàng nhỏ hơn nhiều so với trường hợp xấu nhất bị ràng buộc. ΔbUiTΔbσiσi


Không lập luận này có ngụ ý rằng nó có thể (thậm chí nếu không) để đạt được trường hợp xấu nhất ràng buộc của cho ma trận trong ví dụ? AFAIU, dựa trên câu trả lời của tôi và dựa trên tài liệu của điều này là không thể. κ(A)?getrs
Kirill

@BrianBorchers Bạn có thể giải thích rõ tại sao "Lỗi trường hợp xấu nhất xảy ra khi là một vectơ số ít bên trái của A tương ứng với giá trị số ít nhất của A. Trường hợp tốt nhất xảy ra khi Δ b là một vectơ số đơn bên trái của A tương ứng với lớn nhất giá trị số ít của A. " giữ? Từ ví dụ dưới đây là hợp lý, nhưng tôi sẽ cần một số công thức. Hãy để cho SVD của AA = U Σ V T . Trong trường hợp đầu tiên, Một = Δ b σ 1 v T 1 +ΔbAAΔbAAAA=UΣVT . Làm thế nào để tiến hành? A=Δbσ1v1T+i=2NuiσiviT
Zoltán Csáti

Tôi đã không thảo luận về các lỗi làm tròn trong ma trận , nhưng hiệu ứng chung là tương tự - trừ khi bạn thực sự không may mắn trong các lỗi làm tròn, bạn thường làm tốt hơn một chút so với trường hợp xấu nhất bị ràng buộc. A
Brian Borchers

(-1) Việc thảo luận về các lỗi tương đối khôn ngoan thành phần trong đầu ra là sai lệch nghiêm trọng.
Kirill

1

tl; dr Họ đã báo cáo một số điều kiện, không nhất thiết là số điều kiện phù hợp cho ma trận, vì có sự khác biệt.

Điều này là cụ thể cho ma trận và vector bên phải. Nếu bạn nhìn vào các tài liệu hướng dẫn cho*getrs , nó nói lỗi mong ràng buộc là Ở đâycond(A,x)không hoàn toàn là số điều kiện thông thườngκ(A), mà là cond(A,x)=| A - 1

xx0xcond(A,x)ucond(A)u.
cond(A,x)κ(A) (Ở đây bên trong định mức, đây là các giá trị tuyệt đối theo thành phần.) Xem, ví dụ,tinh chỉnh lặp cho các hệ thống tuyến tính và LAPACKcủa Higham, hoặcĐộ chính xác và ổn định của thuật toán số(7.2).
cond(A,x)=|A1||A||x|x,cond(A)=|A1||A|.

Ví dụ của bạn, tôi mất một nhà điều hành khác biệt pseudospectral cho một vấn đề tương tự với , và có trong thực tế, một sự khác biệt lớn giữa | A - 1 | | Một | k ( Một ) , tôi tính toán 7 × 10 32,6 × 10 7n=128|A1||A|κ(A)7×1032.6×107, điều này đủ để giải thích sự quan sát rằng điều này xảy ra cho tất cả các phía bên tay phải, bởi vì các thứ tự cường độ gần như khớp với những gì nhìn thấy trong Bảng 3.1 (3-4 lỗi tốt hơn). Đây không phải làm việc khi tôi cố gắng tương tự cho chỉ là một ma trận ốm lạnh ngẫu nhiên, vì vậy nó có phải là một tài sản của .A

Một ví dụ rõ ràng mà hai số điều kiện không phù hợp, mà tôi mất từ Higham (7,17, p.124), do Kahan là Một ví dụ khác tôi tìm thấy chỉ là ma trận Vandermonde đơn giảnvới ngẫu nhiênb. Tôi đã trải quavà một số ma trận điều hòa khác cũng tạo ra loại kết quả này, nhưvà.

(2111ϵϵ1ϵϵ),(2+2ϵϵϵ).
[1:10]bMatrixDepot.jltriwmoler

Về cơ bản, điều đang xảy ra là khi bạn phân tích sự ổn định của việc giải quyết các hệ thống tuyến tính liên quan đến nhiễu loạn, trước tiên bạn phải xác định những nhiễu loạn nào bạn đang xem xét. Khi giải các hệ thống tuyến tính bằng LAPACK, lỗi này bị ràng buộc xem xét các nhiễu loạn thành phần trong , nhưng không gây nhiễu trong b . Vì vậy, đây là khác biệt so với thông thường κ ( Một ) = Một - 1Một , mà coi nhiễu loạn normwise trong cả hai Mộtb .Abκ(A)=A1AAb

Hãy xem xét (như một ví dụ) cũng như những gì sẽ xảy ra nếu bạn không tạo ra sự khác biệt. Chúng ta biết rằng việc sử dụng tinh lặp đi lặp lại với độ chính xác gấp đôi (xem liên kết ở trên), chúng tôi có thể nhận được các sai số tương đối về phía trước tốt nhất có thể của đối với những ma trận với κ ( Một ) « 1 / u . Vì vậy, nếu chúng ta xem xét ý tưởng rằng các hệ thống tuyến tính không thể được giải quyết với độ chính xác tốt hơn κ ( A ) u , thì các giải pháp tinh chỉnh có thể hoạt động như thế nào?O(u)κ(A)1/uκ(A)u

PS Vấn đề là ?getrsgiải pháp tính toán là giải pháp thực sự (A + E)x = bvới nhiễu loạn trong A , nhưng không có nhiễu loạn trong b . Mọi thứ sẽ khác nếu nhiễu loạn được cho phép trong b .EAbb

Chỉnh sửa Để hiển thị điều này hoạt động trực tiếp hơn, theo mã, rằng đây không phải là vấn đề may mắn, mà là hậu quả (bất thường) của hai số điều kiện rất khác nhau đối với một số ma trận cụ thể, ví dụ:

cond(Một,x)cond(Một)«κ(Một).
function main2(m=128)
    A = matrixdepot("chebspec", m)^2
    A[1,:] = A[end,:] = 0
    A[1,1] = A[end,end] = 1
    best, worst = Inf, -Inf
    for k=1:2^5
        b = randn(m)
        x = A \ b
        x_exact = Float64.(big.(A) \ big.(b))
        err = norm(x - x_exact, Inf) / norm(x_exact, Inf)
        best, worst = min(best, err), max(worst, err)
    end
    @printf "Best relative error:       %.3e\n" best
    @printf "Worst relative error:      %.3e\n" worst
    @printf "Predicted error κ(A)*ε:    %.3e\n" cond(A, Inf)*eps()
    @printf "Predicted error cond(A)*ε: %.3e\n" norm(abs.(inv(A))*abs.(A), Inf)*eps()
end

julia> main2()
Best relative error:       2.156e-14
Worst relative error:      2.414e-12
Predicted error κ(A)*ε:    8.780e-09
Predicted error cond(A)*ε: 2.482e-12

cond(Một,x)«cond(Một)κ(Một).
Một1:10xcond(Một,x)κ(Một)xxTôi= =Tôimộtmột
function main4(m=10)
    A = matrixdepot("vand", m)
    lu = lufact(A)
    lu_big = lufact(big.(A))
    AA = abs.(inv(A))*abs.(A)
    for k=1:12
        # b = randn(m) # good case
        b = (1:m).^(k-1) # worst case
        x, x_exact = lu \ b, lu_big \ big.(b)
        err = norm(x - x_exact, Inf) / norm(x_exact, Inf)
        predicted = norm(AA*abs.(x), Inf)/norm(x, Inf)*eps()
        @printf "relative error[%2d]    = %.3e (predicted cond(A,x)*ε = %.3e)\n" k err predicted
    end
    @printf "predicted κ(A)*ε      = %.3e\n" cond(A)*eps()
    @printf "predicted cond(A)*ε   = %.3e\n" norm(AA, Inf)*eps()
end

Trường hợp trung bình (gần 9 lỗi độ lớn tốt hơn):

julia> T.main4()
relative error[1]     = 6.690e-11 (predicted cond(A,x)*ε = 2.213e-10)
relative error[2]     = 6.202e-11 (predicted cond(A,x)*ε = 2.081e-10)
relative error[3]     = 2.975e-11 (predicted cond(A,x)*ε = 1.113e-10)
relative error[4]     = 1.245e-11 (predicted cond(A,x)*ε = 6.126e-11)
relative error[5]     = 4.820e-12 (predicted cond(A,x)*ε = 3.489e-11)
relative error[6]     = 1.537e-12 (predicted cond(A,x)*ε = 1.729e-11)
relative error[7]     = 4.885e-13 (predicted cond(A,x)*ε = 8.696e-12)
relative error[8]     = 1.565e-13 (predicted cond(A,x)*ε = 4.446e-12)
predicted κ(A)*ε      = 4.677e-04
predicted cond(A)*ε   = 1.483e-05

a=1,,12

julia> T.main4()
relative error[ 1]    = 0.000e+00 (predicted cond(A,x)*ε = 6.608e-13)
relative error[ 2]    = 1.265e-13 (predicted cond(A,x)*ε = 3.382e-12)
relative error[ 3]    = 5.647e-13 (predicted cond(A,x)*ε = 1.887e-11)
relative error[ 4]    = 8.895e-74 (predicted cond(A,x)*ε = 1.127e-10)
relative error[ 5]    = 4.199e-10 (predicted cond(A,x)*ε = 7.111e-10)
relative error[ 6]    = 7.815e-10 (predicted cond(A,x)*ε = 4.703e-09)
relative error[ 7]    = 8.358e-09 (predicted cond(A,x)*ε = 3.239e-08)
relative error[ 8]    = 1.174e-07 (predicted cond(A,x)*ε = 2.310e-07)
relative error[ 9]    = 3.083e-06 (predicted cond(A,x)*ε = 1.700e-06)
relative error[10]    = 1.287e-05 (predicted cond(A,x)*ε = 1.286e-05)
relative error[11]    = 3.760e-10 (predicted cond(A,x)*ε = 1.580e-09)
relative error[12]    = 3.903e-10 (predicted cond(A,x)*ε = 1.406e-09)
predicted κ(A)*ε      = 4.677e-04
predicted cond(A)*ε   = 1.483e-05

Chỉnh sửa 3 Một ví dụ khác là ma trận Forsythe, là một khối Jordan bị nhiễu loạn với bất kỳ kích thước nào có dạng

A=(010000100001ϵ000).
A=1A1=ϵ1κ(A)=ϵ1|A1|=A1=|A|1cond(A)=1Ax=bκ(A)

cond(A)κ(A)

A = matrixdepot("kahan", 48)
κ, c = cond(A, Inf), norm(abs.(inv(A))*abs.(A), Inf)
@printf "κ=%.3e c=%.3e ratio=%g\n" κ c (c/κ)

κ=8.504e+08 c=4.099e+06 ratio=0.00482027

Các số điều kiện trong bài báo được OP đề cập là các số điều kiện hai chỉ tiêu. Nếu bạn quay lại tham chiếu [17] bởi ElBarbary, bạn sẽ thấy rằng trong bài báo trước đây là những số điều kiện hai tiêu chuẩn. Ngoài ra, tôi thiết lập các ví dụ từ bài báo này bằng DMsuite và nhận được gần như chính xác các số điều kiện 2 chỉ tiêu giống như được báo cáo trong bài báo.
Brian Borchers

Các số định mức điều kiện định mức vô cực cho các ví dụ này mà tôi đã sử dụng phép nội suy dmsuite và Ch Quashev có độ lớn tương tự như các số điều kiện hai định mức. Tôi không nghĩ rằng sự khác biệt giữa 2 chỉ tiêu trong các số điều kiện vô hạn định mức là điều quan trọng đối với ví dụ cụ thể này.
Brian Borchers

ε= =0,01

ε= =0,01N= =1024

@BrianBorchers Tôi không chắc ý của bạn là gì: đây không phải là sự khác biệt giữa các số điều kiện 2 định mức và không chuẩn, mà là các số điều kiện thông thường và thành phần (nhiễu tương đối thành phần trong đầu vào, không phải thành phần các lỗi tương đối trong đầu ra như trong câu trả lời của bạn).
Kirill
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.