# lapack sgetrs tutorial

I have a problem to solving system linear equation Ax=b using lapack. I am planned to use sgetrs subroutine in lapack to solving system linear equation Ax=b.

sgetrs descriptions is a subroutine to Solves a system of linear equations with an LU-factored square coefficient matrix, with multiple right-hand sides. So, we need to process our data with LU-factored before use sgetrs lapack.

I have create a C/C++ code to give tutorial how to call sgetrs lapack from C/C++ code. I have compared the result from this sgetrs lapack with Matlab and give the same result. Please check this code below (call sgetrs lapack from C/C++) :

```/*
* main.c
*
*  Created on: 21 Apr, 2016
*      Author: toto
*/
#include <stdlib.h>
#include <stdio.h>

extern void sgetrf_(int *N, int *NRHS, float *A,
int *LDA, int *IPIV, int *INFO );
extern void sgetrs_(char *TRANS, int *N, int *NRHS, float *A,
int *LDA, int *IPIV, float *B, int *LDB, int *INFO );

void print1float(char *ca, float *a, int n)
{
int i;
fprintf(stderr, "%s:\n", ca);
for(i=0; i<n; i++)
fprintf(stderr, "%f \n", a[i]);
fprintf(stderr, "\n");
}

void print2float(char *ca, float *a, int nrow, int ncol)
{
int i, j, ii;

ii = 0;
fprintf(stderr, "%s:\n", ca);
for(i=0; i<nrow; i++)
{
for(j=0; j<ncol; j++)
{
fprintf(stderr, "%f \t", a[ii]);
ii = ii+1;
}
fprintf(stderr, "\n");
}
fprintf(stderr, "\n");
}

int main(int argc, char **argv)
{
float A[16] = {
0.5377,    0.3188,    3.5784,    0.7254,
1.8339,   -1.3077,    2.7694,   -0.0631,
-2.2588,   -0.4336,   -1.3499,    0.7147,
0.8622,    0.3426,    3.0349,   -0.2050};
float b[4] = {1,2,3,4};

int i;
char trans = 'T';
int dim = 4;
int nrhs = 1;
int LDA = dim;
int LDB = dim;
int info;
int ipiv[4];

//show input array
print2float("Input A", A, dim, LDA);
print1float("Input b" , b, dim);

//compute LU decomposition
sgetrf_(&dim, &dim, A, &LDA, ipiv, &info);
print2float("LU A", A, dim, LDA);

//solve Ax = b
sgetrs_(&trans, &dim, &nrhs, A, &LDA, ipiv, b, &LDB, &info);
print1float("x" , b, dim);

return(0);
}```

We can compile this code (call sgetrs lapack from C/C++) using command :

`gcc main.c -lm -llapack -lblas -o main`

Sample output after running this code (call sgetrs lapack from C/C++) :

```Input A:
0.537700 	0.318800 	3.578400 	0.725400
1.833900 	-1.307700 	2.769400 	-0.063100
-2.258800 	-0.433600 	-1.349900 	0.714700
0.862200 	0.342600 	3.034900 	-0.205000

Input b:
1.000000
2.000000
3.000000
4.000000

LU A:
3.578400 	0.089090 	0.150263 	0.202716
2.769400 	-1.554426 	-0.912081 	0.401758
-1.349900 	-0.313337 	-2.341749 	-0.475812
3.034900 	0.072220 	0.472039 	-0.624637

x:
-4.261576
-2.205967
2.362486
-6.147243```