Чому невмовно обумовлені лінійні системи можна точно вирішити?


13

Відповідно до відповіді , велике число умови (для лінійного розв'язання системи) зменшує гарантовану кількість правильних цифр у рішенні з плаваючою комою. Матриці диференціації вищого порядку в псевдоспектральних методах, як правило, дуже погано обумовлені. Чому ж це все ще дуже точні методи?

Я розумію, що низька точність, що надходить від неправильно обумовлених матриць, - це лише гарантоване значення, але все ж змушує мене замислитися, чому неправильно обумовлені матриці точно вирішуються прямими методами на практиці - наприклад, LCOLстовпці таблиці 3.1 на сторінці 11 Ван та ін., ДУЖЕ КОНДИЦІОНОВАНИЙ МЕТОД КОЛОКАЦІЇ, ВИКОРИСТОВУЮЧИМ ПАТЕВОДСПЕКТРАЛЬНУ МЕТРИКУ ІНТЕГРАЦІЇ , SIAM J. Sci. Обчисл., 36 (3) .


2
Моя інтуїція полягає в тому, що розчинність / точність системи Ax = b прив’язана до вектора примушування b, а не тільки до матриці А. Можливо, якщо b не "зондує" або "не збуджує" погано обумовлені режими A, точне рішення залишається можливим. Як обмежуючий приклад, A може бути саме сингулярним (нескінченне число умови), але Ax = b все ще може мати рішення, яке можна точно обчислити, якщо дані витіснення b знаходяться в діапазоні А. Я визнаю, що це досить -хвильовий, тому я коментую лише замість відповіді.
rchilton1980

@ rchilton1980 "поки Ax = b все ще може мати рішення", але це рішення не є унікальним. А приклади, які я наводжу, мають унікальне рішення.
Zoltán Csáti

Це справедливий контрапункт - можливо, артефакт вибору нескінченного номера умови (рівно нульове власне значення). Однак я думаю, що ви можете замінити цю нульову власну величину машинним епсилоном, і моя думка все ще стоїть. (Тобто, система має дуже велике число умов, система є несинулярною з унікальним рішенням, яке ми можемо обчислити дуже точно за умови, що b не має компонента уздовж цієї крихітної власності).
rchilton1980

1
Якщо бути більш конкретним, мій експеримент з думкою тут є на зразок A = diag ([1 1 1 1 1 eps]), b = [b1 b2 b3 b4 b5 0]. Це надумано, але я думаю, що недостатньо обгрунтувати первісну претензію: "Іноді недобре обумовлені A можуть бути вирішені точно для конкретних варіантів b"
rchilton1980,

1
Просто наведіть ще один приклад з блогу Молера blogs.mathworks.com/cleve/2015/02/16/…
перкусія

Відповіді:


7

Додано після моєї початкової відповіді:

Мені здається, що автор згаданого документу вказує номери умов (мабуть, 2-нормові умови умов, але, можливо, номери умов нескінченності) у таблиці, надаючи максимальні абсолютні помилки, а не відносні норми помилок або максимальні відносні помилки в елементах ( все це різні заходи.) Зауважте, що максимальна відносна похибка в елементах - це не те саме, що відносна похибка безмежно-нормової норми. Крім того, помилки в таблиці відносяться до точного рішення вихідної диференціальної граничної задачі рівняння, а не до дискретизованої лінійної системи рівнянь. Таким чином, інформація, надана в роботі, дійсно не підходить для використання із пов'язаною помилкою на основі номера умови.

Однак у моїй реплікації обчислень я бачу ситуації, коли відносна похибка норми нескінченності (або двомовна відносна похибка) значно менша, ніж обмежена величина, задана числом умови норми нескінченності (відповідно 2-нормне число умови). Іноді просто пощастить.

Я використав пакет DMSUITE MATLAB і вирішив приклад проблеми з цієї статті, використовуючи метод псевдоспектралі з поліномами Чебишева. Мої показники стану та максимальні абсолютні помилки були аналогічні тим, про які повідомлялось у статті.

Я також бачив відносні норми помилок, які були дещо кращими, ніж можна було очікувати, виходячи з кількості умови. Наприклад, на прикладі задачі з , використовуючи N = 1024 , я отримуюϵ=0.01N=1024

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

cond (A, inf) = 7,8e + 8

норма (u-uexact, 2) / норма (uexact, 2) = 3.1e-12

норма (u-uexact, inf) / норма (uexact, inf) = 2,7е-12

Здається, що рішення добре, приблизно до 11-12 цифр, тоді як номер умови знаходиться в порядку 1e8.

Однак ситуація з елементарними помилками є цікавішою.

max (abs (u-uexact)) = 2,7e-12

Це все одно добре виглядає.

max (abs ((u-uexact) ./ uexact) = 6.1e + 9

Нічого, дуже велика відносна помилка принаймні в одному компоненті рішення.

Що трапилось? Точне рішення цього рівняння має невеликі компоненти (наприклад, 1.9e-22), тоді як приблизний розчин розливається за набагато більшого значення 9e-14. Це приховано вимірюванням відносної похибки норми (будь то 2-норма чи нескінченність-норма) і стає видимим лише тоді, коли ви подивитеся на елементарні похибки та приймаєте максимум.

Моя початкова відповідь нижче пояснює, чому можна отримати відносну похибку норми в рішенні, меншу ніж обмеження, задане номером умови.


κ(A)A(x+Δx)=b+ΔbAx=b

Δxxκ(A)Δbb

Номери умов можна обчислити відносно різних норм, але часто використовується номер двох норм, і це номер умови, який використовується у роботі, на яку ви посилаєтесь.

Найгірша помилка випадок має місце , коли є лівим сингулярних вектор , відповідний найменшому сингулярного значення . У кращому випадку відбувається , коли є лівим сингулярним вектором , відповідним найбільшим сингулярного значення . Коли є випадковим, тоді ви повинні подивитися на проекції на всі ліві сингулярні вектори та відповідні особливі значення. Залежно від спектру , все може йти дуже погано або дуже добре. ΔbAAΔbAAΔbΔbAA

Розглянемо дві матриці , обидві з 2-нормальним умовою число . Перша матриця має єдині значення , , , . Друга матриця має особливі значення , , , , . A1.0×101011×10101×10101111×1010

У першому випадку випадкове збурення навряд чи буде в напрямку першого лівого сингулярного вектора і, швидше за все, буде близьким до одного з сингулярних векторів із сингулярним значенням . Таким чином, відносна зміна розчину, ймовірно, буде дуже великою. У другому випадку практично будь-яке збурення буде близьким за напрямом до сингулярного вектора з сингулярним значенням , а відносна зміна рішення буде невеликою. 1×10101

PS (додано пізніше після повернення з уроку йоги ...)

Формула рішення єAΔx=Δb

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

За теоремою Піфагора,

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

Якщо ми збережемо , тоді ця сума максимальна при і мінімізована, коли .Δb2=1Δb=UnΔb=U1

У ситуації, що розглядається тут, є результатом випадкових помилок округлення, тому значення повинні бути приблизно однакової величини. Терміни з меншими значеннями багато сприятимуть помилкам, тоді як терміни з більшими значеннями не сприятимуть великій кількості. Залежно від спектру, це може бути набагато менше, ніж у гіршому випадку. ΔbUiTΔbσiσi


Чи не буде цей аргумент має на увазі , що це можливо (навіть якщо малоймовірно) , щоб досягти найгіршого випадку , пов'язаного з для матриці в прикладі? AFAIU, виходячи з моєї відповіді та на основі документації, це не повинно бути можливим. κ(A)?getrs
Кирило

@BrianBorchers Чи можете ви, будь ласка, пояснити, чому "найгірша помилка випадку виникає, коли - лівий сингулярний вектор відповідає найменшому сингулярному значенню Найкращий випадок виникає, коли - лівий сингулярний вектор відповідає найбільше значення однини ". тримає? З наведеного нижче прикладу це логічно, але мені знадобляться деякі формули. Нехай СВД з буде . У першому випадку, . Як діяти далі? A A Δ b A A A A = U Σ V T A = Δ b σ 1 v T 1 + N i = 2 u i σ i v T iΔbAAΔbAAAA=UΣVTA=Δbσ1v1T+i=2NuiσiviT
Zoltán Csáti

Я не обговорював помилок заокруглення в матриці , але загальний ефект схожий - якщо ви не отримаєте справді невдачі в помилках округлення, ви зазвичай робите дещо краще, ніж песимістичний приклад в гіршому випадку. A
Брайан Борчерс

(-1) Обговорення компонентних відносних помилок у висновку серйозно вводить в оману.
Кирило

1

tl; dr Вони повідомили номер умови, не обов'язково правильний номер умови для матриці, оскільки є різниця.

Це властиво матриці та вектору правої сторони. Якщо ви подивитеся на документацію*getrs , він говорить про те, що пов'язана помилка вперед Тут - не зовсім звичайний номер умови , а скоріше (Тут всередині норми це абсолютні значення, що залежать від компонентів.) Див., Наприклад, Ітераційне уточнення для лінійних систем та LAPACK за Хіггемом , або Точність та стабільність чисельних алгоритмів Хіггема (7.2).

xx0xcond(A,x)ucond(A)u.
cond(A,x)κ(A)
cond(A,x)=|A1||A||x|x,cond(A)=|A1||A|.

Для вашого прикладу я взяв псевдоспектральний диференціальний оператор для аналогічної проблеми з , і насправді існує велика різниця міжі я обчислив і , що достатньо для пояснення спостереження, що це відбувається для всіх правої сторони, оскільки порядки величин приблизно відповідають тому, що є видно в таблиці 3.1 (на 3-4 порядки краще помилок). Це не працює , коли я намагаюся те ж саме для всього випадкових неупітанних матриць, тому він повинен бути властивістю .n=128|A1||A|κ(A)7×1032.6×107A

Явний приклад, для якого два числа умов не відповідають, який я взяв від Хіггема (7.17, стор.124), завдяки Кахану - Ще один приклад, який я знайшов, - це просто звичайна матриця Вандермонд із випадковим . Я пройшов, і деякі інші умовні матриці також дають такий результат, як і .

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

По суті, те, що відбувається, полягає в тому, що, аналізуючи стійкість вирішення лінійних систем відносно збурень, спочатку потрібно вказати, які збурення ви розглядаєте. Розв'язуючи лінійні системи з LAPACK, ця пов'язана помилка враховує компоненти, обумовлені компонентними збуреннями в , але не збурення в . Отже, це відрізняється від звичайного, який розглядає нормально збурення і в і в .Abκ(A)=A1AAb

Розгляньте (як контрприклад) також, що буде, якщо ви не зробите різницю. Ми знаємо, що за допомогою ітеративного уточнення з подвійною точністю (див. Посилання вище) ми можемо отримати найкращу можливу відносну похибку для тих матриць з . Отже, якщо ми розглядаємо ідею, що лінійні системи не можуть бути вирішені з точністю кращою, ніж , як би можливе вдосконалення рішень?O(u)κ(A)1/uκ(A)u

PS значення те, що ?getrsкажуть, що обчислене рішення є справжнім рішенням (A + E)x = bз збуренням в , але без збурень в . Все було б інакше, якби збурення були дозволені в .EAbb

Редагувати Для того, щоб показати, що це працює більш прямо, в коді, що це не флюк, чи справа удачі, а скоріше (незвичне) наслідок, коли два числа умов дуже відрізняються для деяких конкретних матриць, тобто

cond(A,x)cond(A)κ(A).
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

Редагувати 2 Ось ще один приклад того ж явища, коли номери різних умов несподівано сильно відрізняються. Цього разу Тут - матриця Вандермонд 10 × 10 на , і коли вибрано випадковим чином, помітно менше, ніж , а найгірший випадок задається для деякого .

cond(A,x)cond(A)κ(A).
A1:10xcond(A,x)κ(A)xxi=iaa
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

Середній випадок (майже на 9 порядків краща помилка):

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

Редагувати 3 Іншим прикладом є матриця Форсайта, яка є збуреним Йорданським блоком будь-якого розміру форми Це має , , тому , але , тому . І як можна перевірити вручну, розв’язування таких систем лінійних рівнянь, як з поворотом є надзвичайно точним, незважаючи на потенційно необмежений . Тож ця матриця теж дасть несподівано точні рішення.

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

Редагувати 4 матриці Кахана так само, як :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

Номери умов у роботі, на які посилається ОП, є двомовними номерами умов. Якщо ви повернетесь до посилання [17] від ElBarbary, ви побачите, що в попередньому документі це були норми з двома нормами. Крім того, я налаштовував приклади з цієї статті за допомогою DMsuite, і отримав майже такі самі цифри умов 2-х норм, що й у звіті.
Брайан Борчерс

Кількість норм норми нескінченності для цих прикладів, які я отримав за допомогою інтерполяції dmsuite та Чебишева, були схожими за величиною двомовні умови умови. Я не думаю, що для цього конкретного прикладу важлива різниця між 2-нормою у числах умов нескінченності-норми.
Брайан Борчерс

Я вважаю, що помилки, повідомлені в роботі, є абсолютними, а не відносними помилками (це не має великої різниці, за винятком , де рішення опускається близько до 0.ϵ=0.01
Брайан Борчерс

Для і відносні похибки частин рішення, які знаходяться біля 0, величезні, але абсолютні похибки невеликі. Я погоджуюсь, що документ був дуже розпливчастим щодо того, який номер умови використовувався та про те, які саме "помилки" були (відносні чи абсолютні помилки.)ϵ=0.01N=1024
Брайан Борчерс

@BrianBorchers Я не впевнений, що ти маєш на увазі: це не різниця між 2-нормами та числами умовних норм, а скоріше нормовими та компонентними числами умов (відносно збурень, що відносяться до компонентів, а не компонентами) -відповідні помилки у висновку, як і у вашій відповіді).
Кирило
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.