码迷,mamicode.com
首页 > 编程语言 > 详细

矩阵的逆矩阵和行列式值的递归算法。

时间:2015-09-27 01:09:21      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

很久没有写过C语言,今天写了一个关于矩阵的算法

完整代码如下:

#include<atlstr.h>
#include<iostream>
#include<string>
using namespace std;

//创建矩阵
float **Creat(int n)
{
    float **array=new float*[n];
    for(int i=0;i<n;i++)
    {
        array[i]=new float[n];
    }
    printf("请输入矩阵:\n");
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin>>array[i][j];
        }
    }
    return array;
}

//求行列式的值:
float Value(float **array,int n)
{
    float Result=0;
    if(n==1) return array[0][0];
    float **temp=new float*[n-1];
    for(int i=0;i<n-1;i++)
    {
        temp[i]=new float[n-1];
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-1;j++)
        {
            for(int k=0;k<n-1;k++)
            {
                int flag;
                if(j<i)  flag=0;
                else flag=1;
                temp[j][k]=array[j+flag][k+1];
            }
        }
        int flag2=-1;
        if(i%2==0) flag2=1;
        Result+=flag2*array[i][0]*Value(temp,n-1);
    }
    return Result;
}
//求逆矩阵: 伴随矩阵行列式的值除以行列式的值
float **GetMarin(float **array,int n)
{
    float **resultMarin=array;
    float resultSum=Value(array,n);
    float **temp=new float*[n-1];
    for(int i=0;i<n-1;i++)
    {
        temp[i]=new float[n-1];
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            for(int k=0;k<n-1;k++)
            {
                for(int m=0;m<n-1;m++)
                {
                    int flag1=0;
                    int flag2=0;
                    if(k<i) flag1=0;
                    else flag1=1;
                    if(m<j) flag2=0;
                    else flag2=1;
                    temp[k][m]=array[k+flag1][m+flag2];
                }
            }
            int flag3=-1;
            if((i+j)%2==0) flag3=1;
            resultMarin[j][i]=(float)flag3*Value(temp,n-1)/resultSum;
        }
    }
    return resultMarin;
}
void OutPut(float **array,int n)
{
    printf("逆矩阵:\n");
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            printf("%f ",array[i][j]);
        }
        printf("\n");
    }
}
void Test()
{
    printf("请输入你想输入矩阵的阶数:");
    int n;
    cin>>n;
    float **array=Creat(n);
    float Result=Value(array,n);
    printf("行列式的值=%f\n",Result);
    if(Result==0) printf("该矩阵没有逆矩阵\n");
    else
    {
      float **resultMarin=GetMarin(array,n);
      OutPut(resultMarin,n);
    }
    Test();
}
void main()
{
    Test();
}

运行结果:

技术分享

矩阵的逆矩阵和行列式值的递归算法。

标签:

原文地址:http://www.cnblogs.com/Huaran1chendu/p/4841607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!