Skip to main content

1) Determinant 2) Inverse Matrix 3) Gaussian Elimination 4) Iterative technique and calculate using three method to find x , y, z method: cramer's rule, gaussian elimination and inverse matrix.

#include <iostream>
#include <vector>
# GaussianElimination
std::vector<std::vector<float>> GaussianElimination(std::vector<std::vector<float>> matrix)
{
  int rows = matrix.size();
  int cols = matrix[0].size();
  for (int i = 0; i < rows; i++)
  {
    float coefficient1 = matrix[i][i];
    for (int j = 0; j < cols; j++)
    {
      matrix[i][j] /= coefficient1;
    }
    for (int j = 0; j < rows; j++)
    {
      if (j == i) continue;
      float coefficient2 = matrix[j][i];
      for (int k = 0; k < cols; k++)
      {
        matrix[j][k] -=  coefficient2 * matrix[i][k];
      }
    }
  }
  return matrix;
}
void PrintMatrix(std::vector<std::vector<float>> matrix)
{
  for (int i = 0; i < matrix.size(); i++)
  {
    for (int j = 0; j < matrix[0].size(); j++)
    {
      std::cout.width(5); std::cout << matrix[i][j] << "    ";
    }
    std::cout << std::endl;
  }
}
void PrintSE(std::vector<std::vector<float>> matrix)
{
  std::cout << "X = ";
  for (int i = 0; i < matrix.size()-1; i++)
  {
    std::cout << matrix[i][matrix[0].size()-1] << ", ";
  }
  std::cout << matrix[matrix.size() - 1][matrix[0].size() - 1];
  std::cout << std::endl;
}
# Inverse matrix
void PrintInverse(std::vector<std::vector<float>> matrix)
{
  std::cout << "The inverse matrix is\n";
  int rows = matrix.size();
  int cols = matrix[0].size();
  for (int i = 0; i < rows; i++)
  {
    for (int j = rows; j < cols; j++)
    {
      std::cout.width(5); std::cout << matrix[i][j] << "    ";
    }
    std::cout << std::endl;
  }
  std::cout << std::endl;
}
int main()
{
  std::cout << "Result of simultaneous equations with Gaussian Elimination" << std::endl;
  std::vector<std::vector<float>>(matrixA) = { {1, -4, -2, 21}, {2, 1, 2, 3 }, {3, 2, -1, -2} };
  std::vector<std::vector<float>>(ResultMatrixA) = GaussianElimination(matrixA);
  PrintMatrix(ResultMatrixA);
  PrintSE(ResultMatrixA);
  std::cout << std::endl;
  std::cout << std::endl;
  std::cout << "Result of inverse matrix with Gaussian Elimination" << std::endl;
  std::vector<std::vector<float>>(matrixB) = { {-1, 8, -2, 1, 0, 0}, {-6, 49, -10, 0, 1, 0}, {-4, 34, -5, 0, 0, 1} };
  std::vector<std::vector<float>>(ResultMatrixB) = GaussianElimination(matrixB);
  PrintMatrix(ResultMatrixB);
  PrintInverse(ResultMatrixB);
  std::cin.get();

}






# demterminant matrix

from copy import deepcopy
def smaller_matrix(original_matrix, row, column):
    #the new metrix should not affect the original matrix
    new_matrix = deepcopy(original_matrix)
    #the indices to do the removal depend on the original metrix
    new_matrix.remove(original_matrix[row])
    for i in range(len(new_matrix)):
        new_matrix[i].remove(new_matrix[i][column])
    return new_matrix
def determinant(matrix):
    num_rows = len(matrix)
    for row in matrix:
        if len(row) != num_rows:
            print("Not a square matrix.")
            return None
        if len(matrix) == 2:
            simple_determinant = matrix[0][0] *\
                                 matrix[1][1] -\
                                 matrix[1][0] *\
                                 matrix[0][1]
            return simple_determinant
        else:
            # cofactor expansion
            answer = 0
            num_columns = num_rows
            for j in range(num_columns):
                cofactor = (-1) ** (0+j) * matrix[0][j] \
                            * determinant(smaller_matrix(matrix,0,j))
                answer += cofactor
            return answer
a_matrix = [[2, 1, 7, 9], [7, 1, 9, 7],[8, 6, 1, 4], [0, 1, 4, 2]]
print("The answer of matirx is :",determinant(a_matrix))










 




Comments