I have problems using my augmented_matrix function in my gauss function.. can anybody help me?
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
double inverse(int r, int c, int* matrix[]);
int **matrix_augmented(int *a[], int *v, int r, int c);
void gauss(int r, int c, int *a[]);
int main()
{
srand(time(NULL));
int r;
int c;
printf("define the size of the matrix\n number of rows\n");
scanf_s("%d", &r);
printf("number of columns\n");
scanf_s("%d", &c);
int **matrix = (int**)malloc(r * sizeof(*matrix));
int* vector = (int*)malloc(r*sizeof(*vector));
for (int i = 0; i < r; i++)
{
matrix[i] = (int*)malloc(c * sizeof(*matrix[r]));
}
matrix_augmented(matrix, vector, r, c);
inverse(r, c, matrix);
gauss(r, c, matrix_augmented(matrix, vector, r, c));
}
double inverse(int r, int c, int* matrix[])
{
double determinant = 0;
for (int i = 0; i<r; i++)
determinant = determinant + (matrix[0][i] * (matrix[1][(i + 1) % r] * matrix[2][(i + 2) % r] - matrix[1][(i + 2) % r] * matrix[2][(i + 1) % r]));
printf("\nInverse of matrix is: \n\n");
for (int j = 0; j<r; j++){
for (int i = 0; i<r; i++)
printf("%.4f\t", (((matrix[(i + 1) % r][(j + 1) % r] * matrix[(i + 2) % r][(j + 2) % r]) - (matrix[(i + 1) % r][(j + 2) % r] * matrix[(i + 2) % r][(j + 1) % r])) / determinant));
printf("\n");
}
return (0);
}
int **matrix_augmented(int *a[], int *v, int r, int c)
{
for (int i = 0; i < r; ++i)
{
for (int j = 0; j < c; ++j)
{
a[i][j] = rand() % 21 - 10;
printf("%d ", a[i][j]);
v[i] = rand() % 21 - 10;
}
printf("%d", v[i]);
printf("\n");
}
return 0;
}
void gauss(int r, int c, int *a[])
{
for (int k = 0; k<r - 1; k++)
{
for (int i = k + 1; i<r; i++)
{
double p = a[i][k] / a[k][k];
for (int j = k; j<r + 1; j++)
a[i][j] = a[i][j] - p*a[k][j];
}
}
double *x = (double*)malloc(r * sizeof(*x));
x[r - 1] = a[r - 1][r] / a[r - 1][r - 1];
for (int i = r - 2; i >= 0; i--)
{
int s = 0;
for (int j = i + 1; j<r; j++)
{
s += (a[i][j] * x[j]);
x[i] = (a[i][r] - s) / a[i][i];
}
}
printf("\nThe result is:\n");
for (int i = 0; i<r; i++)
printf("\nx%d=%lf", i + 1, x[i]);
}