您现在的位置是:主页 > news > 建材网站建设哪家/网络营销讲师
建材网站建设哪家/网络营销讲师
admin2025/5/10 11:00:56【news】
简介建材网站建设哪家,网络营销讲师,宝山网站建设方案,高端网站建设 深圳算法描述 对于一个N阶的方阵,则它的行列式的值为,这里我们引入余子式的概念,在线性代数的课本中它的定义如下:在N阶行列式中,把元素所在的第i行和第j列划去后,留下了的N-1阶行列式叫元素的余子式࿰…
算法描述
对于一个N阶的方阵,则它的行列式的值为
,这里我们引入余子式的概念,在线性代数的课本中它的定义如下:在N阶行列式中,把元素
所在的第i行和第j列划去后,留下了的N-1阶行列式叫元素
的余子式,记作
。则方阵A的行列式可以表示为
。对于式子里头的
,它是一个N-1阶的行列式,我们可以按照上述的方法进一步的分解,得到N-2阶的行列式,然后再分解得到N-3阶行列式,一直分解到2阶的行列式,这时2阶的行列式就变的非常的好求了,即
,从这里我们就可以看到这是一个递归求解的过程,因此可以非常方便的用C语言进行实现。
C语言实现代码
/**************************************************************************************** 函数名称:Matrix_det* 输入参数:x指向方阵首地址,N方阵的阶数* 输出参数:行列式的值求和结果* 实现功能:求N阶方阵的行列式的值* 注意事项:需要的动态内存空间最少为:(2*2 + 3*3 + 4*4 + ... + (N-1)*(N-1))*4 = ((N-1)N(2N-1)/6 - 1)*4* N=3时,所需heap大小16字节* N=4时,所需heap大小52字节* N=5时,所需heap大小116字节* N=6时,所需heap大小216字节* N=7时,所需heap大小360字节* N=8时,所需heap大小556字节* N=9时,所需heap大小812字节* N=10时,所需heap大小1136字节* N=11时,所需heap大小1536字节* N=12时,所需heap大小2020字节* N=13时,所需heap大小2596字节* N=14时,所需heap大小3272字节* N=15时,所需heap大小4056字节* N=16时,所需heap大小4956字节* N=17时,所需heap大小5980字节* N=18时,所需heap大小7136字节* N=19时,所需heap大小8432字节* N=20时,所需heap大小9876字节* 所以实际使用时应注意保证heap的空间足够要大于上述的最小值,否则就会导致内存占用爆满,malloc函数调用失败****************************************************************************************/
float Matrix_det(float *x, int N)
{float coff;float det_x;float *sub_x;int i,j;if(N > 2) //当阶数大于2时{det_x = 0;coff = 1;sub_x = (float *)malloc(4*(N-1)*(N-1)); //初始值随机,动态分配N-1阶的数组for(i = 0; i < N; i++){for(j = 0; j< N-1; j++) //提取去除第1行,第i列的数组{if(i == 0) { memcpy((void *)(&sub_x[j*(N-1)]), (void *)(&x[(j+1)*N+1]), 4*(N-1)); } //第0列时else if(i == N-1) { memcpy((void *)(&sub_x[j*(N-1)]), (void *)(&x[(j+1)*N]), 4*(N-1)); } //最后第N-1列时else { memcpy((void *)(&sub_x[j*(N-1)]), (void *)(&x[(j+1)*N]), 4*i);memcpy((void *)(&sub_x[j*(N-1)+i]),(void *)(&x[(j+1)*N+i+1]), 4*(N-1-i)); }}det_x = det_x + coff*x[i]*Matrix_det(sub_x, N-1); //第i个代数余子式求和coff = -coff;}free((void *)sub_x); //使用完后释放内存}else //阶数等于2时{det_x = x[0]*x[3] - x[1]*x[2]; //2阶时}return det_x;
}
以上即为N阶方阵的行列式的求解C语言实现,这里需要说明的是数组的操作都是采用指针的形式,数组在存储器中存储的顺序是从左到右从上到下地址依次递增的。在求解的过程中需要调用malloc函数来动态分配存储空间来存储提取出来的余子式中N-1阶的元素,提取的过程使用memcpy进行数据搬移。这两个函数分别包含在标准头文件stdlib.h和string.h中。对于一个N阶的方阵求解过程中它需要的最小内存空间(malloc使用的是堆(heap)空间)为:这么多个字节。因此在实际使用的时候要考虑使用到的方阵的最大阶数的情况,然后以此为依据合理的分配系统的堆(heap)空间,避免出现堆空间不够用导致程序崩溃。