求行列式的值C语言

qccxw 生活常识评论152字数 1942阅读模式

一、运行结果展示:

文章源自玩技e族-https://www.playezu.com/145996.html

二、求行列式值的方法:可以利用行列式的定义或代数余子式求值,这里是利用行列式的性质求值,主要有三条:1.如果行列式主对角线一侧(右上侧或左下侧)的元素全为0,那么该行列式的值等于其主对角线元素之积。并把这样的行列式称为三角行列式。2.给行列式的某一行(或一列)的所有元素都乘以常数k,加到另一行(或列)的对应元素上,行列式的值不变。3.交换行列式的任两行(或两列),行列式的值变号。三、举例: 1.求行列式 的值文章源自玩技e族-https://www.playezu.com/145996.html

1 2 3文章源自玩技e族-https://www.playezu.com/145996.html

2 3 1文章源自玩技e族-https://www.playezu.com/145996.html

3 1 2文章源自玩技e族-https://www.playezu.com/145996.html

解:1.给第一列元素都乘以 -2(因-2/1=-2),加到第二列对应元素上;再给第一列元素都乘以 -3(因-3/1=-3),加到第三列对应元素上得:文章源自玩技e族-https://www.playezu.com/145996.html

1 0 0文章源自玩技e族-https://www.playezu.com/145996.html

2 -1 -5文章源自玩技e族-https://www.playezu.com/145996.html

3 -5 -7文章源自玩技e族-https://www.playezu.com/145996.html

2.给第二列元素都乘以 -5(因 -(-5/-1)=-5),加到第三列对应元素上得:文章源自玩技e族-https://www.playezu.com/145996.html

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

an1 an2 an3 …… ann

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

an1 an2 an3 …… ann

则该行列式的值最后等于:a11*a22*a33*…aii…*ann.

五、求任意行列式的值用C语言编程如下:

//求n阶行列式的值(其中n为自然数,且n=2)

#include stdio.h

#define 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("请输入阶行列式的阶数n:");

scanf("%d",n);

printf("请输入阶行列式的n*n个元素(相互用空格隔开):n");

for(i=1;i=n;i++)

{ for(j=1;j=n;j++) { scanf("%f",a[i][j]);}

printf("化简后的行列式为:n");

x0=hlshi(a,n);//调用函数求行列式的值x0,这里a,n为实际参数

printf("此行列式的值为:%1.3f.n",x0); //输出

//求行列式值的函数:

float hlshi(float b[N][N],int n) //函数首部行 ,这里b,n为形式参数

{ int i,j,k,m=1;//m标记交换次数(偶+ 奇-)

float 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;j++) //使右上三角形(对角线元素右侧)全为0:

{ if(b[i][j]==0) continue; //已经是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("%9f ",b[i][j]);

printf("n");

x=m; //确定正负号

for(i=1;i=n;i++) { x*=b[i][i];} //求主对角线之积

return (x); //返回行列式的值

玩技站长微信
添加好友自动发送入群邀请
weinxin
rainbow-shownow
玩技官方公众号
官方微信公众号
weinxin
PLAYEZU
 
  • 版权提示:本站仅供存储任何法律责任由作者承担▷诈骗举报◁▷新闻不符◁▷我要投稿◁
    风险通知:非原创文章均为网络投稿真实性无法判断,侵权联系2523030730
    免责声明:内容来自用户上传发布或新闻客户端自媒体,切勿!切勿!切勿!添加联系方式以免受骗。
  • 原创转载:https://www.playezu.com/145996.html
    转载说明: 点我前往阅读>>>
匿名

发表评论

匿名网友
确定