天天看點

矩陣乘法、轉置矩陣、對稱矩陣

個人網站:Geek交流圈

程式實作随機生成N階方陣,然後求轉置矩陣,利用對稱矩陣與原矩陣相乘,構造對稱矩陣。

代碼如下:

/*
方陣,轉置矩陣,對稱矩陣
程式說明:
    利用随機數生成随機的 N階方陣    GeneratedMatrix函數
    将生成的 N階方陣 轉置,得到轉置方陣    TransposeMatrixAi函數
    将原方陣與轉置方陣相乘 得到 對稱矩陣    MatrixMutiply函數
    輸出矩陣   OutputMatrixAi函數
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define N 3 //确定方陣的階數
int i = 0;
int j = 0;
int t = 0;
int OriginalMatrix[N][N] = { 0 };
int TransposeMatrix[N][N] = { 0 };
int SymmetricMatrix[N][N] = { 0 };
//輸出矩陣内容
void OutputMatrixAi(int TransposeMatrix[N][N]);
//随機生成矩陣
void GeneratedMatrix();
//轉置矩陣算法
void TransposeMatrixAi(int TransposeMatrix[N][N]);
//矩陣相乘算法
void MatrixMutiply(int m, int n, int p, int Matrix1[N][N], int Matrix2[N][N], int MatrixResult[N][N]);
int main(void)
{

    //随機生成原矩陣
    GeneratedMatrix();
    //輸出原矩陣
    printf("原矩陣:\n");
    OutputMatrixAi(OriginalMatrix);


    //将原矩陣轉置,調用轉置算法
    TransposeMatrixAi(TransposeMatrix);
    //輸出轉置矩陣
    printf("轉置矩陣:\n");
    OutputMatrixAi(TransposeMatrix);


    //求對稱矩陣,調用矩陣相乘函數
    MatrixMutiply(N, N, N, TransposeMatrix, OriginalMatrix, SymmetricMatrix);
    //輸出對稱矩陣
    printf("對稱矩陣:\n");
    OutputMatrixAi(SymmetricMatrix);


    system("pause");
    return 0;
}
void MatrixMutiply(int m, int n, int p, int Matrix1[N][N], int Matrix2[N][N], int MatrixResult[N][N])
{
    int i, j, k;
    int Sum;

    /*嵌套循環計算結果矩陣(m*p)的每個元素*/
    for (i = 0; i < m; i++)
        for (j = 0; j < p; j++)
        {
            /*按照矩陣乘法的規則計算結果矩陣的i*j元素*/
            Sum = 0;
            for (k = 0; k < n; k++)
                Sum += Matrix1[i][k] * Matrix2[k][j];
            MatrixResult[i][j] = Sum;
        }
}
void GeneratedMatrix()
{
    srand(time(NULL));
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            OriginalMatrix[i][j] = rand() % 10;
            TransposeMatrix[i][j] = OriginalMatrix[i][j];
        }
    }
}
void TransposeMatrixAi(int TransposeMatrix[N][N])
{
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            if (i > j)
            {
                t = TransposeMatrix[i][j];
                TransposeMatrix[i][j] = TransposeMatrix[j][i];
                TransposeMatrix[j][i] = t;
            }
        }
    }
}
void OutputMatrixAi(int TransposeMatrix[N][N])
{
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            printf("%d ", TransposeMatrix[i][j]);
        }
        putchar('\n');
    }
}




           

繼續閱讀