Тестирование решателей СЛАУ

Сравнение решателей СЛАУ на плохо обусловленных матрицах

Мы решили несколько известных плохо обусловленных задач в различных математических пакетах и библиотеках.
Основным требованием к решателю СЛАУ при тестировании являлось задание всех исходных данных с удвоеннной точностью (double precision) на языке Си (с точностью в 15 верных значащих цифр для каждого числа — точность вычислений по умолчанию во всех математических пакетах), т.е. в типе данных double представления вещественных чисел языка Си и выдача результатов всех элементов вектора решения тестовых СЛАУ в этом же типе данных и с удвоенной точностью.

Решатель СЛАУ

Тестовая
СЛАУ

Тестовая СЛАУ Уилкинсона (Wilkinson) 2-го порядка

Обусловленность
системы Cond(A)=10^6

Тестовая СЛАУ Вохминцева 5-го порядка

Обусловленность системы Cond(A)=10^12

Тестовая СЛАУ с матрицей Гильберта (Hilbert) 10-го порядка

Обусловленность системы Cond(A)=1.5*10^13

LAE-Solver-01 (SADEL) +(15) +(15) +(15)
LAE-Solver-02 (SADEL) +(15) +(15) +(15)
MATLAB -(10) -(5) -(4)
Mathcad -(10) -(5) -(4)
Mathematica -(10) -(5) -(4)
Maple -(10) -(5) н/д
NAG-LAPACK -(10) -(5) н/д
IMSL -(10) -(5) н/д
Intel MKL -(10) -(5) н/д
CUBLAS+MAGMA -(10) -(5) н/д

Знак ( – ) означает, что решатель СЛАУ не обеспечил точность решения в 15 верных значащих цифр для всех элементов вектора решений тестовой СЛАУ и не выдал никакого предупреждающего сообщения об этом, в скобках (m) указано полученное количество верных значащих цифр в решении тестовых СЛАУ. «н/д» означает, что сравнение не проводилось (нет данных).

Тестовая СЛАУ Уилкинсона

0.780×1 + 0.563×2 = 0,217
0,913×1 + 0.659×2 = 0.254

Точное решение этой СЛАУ (найдено Уилкинсоном)
x1 = 1
x2 = -1

Решение СЛАУ в различных математических пакетах:
Пакет Maple:
х1=0.999999999901257661
Х2= -0.99999999986319910

Пакет Mathcad (библиотека Intel MKL)
х1=0.9999999998902543
х2= -0.999999999847955

Пакет Mathematica:
х1=0.999999999890539
Х2= -0.999999999848725

Пакет MATLAB:
x1 =0.999999999982863
х2= -0.999999999975375

Библиотека CUBLAS+MAGMA(LAPACK):
х1=0.99999999991008559
х2= -0.99999999987542965

Библиотека SADEL
X1= 1.000000000000000
X2= -1.000000000000000

Тестовая СЛАУ Вохминцева 5-го порядка.

Исходная матрица Вохминцева и точное решение (pdf)

Решением является единичный вектор.

MATLAB
1.000000000000000
1.000000000003840
1.000074582711069
0.999999999999908
1.000000000000041

Maple
1.
1.00000000000383982
1.00007458271106886
0.99999999999990840
1.00000000000004108

Mathcad
1.
1.0000000000038538
1.0000748177758685
0 9999999999999081
1 0000000000000041
Поскольку пакет Mathcad использует программы из библиотеки стандартных программ Intel MKL на языке Си, то результат относится и к этой библиотеке.

IMSL
1.00000000000000 е+00
9.99999999993610 e-01
9.99875875563484 e-01
1.00000000000015 e+00
9.99999999999932 e-01

CUBLAS+MAGMA
0.99999999999999978
0.99999999997693834
0.99991773257376704
1.00000000000054245
0.99999999999995504

Mathematica выдает предупреждение о том, что система плохо обусловлена и решение может содержать ошибки.
LinearSolve::luc:Result for of badly conditioned matrix may contain significant numerical errors
1.000000000000000
1.000000000003854
1.000074817775868
0.9999999999999081
1.000000000000041

SADEL
1.000000000000000
1.000000000000000
1.000000000000000
1.000000000000000
1.000000000000000

«Идеальный тест» для решателей СЛАУ с матрицей Гильберта 10-го порядка.

Источник: стр. 61 из книги [Тыртышников Е.Е. Методы численного анализа : учеб. пособие для студ. вузов / — М.: Издательский центр «Академия», 2007. — 320 с. — (Университетский учебник. Сер. Прикладная математика и информатика)].

Исходная матрица Гилберта и точное решение (pdf)

Точное решение: единичный вектор.

Результаты тестирования:

Результаты решения этого теста в MATLAB дают 4 верных значащих цифры в решении:
1.000000000656054 0.999999942399351 1.000001241593833
0.999988609324377 1.000054720208350 0.999848714382213
1.000249368566485 0.999758086488927 1.000127412729303
0.999971903145620.

Результаты решения этого теста в Mathematica дают 4 верных значащих цифры в решении:
1.00000000102692 0.999999913111677 1.00000182119251
0.999983654557706 1.00007714695808 0.999789792458962
1.00034229015517 0.999671371218567 1.00017154400445
0.999962464713493

Решатель СЛАУ на языке Си из программной библиотеки для решения задач линейной алгебры LAPACK, также получил 4 верных значащих цифры для 8-й неизвестной этой задачи:
1.000000000464697 0.999999960244827 1.000000840984605
0.999992393461859 1.000036137385782 0.999900979283788
1.000162025520190 0.999843779478675 1.000081852296234
0.999982030574678.

Решатель СЛАУ LAE-Solver-01 дает решение с 15-ю верными значащими цифрами для всех неизвестных теста.
1.000000000000000 1.000000000000000 1.000000000000000
1.000000000000000 1.000000000000000 1.000000000000000
1.000000000000000 1.000000000000000 1.000000000000000
1.000000000000000

Добавить комментарий