Мой профессор назначил нам лабораторию, в которой я застрял и не могу найти ничего в Интернете. Это специально для матрицы с собственным значением ‹ 1.
Учитывая матрицу 3x3 A = {(.5, -1, 0), (0, .6666, 0), (.5, -1, .6666)}, вы должны вычислить обратную, используя A^- 1 = I + B + B ^ 2 + B ^ 3 ..... B ^ 20, где I — единичная матрица, а B = I — A. Есть два выхода, один из которых A^-1, а другой будучи A * A^-1, чтобы проверить результат.
До сих пор я пробовал две разные функции для умножения. Извините за мое ужасное имя. i, j и k — счетчик строк, столбцов и циклов соответственно.
void mPower(double x[][3], double y[][3], double z[][3])
{
int i, j, k;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++)
z[i][j] = z[i][j] + (x[i][k] * y[k][j]);
}
}
mPower - моя, наверное, неправильная функция для умножения. В качестве альтернативы я пробовал
void multiplyMatrix(double x[][3], double y[][3], double z[][3])
{
int i, j, k;
int sum = 0;
for (i = 0; i <= 2; i++) {
for (j = 0; j <= 2; j++) {
sum = 0;
for (k = 0; k <= 2; k++) {
sum = sum + x[i][k] * y[k][j];
}
z[i][j] = sum;
}
}
}
Однако я получаю только нули.
void printIt(double a[][3], double b[][3])
{
int i, j;
for (i = 0; i < 3; i++)
{
printf ("\n\t\t\t");
for (j = 0; j < 3; j++)
printf ("%7.4f", a[i][j]);
printf ("\t");
for (j = 0; j < 3; j++)
printf ("%7.4f", b[i][j]);
printf ("\n\n\t");
}
}
int main()
{
int i, j, k;
double b1[][3] = {.5, 1., 0., 0., .6666, 0., -.5, -1., .6666};
double b3[3][3] = {0};
double addOn[3][3];
double aInverse[3][3];
double identity[][3] = {1., 0., 0., 0., 1., 0., 0., 0., 1.};
mPower (b1, b1, b3);
for (k = 0; k < 20; k++) {
addOn[i][j] = addOn[i][j] + b3[i][j];
mPower (b1, addOn, b3);
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++)
aInverse[i][j] = identity[i][j] + addOn[i][j];
}
printIt(b3, aInverse);
system("pause");
return 0;
}
PrintIt, по крайней мере, сделал форматирование дисплея приятным, но меня беспокоят циклы for в моей основной проблеме. Я просто не могу уложить в голове, что делать. Я получаю значения повсюду, и мне действительно трудно понять математику, связанную с такой нишевой проблемой. Любая помощь будет оценена по достоинству.