Консультация № 187949
01.12.2014, 20:16
100.51 руб.
0 1 0
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Возникла проблема с обратной матрицей. В программе через много всяких вычислений формируется матрица А, в ней примерно такие значения: единица, нули и вещественные числа например: 0.860241. Матрица 12x12. При такой матрице счиатет нормально(может быть есть погрешности, но пока мне не до них). Если матрицу увеличить например 16х16, то обратная матрица уже не может посчитать, т.к. в результате расчета вещественные числа выходят за рамки диапазона long double, т.е. получаются числа примерно e-8020 и длинее.
Можно ли как нибуть преоброзить данный код, чтоб вычисления укладывались в диапазон? Или напишите пожалуйста другой способ расчета обратной матрицы, только не как отдельная функция и без динамических массивов. Заранее благодарю.


Приложение:
long double obr[22][22], A[22][22];
matr = 12;

for (int k = 1; k <= matr; k++)
{
for (int p = 1; p <= matr; p++)
{
obr[k][p] = 0;
obr[k][k] = 1;
}
}

for (int k = 1; k < matr+1; k++)
{
nn = 0.;
nn = A[k][k];
for (int p = k+1; p < matr+1; p++)
{
mm = 0.;
mm = A[p][k];
for (int pp = 1; pp < matr+1; pp++)
{
A[p][pp] = A[k][pp] * mm - A[p][pp] * nn;
obr[p][pp] = obr[k][pp] * mm - obr[p][pp] * nn;
}
}
}

for (int k = 1; k < matr+1; k++)
{
for (int p = matr; p >= 1; p--)
{
sum = 0;
for (int pp = matr; pp > p; pp--)
sum += A[p][pp] * obr[pp][k];
if (A[p][p] == 0.)
{
obr[p][k] = 0.;
}
else
{
obr[p][k] = (obr[p][k] - sum) / A[p][p];
}
}
}

Обсуждение

давно
Старший Модератор
31795
6196
03.12.2014, 16:57
общий
03.12.2014, 21:14
1)было бы хорошо посмотреть на хоть приблизительные значения матрицы А, т.к.
Цитата: 397903
В программе через много всяких вычислений формируется матрица А, в ней примерно такие значения: единица, нули и вещественные числа например: 0.860241.

выглядит очень размыто;

2)Есть и другие способы вычисления обратной матрицы, кроме метода Гаусса—Жордана.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа