Передача аргументов в функцию в цикле C
Дело вот в чем. Есть функция, которая должна считать обратную матрицу с помощью LUP-разложения. Передаю параметр в цикле, а тот возвращает не то, что должен, и я не могу понять, почему. Самое интересное, что при передаче тех значений в цикле и без, ответы разные (те, что я передал не в цикле - правильные).
void invert(double **L, double **U, int *p, int N, double**IA) {
double *b = (double*)malloc(sizeof(double) * N);
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if (j == i) {
b[j] = 1;
} else {
b[j] = 0;
}
}
//ВОТ ЭТОТ УЧАСТОК
showVect(b, N);
IA[i] = solve(L, U, b, p, N);
free(b);
}
showMatr(IA, N);}
double *solve(double **L, double **U, double *b, int *p, int N) {
double *x = (double*)malloc(sizeof(double) * N);
double *y = (double*)malloc(sizeof(double) * N);
double *temp = (double*)malloc(sizeof(double) * N);
for (int i = 0; i < N; ++i) {
temp[i] = b[p[i]];
}
b = temp;
free(temp);
for (int i = 0; i < N; ++i) {
double sum = 0;
for (int j = 0; j < i; ++j) {
sum += L[i][j]*y[j];
}
y[i] = b[i] - sum;
}
for (int i = N-1; i > -1; --i) {
double sum = 0;
for (int j = i; j < N; ++j) {
sum += U[i][j]*x[j];
}
x[i] = (y[i] - sum)/U[i][i];
}
free(y);
return x;
}
Ответы (1 шт):
Автор решения: Artem Belov
→ Ссылка
Не нужно освобождать память от y и temp в функции решения уравнения