C实现--行列式计算

前一段时间在复习线性代数的知识;实现一下关于行列式的计算;我们再线性代数里,关于行列式的话,我们知道;AxA* = |A|I;需要伴随矩阵;但是我个人认为,因为有计算机的存在,所以是不是可以硬算行列式?反正我是这么写的;就是通过递归计算代数余子式;直接看代码吧;

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <math.h>
#include <time.h>  
#include <stdlib.h>
int daishuyuzhishi(int**arr, int**arr_tmp, int hang, int lie,int x,int y)
{
    int i, j;
    for (i = 0; i < x; i++)
    {
        for (j = 0; j < y; j++)
        {
            arr_tmp[i][j] = arr[i][j];
        }
    }
    for (i = x + 1; i < hang; i++)
    {
        for (j = y + 1; j < lie; j++)
        {
            arr_tmp[i - 1][j - 1] = arr[i][j];
        }
    }
    for (i = x + 1; i < hang; i++)
    {
        for (j = 0; j < y; j++)
        {
            arr_tmp[i - 1][j] = arr[i][j];
        }
    }
    for (i = 0; i < x; i++)
    {
        for (j = y + 1; j < lie; j++)
        {
            arr_tmp[i][j-1] = arr[i][j];
        }
    }
    return 0;
}
int hanglieshical(int** arr, int hang, int lie)
{
    if (arr == NULL || *arr == NULL || hang != lie)
    {
        printf("the input error!\n");
        return -1;
    }
    if (hang == 2)
    {
        int sum = arr[0][0] * arr[1][1] - arr[0][1] * arr[1][0];
        return sum;
    }
    int i, j, sum = 0;
    int**arr_tmp = (int**)calloc(hang-1,sizeof(int*));
    for (i = 0; i < hang - 1; i++)
        arr_tmp[i] = (int*)calloc(lie - 1, sizeof(int));
    for (i = 0; i < hang; i++)
    {
        for (j = 0; j < lie; j++)
        {
            daishuyuzhishi(arr, arr_tmp, hang, lie, i, j);
            sum += pow(-1,(i+j))*arr[i][j] * hanglieshical(arr_tmp, hang - 1, lie - 1);
        }
    }
    return sum;
}
int main(void)
{
    int sum;
    int i,j,k = 1;
    
    int**arr = (int**)calloc(3, sizeof(int*));
    for (i = 0; i < 3; i++)
        arr[i] = (int*)calloc(3, sizeof(int));
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            arr[i][j] = k;
            if (i == 2 && j == 1)
            {
                k += 2;
            }
            else
                k++;
        }
    }
    sum = hanglieshical(arr, 3, 3);
    printf("the sum is %d\n", sum);
    return 0;
}

如果大家还有什么好的建议,也欢迎提问和给出建议,谢谢~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 理解矩阵一:转载自:http://blog.csdn.net/myan/article/details/64751...
    jiandanjinxin阅读 1,791评论 1 15
  • 嗷嗷本人目前数学系大三,对高等代数大致复习一遍之后的思路整理,个人想法居多,不严谨,仅供参考,有错误欢迎指出,有建...
    流星落黑光阅读 11,709评论 1 16
  • 最原始出处:http://blog.csdn.net/myan/article/details/647511 (C...
    IIGEOywq阅读 4,045评论 2 62
  • 行列式及其性质 前面的章节已经学习了大量关于矩阵的知识,现在我们来集中探讨一下方阵的性质,其中行列式和特征值是重中...
    AlbertLiDesign阅读 2,405评论 0 1
  • 天风先满楼,雷雨随其后。星点一时晴,霹雳三更吼。 雨云收,人约否?知了鸣高柳。独自振蝉衣,望得长相守。
    梅心梅飞阅读 332评论 0 7

友情链接更多精彩内容