如何用定义求行列式的值

如何用定义求行列式的值,第1张

一、运行结果显示:

如何用定义求行列式的值,第2张

二、求行列式值的方法:可以用行列式的定义或代数余子式来求值。这里,主要有三种方法: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);//返回行列式的值

欢迎分享,转载请注明来源:聚客百科

原文地址: https://juke.outofmemory.cn/life/608737.html

()
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-07-05
下一篇 2022-07-05

发表评论

登录后才能评论

评论列表(0条)

保存