重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
用递归写了一个求n阶行列式的算法。用4阶行列式举例:
玛纳斯网站建设公司创新互联,玛纳斯网站设计制作,有大型网站制作公司丰富经验。已为玛纳斯超过千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的玛纳斯做网站的公司定做!
1 2 3 4
5 6 7 8
4 3 2 1
8 7 6 5
为了方便计算,我没有用二维数组。
把矩阵用一维数组A存起来,并指出维数n。
第i行第j列的元素的下标是i*n+j
#include stdio.h
#include stdlib.h
//求余子式M的函数,参数是矩阵,维数,i行,j列
//比如M(A, 4, 0, 0)表示去掉第1列,第1列的元素后剩下的数组成一个数组
//6 7 8
//3 2 1
//7 6 5
//然后用A[i*n+j]和余子式的值相乘
int* M(int *A, int n, int i, int j)
{
int *B= (int*)malloc((n - 1)*sizeof(int));
int k = 0;
for (int k1 = 0; k1 n; ++k1)
{
if (k1 != i)
for (int k2 = 0; k2 n; ++k2)
if (k2 != j)
B[k++] = A[k1*n + k2];
}
return B;
}
int det(int A[], int n)
{
int sum = 0, N = n*n;
if (n == 1)
sum = A[0];
else
{
for (int i = 0; i n; ++i)
{
int *tmp = M(A, n, i, 0);
int Aij = A[i*n]*det(tmp, n - 1);
if (i%2 != 0)
Aij = -Aij;
sum = sum + Aij;
}
}
return sum;
}
int main()
{
int A[]={2,1,3,-1,1,-5,1,1,2,3,2,2,0,-1,4,2};
printf("%d\n", det(A, 4));
return 0;
}
度量空间变换的比例,拉伸或缩放,如果det=2,则将空间面积变为原来2倍,det=0,说明将空间压缩到一条直线或者是一个点上。如果det为负值,说明空间定向发生了翻转(类似反面)
矩阵乘法与线性变换复合:两个矩阵相乘的几何意义:两个线性变换相继作用,也就是复合的线性变换,先左乘变换再左乘变换。类似于复合函数,从右向左读。矩阵乘法的不可交换性理解:变换的次序,更换不同的变换次序,将得到不同的空间变换结果。
之前的理解可推广到高维空间,如三维空间,三维空间的矩阵相乘在计算机图形学和机器人学应用广泛。
det的意思:det是一个计算机函数,在FreeMat、Matlab中,该函数用于求一个方阵(square matrix)的行列式(Determinant)。
det功能:det为矩阵的行列式值。det计算某一方阵(行列相等的二维数组)的对应行列式值每一矩阼都有一个对应的行列式。行列式是对矩阵表按一定规则进行运算之后所得到的一个数值。
行列式可以确定出对应矩阵是否存在着逆,即确定矩阵的奇异性,可以用来解线性方程组等。当行列式为0或近似于0时,其对应逆矩阵不存在,或虽然存在,但计算机计算出来的结果不正确。
det函数的程序示例:
在FreeMat中的示例:
-- A = [0 0 0; 1 2 3; 4 5 6];-- det(A),ans =0。
-- B = [1 2; 3 4];-- det(B),ans =-2。