교수님은 우리에게 난처한 실험실을 지정해 주셨고 웹에서 도움을 얻을 수 없습니다. 고유 값을 갖는 행렬에 대해 특히 그렇습니다.반복적 인 방법을 사용하는 역 행렬 계산
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;
}
}
}
그러나 나는 단지 0을 얻습니다.
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 루프가 걱정됩니다. 나는 무엇을해야할지 주위를 감쌀 수 없다. 나는 그 곳곳에서 가치를 얻고 있으며, 그런 틈새 문제와 관련된 수학을 계산하는 데 어려움을 겪고 있습니다. 어떤 도움을 주시면 감사하겠습니다.
은 오 와우, 당신은 물에서 수학을 불었다. 실수로 addOn이 초기화되지 않은 mPower 함수를 사용하여 이전 버전을 게시했지만 나보다 많이 표시 한 것은 아닙니다. 고맙습니다. 당신은 어떻게 -1.5001과 긍정적 인 3.003을 얻고 있습니까? – Dub
사실, 찾았습니다! b1의 처음 1.은 음수이어야하고 -.5는 양수 여야합니다. – Dub