一、运行结果显示:
二、求行列式值的方法:可以用行列式的定义或代数余子式来求值。这里,主要有三种方法:1。如果行列式主对角线一侧(右上或左下)的元素都是0,那么行列式的值等于其主对角线元素的乘积。这个行列式叫做三角行列式。2.将行列式某一行(或列)中的所有元素乘以一个常数k,并将其加到另一行(或列)中相应的元素上。行列式的值不变。3.交换行列式的任意两行(或两列),行列式的值改变符号。3.例子:1。求行列式的值
1 2 3
2 3 1
3 1 2
解决方法:1。将第一列中的所有元素乘以-2(因为-2/1=-2),并将其与第二列中相应的元素相加;将第一列中的所有元素乘以-3(因为-3/1=-3),并将它们与第三列中的相应元素相加:
1 0 0
2 -1 -5
3 -5 -7
2.将第二列中的所有元素乘以-5(因为-(-5/-1)=-5),并将其与第三列中的相应元素相加:
1 0 0
2 -1 0
3 -5 -18
此时主对角线右上方的元素都是0。也就是变成了三角行列式。
3.求主对角线元素的乘积得到-18,所以这个行列式的值是-18。
四。求任意行列式的值:
a11 a12 a13 …… a1n
a21 a22 a23 …… a2n
a31 a32 a33 …… a3n
……aii……ain
安1安2安3 ……安
1.先把第一列的所有元素乘以常数-a12/a11,再加到第二列对应的元素上,就可以把a12变成0;将第一列的所有元素乘以-a13/a11,加到第三列对应的元素上,则a13可变为0;......,将第一列的所有元素乘以-a1n/a11,再加到第n列对应的元素上,这样a1n就可以变成0了。
2.同样,将第二列中的所有元素乘以常数-a23/a22,并将其加到第三列中对应的元素上,则a23可以变成0;…,直到a2n变成0。
3.以此类推,主对角线右上方的所有元素都可以变成0,成为三角形行列式。
4.如果主对角线上的元素aii本身为0,从它开始的同一行中发现aij不为0,将J列的元素全部与I列的元素互换,整个行列式值一次变为负数。最后,将原始行列式转化为以下三角行列式:
a11 0 0 0 …… 0
a21 a22 0 0 …… 0
a31 a32 a33 0 …… 0
……aii…… 0
安1安2安3 ……安
行列式的值最终等于:a11*a22*a33*…aii…*ann。
5.求任意行列式的值,用C语言编程如下:
//求n阶行列式的值(其中n为自然数,n=2)
#包含stdio.h
#定义N 50 //常数N应该大于行列式的阶N
int main
{ int i,j,k,n;//循环变量i j k,行列式的阶n
float hlshi(float[N][N],int);//查找行列式值函数的原型声明
float a[N][N]={},x0;//用数组a[N][N]保存行列式的n*n个系数,用变量x0保存行列式的值。
printf( # 34;请输入行列式n的顺序: # 34;);
scanf( # 34;% d # 34,n);
printf( # 34;请输入秩行列式的n*n个元素(用空)分隔):\ n # 34);
for(I = 1;I = n;i++)
{ for(j = 1;j = n;j++){ scanf( # 34;% f # 34,a[I][j]);}
printf( # 34;简化的行列式是:\ n # 34);
x0=hlshi(a,n);//调用函数求行列式的值x0,其中a,n为实际参数
printf( # 34;这个行列式的值是:%1.3f。,x0);//输出
//查找行列式值的函数:
Float hlshi (float b [n] [n],int n)//函数的第一行,其中b,n为形参。
{ int i,j,k,m = 1;//m标记交换次数(偶数+奇数-)
浮点q,t,x;
for(I = 1;I = n;i++)
{ j = I;//主对角线元素具有相同的行和列标签。
while(b[i][i]==0j!=n)//如果主对角线元素b[i][i]=0,则与后列交换:
{ j++;m =-m;//看下一列,把值交换一次变成负数
for(k = 1;k = n;k++){ t = b[k][I];b[k][I]= b[k][j];b[k][j]= t;}//交换i j两列
for(j = I+1;j = n;++)//使右上三角形(对角线元素的右边)全为0:
{ if(b[i][j]==0)继续;//继续到已经为0的下一项
q =-b[I][j]/b[I][I];//求权重因子q=-j(列)/i(列)
for(k = I;k = n;k++)
{ b[k][j]+= b[k][I]* q;//倒数之和为0(j-i*j/i=0)
//下面五行的程序可以输出简化成三角行列式的结果(不需要显示可以删除):
for(j = 1;j = n;j++)
{ printf( # 34;% 9f # 34,b[I][j]);
printf( # 34;\ n # 34);
x = m;//确定符号
for(I = 1;I = n;i++){ x * = b[I][I];}//求主对角线的乘积
return(x);//返回行列式的值