Как преобразовать матрицу для 1 измерения с кодом c?
Привет , я использовал Гаусса Джордана для 1 дня, но я не сделал
Я хочу найти обратную матрицу 1d. Я нашел определитель, но я не знаю инверсии этой матрицы
Привет мои дорогие друзья
Наши матрицы:
double A[] = {6, 6 ,2, 4, 9 ,7, 4, 3 ,3};
double B[] = {6, 6 ,2, 4, 9 ,7, 4, 3 ,3};
double Final[9];
Function to calculate determinant:
int Inverse(double *A, double *C, int N){
int n = N;
int i, j, k;
float a[10][10] = { 0.0 };
double C[9] = { 0.0 };
float pivot = 0.0;
float factor = 0.0;
double sum = 0.0; ``` variables
for (k = 1; k <= n - 1; k++)
{
if (a[k][k] == 0.0)
{
printf("error");
}
else
{
pivot = a[k][k];
for (j = k; j <= n + 1; j++)
a[k][j] = a[k][j] / pivot;
for (i = k + 1; i <= n; i++)
{
factor = a[i][k];
for (j = k; j <= n + 1; j++)
{
a[i][j] = a[i][j] - factor * a[k][j];
}
}
}
if (a[n][n] == 0)
printf("error");
else
{
C[n] = a[n][n + 1] / a[n][n];
for (i = n - 1; i >= 1; i--)
{
sum = 0.0;
for (j = i + 1; j <= n; j++)
sum = sum + a[i][j] * C[j];
C[i] = (a[i][n + 1] - sum) / a[i][i];
}
}
}
for (i = 1; i <= n; i++)
{
printf("\n\tx[%1d]=%10.4f", i, C[i]);
}
system("PAUSE");
return 0;
}
Хотя я очень старался, я не смог найти противоположного в программировании на c для размерной матрицы 1x1. На выходе всегда получается 0. Можете ли вы помочь мне, где я мог сделать ошибку? Спасибо.
1 ответ
Похоже, вы используете C
как выходной параметр (для хранения инверсии); однако вы также объявляете в функции локальную переменную с тем же именем. Это заставляет локальную переменную затенять (то есть: скрывать) выходной параметр; Таким образом, изменения, которые вы вносите вC
в функции не влияют на C
вызывающая функция видит.
Чтобы решить эту проблему, вам нужно удалить строку double C[9] = {0};
из вашей функции.