Решение системного линейного уравнения малых матриц по правилу Крамера имеет большую численную ошибку

Я сделал замечание, что когда я решаю систему линейных уравнений через правило Крамера (частное двух определителей) матриц порядка N < 10, тогда я получаю довольно большую остаточную ошибку по сравнению с решением LAPACK.

Вот пример:

float B00[36] __attribute__((aligned(16))) = {127.3611, -46.75962, 62.8739, -9.175959,   27.23792, 1.395347,
-46.75962,   841.5496, 406.2475, -119.3715, -33.60108, 6.269638,
62.8739,    406.2475,  1302.981, -542.8405,  95.03378, 42.77704,
-9.175959, -119.3715, -542.8405, 434.3342,   34.96918, -33.74546,
27.23792,  -33.60108,  95.03378, 34.96918,   59.10199, -1.880791,
1.395347,   6.269638,  42.77704, -33.74546, -1.880791, 2.650853};

float c00[6] __attribute__((aligned(16))) = {-0.102149, -5.76615, -17.02828, 12.47396, 1.158018, -0.9571021};

Сейчас linsolvВ результате получается LAPACK (от Intel MKL):

x = [-0.000314947
-0.000589154
-0.00587876
0.0184799
0.01738
-0.0170484]

и правило Крамера (собственная реализация) дает:

x = [-0.000314933
-0.000798058
-0.00587888
0.0184808
0.017381
-0.0170508]

Заметка x[1] разница.

Я могу гарантировать, что мой определитель является правильным. Кто-нибудь делал подобное наблюдение или может что-то сказать по этому поводу?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]