Question: PLEASE check if this code it right /* Solution of Linear Equations - LU Decomposition Method */ #include #include #define M 10 /* maximum row
PLEASE check if this code it right
/* Solution of Linear Equations - LU Decomposition Method */
#include
#include
#define M 10 /* maximum row */
#define N 10 /* maximum column */
void print_matrix1(int m, double matrix[]);
void print_matrix2(int m, int n, double matrix[][N]);
int lu_decomposition(int m, int n, double a[][N], double x[]);
void main(){
double a[M][N] = {{5.5, 3.6, 4.6, 13}, {2.3,5.5,2,15.2}, {10,3,7,14.6}};
double x[M];
int n_row = 3, n_column = 4, return_val;
printf("matrix A_C: ");
print_matrix2( n_row, n_column, a );
return_val = lu_decomposition( n_row, n_column, a, x );
if (return_val) {
printf( "Can not find the solution !!! " ); }
else {
printf("matrix X: ");
print_matrix1( n_row, x ); } }
int lu_decomposition(int m, int n, double a[][N], double x[]) {
int i, j, k;
double l[M][N], u[M][N], e[M], sum;
for( i = 0; i < m; i++ ) {
for( j = 0; j < n-1; j++ ) {
l[i][j] = 0.0;
u[i][j] = 0.0;
if ( j == i ) u[i][j] = 1.0; } }
/*** LU decomposition ***/
for( j = 0; j < n-1; j++ ) {
for( i = j; i < m; i++ ) {
sum = 0;
for( k = 0; k < j; k++ ) {
sum += l[i][k] * u[k][j]; }
l[i][j] = a[i][j] - sum; }
for( i = j+1; i < m; i++ ){
sum = 0;
for( k = 0; k < j; k++ ) {
sum += l[j][k] * u[k][i]; }
u[j][i] = (a[j][i] - sum) / l[j][j]; } }
printf("matrix L: ");
print_matrix2( m, m, l );
printf("matrix U: ");
print_matrix2( m, m, u );
/*** forward substitution ***/
e[0] = a[0][n-1] / l[0][0];
for( i = 1; i < n-1; i++ ) {
sum = 0;
for( j = 0; j < i; j++ ) {
sum += l[i][j] * e[j]; }
e[i] = (a[i][n-1] - sum) / l[i][i]; }
printf("matrix E: ");
print_matrix1( m, e );
/*** back substitution ***/
x[m-1] = e[m-1];
for( i = m-2; i >= 0; i-- ) {
sum = 0;
for( j = i+1; j < m; j++ ) {
sum += u[i][j] * x[j]; }
x[i] = e[i] - sum; }
return 0; }
void print_matrix1(int m, double matrix[])
{
int i;
for( i = 0; i < m; i++ ) {
printf("%12.4f", matrix[i]);
printf(" "); }
printf(" "); }
void print_matrix2(int m, int n, double matrix[][N]) {
int i, j;
for( i = 0; i < m; i++ ) {
for( j = 0; j < n; j++ ) {
printf("%12.4f", matrix[i][j]); }
printf(" "); }
printf(" "); }
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
