利用递归与行列式展开定理求行列式的值(数组指针版)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用递归与行列式展开定理求行列式的值(数组指针版)相关的知识,希望对你有一定的参考价值。

今天用数组指针改写了一下行列式求值程序,代码:

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 int main()
 5 {
 6     int rank;
 7     void setDet(double*,int);
 8     double valDet(double*,int);
 9     cout<<"输入行列式的阶数:";
10     cin>>rank;
11     double *DetPtr=new double[rank*rank];
12     setDet(DetPtr,rank);
13     cout<<"行列式的值为:"<<valDet(DetPtr,rank)<<endl;
14     return 0;
15 }
16 void setDet(double *detPtr,int rank)
17 {
18     cout<<"输入行列式:"<<endl;
19     int m=rank*rank;
20     for(int i=0;i<m;i++)
21         cin>>detPtr[i];
22 }
23 double valDet( double* detPtr, int rank)
24 {
25     double val=0;
26     if(rank==1) return detPtr[0];
27     for(int i=0;i<rank;i++)                 //计算余子式保存在nextDetPtr[]中 
28     {
29         double *nextDetPtr=new double[(rank-1)*(rank-1)];
30         for(int j=0;j<rank-1;j++)
31             for(int k=0;k<i;k++)
32                 nextDetPtr[j*(rank-1)+k]=detPtr[(j+1)*rank+k];
33         for(int j=0;j<rank-1;j++)
34             for(int k=i;k<rank-1;k++)
35                 nextDetPtr[j*(rank-1)+k]=detPtr[(j+1)*rank+k+1];
36         val+=detPtr[i]*valDet(nextDetPtr,rank-1)*pow(-1.0,i);
37     }
38     return val;
39 }

 

以上是关于利用递归与行列式展开定理求行列式的值(数组指针版)的主要内容,如果未能解决你的问题,请参考以下文章

如何用c语言来求一个四阶行列式的值

方阵求值——上三角行列式定义(康拓展开求值)

老笔记整理五:C实现10阶内通过展开代数余子式求行列式的值

拉普拉斯定理的近似公式

java作业利用递归解决问题

n阶行列式的计算方法