记所求行列式为dn
最后一行拆分为:0
0
0
……1
和
ana1
ana2
ana3
……an^2
这样行列式变成两个行列式相加,前者按照最后一行展开为行列式d(n-1),后者先从最后一行提取公因子an,再把最后一行分别乘以-a1,-a2,-a3,……局宽卜,-a(n-1)加到第一行,第巧拦二行,第三行,……,第n-1行,化成一个n阶下三角行列式,对角线元素是1,1,1,……,1,an,所以结果是an^2
所以,dn=d(n-1)+an^2
又d1=a+a1^2,d2=a+a1^2+a2^2,所以
dn=d(n-1)+an^2=d(n-1)+a(n-1)^2+an^2=桐穗……=d1+a2^2+a3^3+……+an^2=1+a1^2+a2^2+a3^3+……+an^2
#include<stdio.h>void main()
{
int n,a,b,y[10],x[10],i,j,temp
float m[10][10],k=1
printf("Input \"n\"")
scanf("%d",&n)
printf("input the matrix:\n")
for(b=1b<=nb++)
{
printf("next row:\n")
for(a=1a<=na++)scanf("%f",&m[a][b])
}
for(b=1b<=nb++)
{
for(a=1a<桐颤=na++)printf("%10f",m[a][b])
printf("\n")
}
printf("\n")
for(i=1i<棚察=ni++){x[i]=1y[i]=i}
for(j=1j<=nj++)while(m[x[j]][j]==0)x[j]++
for(b=nb>=1b--)
for(a=1a<=b-1a++)
if(x[a]>x[a+1])
{
temp=x[a]x[a]=x[a+1]x[a+1]=temp
temp=y[a]y[a]=y[a+1]y[a+1]=temp
k*=-1
}
for(b=1b<=nb++)
{
for(a=1a<=na++)printf("%10f",m[a][y[b]])
printf("\n")
}
printf("链轮茄\n")
for(a=1a<=na++)
for(b=a+1b<=nb++)
if(m[a][y[b]]!=0)
for(i=a+1i<=ni++)
m[i][y[b]]-=m[a][y[b]]*m[i][y[b-1]]/m[a][y[b-1]]
for(b=1b<=nb++)
{
for(a=1a<=na++)printf("%10f",m[a][y[b]])
printf("\n")
}
for(i=1i<=ni++)k*=m[i][y[i]]
printf("the matrix is %f \n",k)
scanf("%d",i)
}
我在刚学c那会写的一个程序,算法不是很优秀,而且有漏洞,希望能给你提供大体思路。
我也帮你找了个别人写的程序,你也去看看吧。也是百度上的。
改变N的值可以求N阶行列派笑式的值#define N 4
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i,j,m,n,s,t,k=1
double a[N][N],f=1,c,x,sn
for (i=0i<Ni++)
for (j=0j<Nj++)
scanf ("%lf",&a[i][j])
for (i=0,j=0i<N&&j<Ni++,j++)
{
if (a[i][j]==0)
{
for (m=ia[m][j]==0m++)
if (m==N)
{
sn=0
printf("detA=%lf\n",sn)
exit(0)
}
else
for (n=jn<Nn++)
{
c=a[i][n]
a[i][n]=a[m][n]
a[m][n]=c
}
k*=(-1)
}
for (s=N-1s>is--)
{
x=a[s][j]
for (t=jt<灶羡搏Nt++)
a[s][t]-=a[i][t]*(x/隐祥a[i][j])
}
}
for (i=0i<Ni++)
f*=a[i][i]
sn=k*f
printf ("detA=%lf\n",sn)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)