您现在的位置是:主页 > news > 建材网站建设哪家/网络营销讲师

建材网站建设哪家/网络营销讲师

admin2025/5/10 11:00:56news

简介建材网站建设哪家,网络营销讲师,宝山网站建设方案,高端网站建设 深圳算法描述 对于一个N阶的方阵,则它的行列式的值为,这里我们引入余子式的概念,在线性代数的课本中它的定义如下:在N阶行列式中,把元素所在的第i行和第j列划去后,留下了的N-1阶行列式叫元素的余子式&#xff0…

建材网站建设哪家,网络营销讲师,宝山网站建设方案,高端网站建设 深圳算法描述 对于一个N阶的方阵,则它的行列式的值为,这里我们引入余子式的概念,在线性代数的课本中它的定义如下:在N阶行列式中,把元素所在的第i行和第j列划去后,留下了的N-1阶行列式叫元素的余子式&#xff0…

算法描述

        对于一个N阶的方阵A=\begin{bmatrix} a_{11} &a_{12} &... &a_{1N} \\ a_{21} &a_{22} &... &a_{2N} \\ ...&... &... &... \\ a_{N1}&a_{N2} &... &a_{NN} \end{bmatrix},则它的行列式的值为\left |A \right |=a_{11}\begin{vmatrix} a_{22}&a_{23} &... &a_{2N} \\ a_{32}&a_{33} &... &a_{3N} \\ ...&... &... &... \\ a_{N2}&a_{N3} &... &a_{NN} \end{vmatrix} - a_{12}\begin{vmatrix} a_{21}&a_{23} &... &a_{2N} \\ a_{31}&a_{33} &... &a_{3N} \\ ...&... &... &... \\ a_{N1}&a_{N3} &... &a_{NN} \end{vmatrix}+...+(-1)^{N+1}a_{1N}\begin{vmatrix} a_{21}&a_{22} &... &a_{2,N-1} \\ a_{31}&a_{31} &... &a_{3,N-1} \\ ...&... &... &... \\ a_{N1}&a_{N2} &... &a_{N,N-1} \end{vmatrix},这里我们引入余子式的概念,在线性代数的课本中它的定义如下:在N阶行列式中,把元素a_{i,j}所在的第i行和第j列划去后,留下了的N-1阶行列式叫元素a_{i,j}的余子式,记作M_{i,j}。则方阵A的行列式可以表示为\left | A \right |=\sum_{j=1}^{N}(-1)^{j+1}a_{1,j}M_{1,j}。对于式子里头的M_{1,j},它是一个N-1阶的行列式,我们可以按照上述的方法进一步的分解,得到N-2阶的行列式,然后再分解得到N-3阶行列式,一直分解到2阶的行列式,这时2阶的行列式就变的非常的好求了,即\begin{vmatrix} a_{11} &a_{12} \\ a_{21}&a_{22} \end{vmatrix}=a_{11}a_{22}-a_{12}a_{21},从这里我们就可以看到这是一个递归求解的过程,因此可以非常方便的用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.hstring.h中。对于一个N阶的方阵求解过程中它需要的最小内存空间(malloc使用的是堆(heap)空间)为:(2^{2}+3^{2}+...+(N-1)^{2})\times 4=((N-1)N(2N-1)/6-1)\times 4这么多个字节。因此在实际使用的时候要考虑使用到的方阵的最大阶数的情况,然后以此为依据合理的分配系统的堆(heap)空间,避免出现堆空间不够用导致程序崩溃。