鱼C论坛

 找回密码
 立即注册
查看: 1515|回复: 8

[已解决]小白求助 如何计算矩阵行列式的值?

[复制链接]
发表于 2020-10-14 10:45:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问计算矩阵行列式的值的程序该怎么写?
最佳答案
2020-10-14 17:24:48
  1. #include <stdio.h>
  2. #include <math.h>

  3. #define MAX 100

  4. double D(double arr[][MAX], int n);
  5. void Display(double arr[][MAX], int n);

  6. void main()
  7. {
  8.     double arr[MAX][MAX];
  9.     double bak[MAX][MAX];
  10.     double value;
  11.     int n;
  12.     int i,j,k,c;

  13.     printf("Please enter matrix size n(1 <= n < 20):");
  14.     scanf("%d",&n);

  15.     printf("Please input matrix line by line:\n");
  16.     for(i = 0;i < n;i++)
  17.     {
  18.         for(j = 0;j < n;j++)
  19.         {
  20.             scanf("%lf",&arr[i][j]);
  21.         }
  22.     }

  23.     printf("matrix a:\n");
  24.     Display(arr,n);

  25.     /* 保存D(0,i)的值到bak中 */
  26.     for(i = 0;i < n;i++)               /* 处理第1行的每一列元素 */
  27.     {
  28.         for(j = 1;j < n;j++)           /* 逐行处理 */
  29.         {
  30.             for(c = 0,k = 0;k < n;k++) /* 逐列处理 */
  31.            {
  32.                 if(k == i)
  33.                 {
  34.                     continue;
  35.                 }
  36.                 bak[j - 1][c++] = arr[j][k];
  37.             }
  38.         }
  39.         value = D(bak,n-1);

  40.         printf("Submatrix:\n");
  41.         Display(bak,n-1);

  42.         printf("DValue of the Submatrix is %f\n",D(bak,n - 1));
  43.     }

  44.     value = D(arr,n);
  45.     printf("result = %f\n",value);
  46. }

  47. double D(double arr[][MAX],int n)
  48. {
  49.     double bak[MAX][MAX];
  50.     int i,j,k,c;
  51.     double sum = 0;

  52.     if(n == 1)
  53.     {
  54.         return arr[0][0];
  55.     }

  56.     for(i = 0;i < n;i++)                /* 处理第1行的每一列元素 */
  57.     {
  58.         for(j = 1;j < n;j++)            /* 逐行处理 */
  59.         {
  60.             for(c = 0,k = 0;k < n;k++)  /* 逐列处理 */
  61.             {
  62.                 if(k == i)
  63.                 {
  64.                     continue;
  65.                 }
  66.                 bak[j - 1][c++] = arr[j][k];
  67.             }
  68.         }

  69.         /* 计算arr(row,col) * D(row,col)的值 */
  70.         sum += (i % 2 == 0 ? 1 : -1) * arr[0][i] * D(bak,n - 1);
  71.     }
  72.     return sum;
  73. }

  74. void Display(double arr[][MAX],int n)
  75. {
  76.     int i,j;
  77.     printf("");
  78.     for(i = 0;i < n;i++)
  79.     {
  80.         for(j = 0;j < n;j++)
  81.         {
  82.             printf("%10.1lf",arr[i][j]);
  83.         }
  84.         printf("\n");
  85.     }
  86. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-14 11:08:26 | 显示全部楼层

你到底是求行列式的值 还是求增广矩阵对应的线性方程组的解

行列式的值np.linalg.det
增广矩阵求解np.linalg.solve
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-14 17:24:48 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <math.h>

  3. #define MAX 100

  4. double D(double arr[][MAX], int n);
  5. void Display(double arr[][MAX], int n);

  6. void main()
  7. {
  8.     double arr[MAX][MAX];
  9.     double bak[MAX][MAX];
  10.     double value;
  11.     int n;
  12.     int i,j,k,c;

  13.     printf("Please enter matrix size n(1 <= n < 20):");
  14.     scanf("%d",&n);

  15.     printf("Please input matrix line by line:\n");
  16.     for(i = 0;i < n;i++)
  17.     {
  18.         for(j = 0;j < n;j++)
  19.         {
  20.             scanf("%lf",&arr[i][j]);
  21.         }
  22.     }

  23.     printf("matrix a:\n");
  24.     Display(arr,n);

  25.     /* 保存D(0,i)的值到bak中 */
  26.     for(i = 0;i < n;i++)               /* 处理第1行的每一列元素 */
  27.     {
  28.         for(j = 1;j < n;j++)           /* 逐行处理 */
  29.         {
  30.             for(c = 0,k = 0;k < n;k++) /* 逐列处理 */
  31.            {
  32.                 if(k == i)
  33.                 {
  34.                     continue;
  35.                 }
  36.                 bak[j - 1][c++] = arr[j][k];
  37.             }
  38.         }
  39.         value = D(bak,n-1);

  40.         printf("Submatrix:\n");
  41.         Display(bak,n-1);

  42.         printf("DValue of the Submatrix is %f\n",D(bak,n - 1));
  43.     }

  44.     value = D(arr,n);
  45.     printf("result = %f\n",value);
  46. }

  47. double D(double arr[][MAX],int n)
  48. {
  49.     double bak[MAX][MAX];
  50.     int i,j,k,c;
  51.     double sum = 0;

  52.     if(n == 1)
  53.     {
  54.         return arr[0][0];
  55.     }

  56.     for(i = 0;i < n;i++)                /* 处理第1行的每一列元素 */
  57.     {
  58.         for(j = 1;j < n;j++)            /* 逐行处理 */
  59.         {
  60.             for(c = 0,k = 0;k < n;k++)  /* 逐列处理 */
  61.             {
  62.                 if(k == i)
  63.                 {
  64.                     continue;
  65.                 }
  66.                 bak[j - 1][c++] = arr[j][k];
  67.             }
  68.         }

  69.         /* 计算arr(row,col) * D(row,col)的值 */
  70.         sum += (i % 2 == 0 ? 1 : -1) * arr[0][i] * D(bak,n - 1);
  71.     }
  72.     return sum;
  73. }

  74. void Display(double arr[][MAX],int n)
  75. {
  76.     int i,j;
  77.     printf("");
  78.     for(i = 0;i < n;i++)
  79.     {
  80.         for(j = 0;j < n;j++)
  81.         {
  82.             printf("%10.1lf",arr[i][j]);
  83.         }
  84.         printf("\n");
  85.     }
  86. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-14 21:52:35 | 显示全部楼层
帮你顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-15 09:33:19 | 显示全部楼层
如果满意了,回来选个最佳答案哈~~你这个举手之劳的动作不需要你付出任何(鱼币、荣誉值、积分),由系统给我们进行奖励:鱼币+3,荣誉+2,技术+1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-17 01:03:30 | 显示全部楼层
还没满意?帮你顶上去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-17 14:40:32 | 显示全部楼层
还有什么不满意的,你倒是说话呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-17 19:48:06 | 显示全部楼层
风过无痕1989 发表于 2020-10-17 14:40
还有什么不满意的,你倒是说话呀

不好意思我才看到,我明白了谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-17 19:49:43 | 显示全部楼层
eobeom 发表于 2020-10-17 19:48
不好意思我才看到,我明白了谢谢

明白了,就给个最佳答案呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 04:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表