Ваша реализация также не сработает, если в матрице на диагонали есть нули.
Проблема возникает и в случае если на диагонали не нули, например
Код:
A =
-0.2993330 0.1142370 0.0015756 -0.0516769 0.2351970
0.0530580 -0.1895260 0.0115484 0.1561540 -0.0312342
0.0065948 0.5349510 -1.0830900 0.5349510 0.0065948
-0.0312342 0.1561540 0.0115484 -0.1895260 0.0530580
0.2351970 -0.0516769 0.0015756 0.1142370 -0.2993330
octave:4> inv(A)
ans =
1.3254e+06 3.8689e+06 8.6360e+04 3.8689e+06 1.3254e+06
1.3254e+06 3.8689e+06 8.6360e+04 3.8689e+06 1.3254e+06
1.3254e+06 3.8689e+06 8.6359e+04 3.8689e+06 1.3254e+06
1.3254e+06 3.8689e+06 8.6360e+04 3.8689e+06 1.3254e+06
1.3254e+06 3.8689e+06 8.6360e+04 3.8689e+06 1.3254e+06
в моей процедуре результат совсем другой
Код:
4.35869e+15 1.27235e+16 2.84009e+14 1.27235e+16 4.35869e+15
5.11576e+15 1.49335e+16 3.3334e+14 1.49335e+16 5.11576e+15
4.55463e+15 1.32955e+16 2.96777e+14 1.32955e+16 4.55463e+15
4.76076e+15 1.38972e+16 3.10208e+14 1.38972e+16 4.76076e+15
4.66593e+15 1.36204e+16 3.04029e+14 1.36204e+16 4.66593e+15
Что в этом конкретном случае можно сделать, если
Код:
eig(A)
ans =
-5.9144e-01
-2.8877e-01
9.5467e-08
-8.5874e-02
-1.0947e+00
cond(A)
ans = 1.7099e+07