Error in function - C (СИ)
Формулировка задачи:
Если Progonka(...) в окремой функции - не работает. Если код из функции скопировать в main() все работает.
Код ->
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void Progonka(int N,double **A, double* B , double* X);
int main(int argc, char *argv[])
{
int N = 4;
//double A[N][N];
double** A = malloc(N * sizeof *A);
for (int i = 0; i < N; i++)
{
A[i] = malloc(N * sizeof *A[i]);
}
// double B[N];
//double X[N];
double* B = malloc(N * sizeof *B);
double* X = malloc(N * sizeof *X);
A[0][0] = 1; A[0][1] = 2;
A[1][0] = 1; A[1][1] = 10; A[1][2] = -5;
A[2][1] = 1; A[2][2] = -5; A[2][3] = 2;
A[3][2] = 1; A[3][3] = 4;
B[0] = -5;
B[1] = -9;
B[2] = -20;
B[3] = -27;
puts("A matrix\n");
for(int i = 0;i < N;i++){
for(int j = 0; j < N;j++){
printf("%lf ",A[i][j]);
}
putchar('\n');
}
Progonka(N, A, B, X);
putchar('\n');
puts("X vector....");
for(int i = 0;i < N;i++)
printf("%lf ", X[i]);
for (int i = 0; i < N; i++)
{
free(A[i]);
}
free(A);
free(B);
free(X);
return 0;
}
void Progonka(int N, double **A, double* B , double* X){
double Alp[N];
double Bet[N];
int i = 0;
Alp[0] = -A[0][ 1] / A[0][0];
Bet[0] = B[0] / A[0][0];
for (i = 1; i < N; i++)
{
Alp[i] = -A[i][ i + 1] /(A[i][ i] + Alp[i - 1] * A[i][i - 1]) ;
Bet[i] = (B[i] - A[i][i - 1] * Bet[i - 1]) / (A[i][ i] + Alp[i - 1] * A[i][i - 1]);
}
X[N] = (B[N] - A[N][ N - 1] * Bet[N - 1]) / (A[N][N] + Alp[N - 1] * A[N][N - 1]);
for (i = N - 1; i >= 0; i--)
{
X[i] = Alp[i] * X[i + 1] + Bet[i];
}
}Решение задачи: «Error in function»
textual
Листинг программы
for (i = 1; i < N; i++) {
Alp[i] = -A[i][ i + 1] /(A[i][ i] + Alp[i - 1] * A[i][i - 1]) ;
Bet[i] = (B[i] - A[i][i - 1] * Bet[i - 1]) / (A[i][ i] + Alp[i - 1] * A[i][i - 1]);
}
Объяснение кода листинга программы
- Проходим циклом по элементам массива от 1 до N-1
- Вычисляем значение Alp[i] по формуле: Alp[i] = -A[i][ i + 1] /(A[i][ i] + Alp[i - 1] * A[i][i - 1])
- Вычисляем значение Bet[i] по формуле: Bet[i] = (B[i] — A[i][i — 1] Bet[i — 1]) / (A[i][ i] + Alp[i — 1] A[i][i — 1])