C++程序 查找矩阵的正常值和痕迹

C++程序 查找矩阵的正常值和痕迹

在矩阵的运算中,有两个常用的指标:矩阵的正常值和矩阵的痕迹。矩阵的正常值是指矩阵中若干个互不相同特征值的平方和,而矩阵的痕迹则是指矩阵对角线元素的和。在本篇文章中,我们将通过C++程序演示如何查找矩阵的正常值和痕迹。

矩阵的正常值

矩阵的正常值是指矩阵中若干个互不相同特征值的平方和。下面是C++程序中用于查找矩阵的正常值的代码:

#include <iostream>
#include <cmath>
using namespace std;

const int MAXN = 100;

double a[MAXN][MAXN], ev[MAXN], nv[MAXN]; // a表示矩阵,ev表示特征值,nv表示正常值 
int n;

int gauss() {
    int c, r;
    for (c = 0, r = 0; c < n; c++) {
        int t = r;
        for (int i = r; i < n; i++)
            if (abs(a[i][c]) > abs(a[t][c]))
                t = i;
        if (abs(a[t][c]) < 1e-8)
            continue;

        for (int i = c; i <= n; i++)
            swap(a[t][i], a[r][i]);
        double k = a[r][c];
        for (int i = c; i <= n; i++)
            a[r][i] /= k;

        for (int i = r + 1; i < n; i++) {
            k = a[i][c] / a[r][c];
            for (int j = c; j <= n; j++)
                a[i][j] -= k * a[r][j];
        }
        r++;
    }

    if (r < n)
        for (int i = r; i < n; i++)
            if (abs(a[i][n]) > 1e-8)
                return 2;
    for (int i = n - 1; i >= 0; i--) {
        nv[i] = a[i][n];
        for (int j = i + 1; j < n; j++)
            nv[i] -= a[i][j] * nv[j];
    }
    return 0;
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            cin >> a[i][j];
    for (int i = 0; i < n; i++)
        a[i][n] = nv[i] = 0;
    for (int i = 1; i <= n; i++) {
        a[i - 1][n] = pow(-1, i + 1);
        if (gauss())
            printf("The matrix is not normal.\n");
        else {
            ev[i - 1] = nv[i - 1];
            printf("lambda[%d] = %lf\n", i, ev[i - 1]);
        }
    }
    double ans = 0;
    for (int i = 0; i < n; i++)
        ans += ev[i] * ev[i];
    printf("The matrix's normal value is: %lf\n", ans);
    return 0;
}

上述代码中,我们使用了高斯消元法来求解矩阵的特征值和正常值。首先,我们输入了矩阵的维数以及矩阵的所有元素,然后按照高斯消元法的步骤,求解出矩阵的所有特征值,最后根据公式tr(A) = \sum_{i=1}^n\lambda_i求解出矩阵的正常值。

在上述代码中,我们使用了以下变量:

  1. a:nxn的矩阵2. ev:长度为n的数组,用于存储特征值。
  2. nv:长度为n的数组,用于存储正常值。
  3. n:矩阵的维数。

需要注意的是,在输入矩阵后,我们需要将a矩阵中的最后一列初始化为0,以便执行高斯消元法。同时,我们还需要给a矩阵的最后一列赋值为正负交替的1,-1,1,-1…以便求解出每一个特征值。

矩阵的痕迹

矩阵的痕迹是指矩阵对角线元素的和。以下是C++程序中用于查找矩阵的痕迹的代码:

#include <iostream>
using namespace std;

const int MAXN = 100;

int a[MAXN][MAXN]; // a表示矩阵 
int n;

int main() {
    cin >> n;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            cin >> a[i][j];
    int ans = 0;
    for (int i = 0; i < n; i++)
        ans += a[i][i];
    printf("The matrix's trace is: %d\n", ans);
    return 0;
}

上述代码中,我们直接按照矩阵的定义求解出了矩阵的痕迹。需要注意的是,在输入矩阵过程中,我们仍然使用了nxn的数组a来存储矩阵。

结论

通过本篇文章,我们了解了如何使用C++程序来查找矩阵的正常值和痕迹。对于矩阵运算来说,这是基础而重要的指标,在学习线性代数和矩阵运算时,应该注意掌握其具体实现方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例