求解一个矩阵的逆矩阵

c++

#include<bits/stdc++.h>
using namespace std;
const int N=20;
const double E=1e-10;
double calculate_A(double src[N][N], int n )
{
    int i,j,k,x,y;
    double tmp[N][N], t;
    double result = 0.0;
    if(n == 1) return src[0][0];
    for( i = 0; i < n; ++i )
    {
        for( j = 0; j < n - 1; ++j )
        {
            for( k = 0; k < n - 1; ++k )
            {
                x = j + 1;
                y = k >= i ? k + 1 : k;

                tmp[j][k] = src[x][y];
            }
        }
        t = calculate_A( tmp, n - 1 );
        if( i % 2 == 0 ) result += src[0][i] * t;
        else result -= src[0][i] * t;
    }
    return result;
}

/**
 * 计算伴随矩阵
 */
void calculate_A_adjoint( double src[N][N], double dst[N][N], int n )
{
    int i, j, k, t, x, y;
    double tmp[N][N];

    if( n == 1 )
    {
        dst[0][0] = 1;
        return;
    }

    for( i = 0; i < n; ++i )
    {
        for( j = 0; j < n; ++j )
        {
            for( k = 0; k < n - 1; ++k )
            {
                for( t = 0; t < n - 1; ++t )
                {
                    x = k >= i ? k + 1 : k ;
                    y = t >= j ? t + 1 : t;

                    tmp[k][t] = src[x][y];
                }
            }

            dst[j][i]  =  calculate_A( tmp, n - 1 );

            if( ( i + j ) % 2 == 1 )
            {
                dst[j][i] = -1*dst[j][i];
            }
        }
    }
}
/**
 * 得到逆矩阵
 */
int calculate_A_inverse( double src[N][N], double dst[N][N], int n )
{
    double A = calculate_A( src, n );
    double tmp[N][N];
    int i, j;
    if ( fabs( A - 0 ) <= E )
    {
        printf("不可能有逆矩阵!\n");
        return 0;
    }
    calculate_A_adjoint( src, tmp, n );

    for( i = 0; i < n; ++i )
    for( j = 0; j < n; ++j )
        dst[i][j] = (double)( tmp[i][j] / A );
    return 1;
}
int main()
{
    int n;
    double f[N][N],ans[N][N];
    cin>>n;
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++) cin>>f[i][j];
    calculate_A_inverse(f,ans,n);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)printf("%lf ",ans[i][j]);
        cout<<endl;
    }
    return 0;
}
/*
输入
3
3 2 0
2 1 2
2 1 1

输出
-1 -2 4
2 3 -6
0 1 -1

*/

excel

http://blog.csdn.net/baimafujinji/article/details/49721523

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要求三个矩阵A、B、C之间的协方差,可以按照以下步骤进行: 1. 将三个矩阵按列合并成一个矩阵D,其列数为A、B、C的列数之和。 2. 计算矩阵D的协方差矩阵E,其中E[i][j]表示第i列和第j列的协方差。 3. 根据A、B、C的列数,将E分割成3个子矩阵,分别为A与A之间的协方差矩阵、A与B之间的协方差矩阵、B与C之间的协方差矩阵。 下面是Python代码实现: ```python import numpy as np # 生成三个矩阵A、B、C A = np.random.rand(5, 3) B = np.random.rand(5, 4) C = np.random.rand(5, 2) # 将三个矩阵按列合并成一个矩阵D D = np.hstack((A, B, C)) # 计算协方差矩阵E E = np.cov(D, rowvar=False) # 分割成三个子矩阵 cov_AA = E[:A.shape[1], :A.shape[1]] cov_AB = E[:A.shape[1], A.shape[1]:A.shape[1]+B.shape[1]] cov_BC = E[A.shape[1]+B.shape[1]:, A.shape[1]:A.shape[1]+B.shape[1]] print("cov_AA:\n", cov_AA) print("cov_AB:\n", cov_AB) print("cov_BC:\n", cov_BC) ``` 其中,np.hstack()函数可以将三个矩阵按列合并成一个矩阵。np.cov()函数可以计算协方差矩阵,参数rowvar=False表示每列是一个变量。最后,根据A、B、C的列数,将协方差矩阵E分割成3个子矩阵。 ### 回答2: 要求Python求解三个矩阵之间的协方差,我们可以使用NumPy库中的cov函数来实现。假设我们有三个矩阵A、B和C,它们分别表示为n×m、m×p和n×p的矩阵。 首先,我们需要导入NumPy库,并创建三个矩阵A、B和C: ```python import numpy as np # 假设A、B和C是三个矩阵 A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6, 7], [8, 9, 10]]) C = np.array([[11, 12], [13, 14], [15, 16]]) ``` 接下来,我们使用cov函数计算三个矩阵之间的协方差: ```python # 计算A和B之间的协方差 cov_AB = np.cov(A, B) # 计算B和C之间的协方差 cov_BC = np.cov(B, C) # 计算A和C之间的协方差 cov_AC = np.cov(A, C) ``` 最后,我们可以打印出这三个协方差矩阵: ```python print("cov(A,B):\n", cov_AB) print("cov(B,C):\n", cov_BC) print("cov(A,C):\n", cov_AC) ``` 以上就是使用Python求解三个矩阵之间协方差的方法。通过调用NumPy库中的cov函数,我们可以方便地计算出任意两个矩阵之间的协方差矩阵。 ### 回答3: 矩阵之间的协方差是用来衡量两个矩阵之间线性相关性的指标。在Python中,可以使用numpy库来计算矩阵之间的协方差。 首先,需要导入numpy库: ```python import numpy as np ``` 然后,可以创建三个矩阵,假设分别为A、B、C: ```python A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) B = np.array([[9, 8, 7], [6, 5, 4], [3, 2, 1]]) C = np.array([[2, 4, 6], [8, 10, 12], [14, 16, 18]]) ``` 接下来,使用numpy的cov函数来计算协方差矩阵: ```python covariance_AB = np.cov(A, B) covariance_AC = np.cov(A, C) covariance_BC = np.cov(B, C) ``` 最后,可以打印出这三组矩阵的协方差矩阵: ```python print("矩阵A和矩阵B的协方差矩阵:") print(covariance_AB) print("矩阵A和矩阵C的协方差矩阵:") print(covariance_AC) print("矩阵B和矩阵C的协方差矩阵:") print(covariance_BC) ``` 以上就是使用Python求解三个矩阵之间的协方差的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值