Статическая обратная матричная функция

Я пытаюсь получить обратную матрицу с помощью функции inv(). Функция Excel работает нормально, но я не могу получить ее из версии Stata 11 и Stata 12.

matrix A = (0,0,553959,18071,0,0,86985,0,0,0\0,0,13752,1986661,0,0,14178,0,0,0\245764,55172,0,0,0,0,210238,15835,0,174155\135950,1217897,0,0,211554,0,348453,197592,424893,704246\0,0,40442,171113,0,0,0,0,0,0\277015,720994,0,0,0,0,0,0,0,0\0,0,0,0,0,989861,121720,67779,0,58624\286,20529,34840,90896,0,8147,157021,265924,51955,4187\0,0,0,0,0,0,299389,86656,0,90804\0,0,58171,973844,0,0,0,0,0,0)
matrix list A
matrix D = inv(A)*A
matrix list D

Я получил:

    D[10,10]
             c1          c2          c3          c4          c5          c6          c7          c8          c9         c10
 c1   .99815163   -.0007439          24         256  -4.441e-18   .02180544   .63042827   .71306993   .13905754   .72740125
 c2   .00071017   1.0002858         -64        -640   1.978e-17  -.00837793   1.0656752  -.27397047  -.05342766  -.27947675
 c3   2.008e-20   8.082e-21    2.143632   20.313752           0  -2.369e-19   .08155506  -7.747e-18  -1.511e-18  -2.800e-19
 c4   7.748e-22   3.118e-22   .04412596   1.7837869           0  -9.141e-21   .00314672  -2.989e-19  -5.829e-20  -1.080e-20
 c5  -.03648975  -.01468572         512        2048           1     .430473   13.357737   14.077098   2.7452099   14.360021
 c6     .000033   .00001328      -1.125         -12           0    .9996107  -.09016952  -.01273068  -.00248264  -.01298654
 c7  -1.280e-19  -5.153e-20   -7.292322   -129.5298           0   1.511e-18   .47996753   4.940e-17   9.633e-18   1.785e-18
 c8  -.00276051    -.001111          32         512           0   .03256598   3.1088352   2.0649553   .20767957   1.0863588
 c9   .01364134   .00549012           0       -1024           0   -.1609282  -9.7734934  -5.2625881  -.02627036  -5.3683558
c10   .00263441   .00106025           0        -128           0  -.03107834  -1.6240499  -1.0163072   -.1981926  -.03673303

Но я считаю, что должно быть:

1   0   0   0   0   0   0   0   0   0
0   1   0   0   0   0   0   0   0   0
14  -8  1   -9,42932E-17    -64 1,00614E-16 -1,73472E-18    0   1,33227E-15 32
0   -32 -5,55112E-17    1   0   1,11022E-16 0   0   0   -128
0,021597505 -0,210228064    0   0   0,788571331 4,27485E-20 2,13743E-20 0   5,47181E-18 0,788571331
0   0   0   0   0   1   0   0   0   0
0   0   0   0   -16 -8,67362E-19    1   0   0   0
3,5 -1,75   6,93889E-18 -2,7765E-19 -128    1,38778E-17 0   1   2,22045E-16 35
0   0   0   0   0   0   0   0   1   0
-0,007446191    -0,112499947    0   0   1,604924249 8,70031E-20 4,35016E-20 0   1,11364E-17 1,604924249

person Nurlan    schedule 12.10.2015    source источник
comment
Каковы ожидания, что Stata должна соответствовать числовым значениям Excel?   -  person Nick Cox    schedule 12.10.2015
comment
У меня есть пример матрицы, обратной заданным данным: 0,0,553959,18071,0,0,86985,0,0,0\0,0,13752,1986661,0,0,14178,0,0,0 \245764,55172,0,0,0,0,210238,15835,0,174155\135950,1217897,0,0,211554,0,348453,197592,424893,704246\0,0,40442,171113,0 ,0,0,0,0,0\277015,720994,0,0,0,0,0,0,0,0\0,0,0,0,0,989861,121720,67779,0,58624 \286,20529,34840,90896,0,8147,157021,265924,51955,4187\0,0,0,0,0,0,299389,86656,0,90804\0,0,58171,973844,0 ,0,0,0,0,0   -  person Nurlan    schedule 12.10.2015
comment
И результат такой, как я написал ниже   -  person Nurlan    schedule 12.10.2015
comment
Я не вижу здесь ответа на свой вопрос. Если вас беспокоит числовая точность, и у вас нет независимых доказательств того, что является явно правильным, тогда вам нужно увидеть, какая программа является лишней, и никакое сравнение двух программ не может этого сделать. Попробуйте также R, MATLAB и т. д.   -  person Nick Cox    schedule 12.10.2015


Ответы (1)


Я считаю, что проблема в том, что ваша матрица плохо обусловлена, то есть почти сингулярна.

Если вы попытаетесь вычислить обратное значение в Mata (матричный язык программирования Stata), результат будет таким:

: Ainv = luinv(A)

: Ainv
[symmetric]
         1    2    3    4    5    6    7    8    9   10
     +---------------------------------------------------+
   1 |   .                                               |
   2 |   .    .                                          |
   3 |   .    .    .                                     |
   4 |   .    .    .    .                                |
   5 |   .    .    .    .    .                           |
   6 |   .    .    .    .    .    .                      |
   7 |   .    .    .    .    .    .    .                 |
   8 |   .    .    .    .    .    .    .    .            |
   9 |   .    .    .    .    .    .    .    .    .       |
  10 |   .    .    .    .    .    .    .    .    .    .  |
     +---------------------------------------------------+

Соедините это с:

Если вы используете эти функции с единственной матрицей, возвращается матрица пропущенных значений. Определение сингулярности производится относительно tol. Подробности см. в разделе Допуск в разделе Примечания в [M-5] lusolve().

Источник: help mf_luinv.

Проверяя номер состояния, мы видим, что оно очень высокое, что подтверждает плохое состояние:

: C = cond(A)

: C
  7.47519e+17

Численные методы различаются, но для такой матрицы можно ожидать больших неточностей. См. help mf_lusolve##remarks3, как указано выше.

person Roberto Ferrer    schedule 12.10.2015