社区
C语言
帖子详情
各位前辈 帮个忙阿 我真快急死了
hksblct
2006-11-26 07:03:20
要用c编一个计算n阶行列式值的程序
可惜我新手 说来不怕笑 都想了一个星期了
还是没想出 哪位大哥 能给个代码 并解释一下吗
小弟不胜感激
...全文
246
11
打赏
收藏
各位前辈 帮个忙阿 我真快急死了
要用c编一个计算n阶行列式值的程序 可惜我新手 说来不怕笑 都想了一个星期了 还是没想出 哪位大哥 能给个代码 并解释一下吗 小弟不胜感激
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hksblct
2006-11-26
打赏
举报
回复
4
1 2 3 4
5 0 0 0
-1 2 3 6
5 -1 1 -2
正确应该是50 可先按上面的是-20 不理解为什么
hksblct
2006-11-26
打赏
举报
回复
刚才一直在改
可惜有三个错误数据
medie2005
2006-11-26
打赏
举报
回复
对不起,上次发的有错。下面是改正后的。
代码:
//------------------------------------------
// 行列式求值
//
// 本程序使用降阶法, 用递归实现.
//
//
//------------------------------------------
#include <stdio.h>
#define MAX 20
float value(int n,float *a)
{
float sum=0;/*符号为+*/
float sub=0;/*符号为-*/
int i;
if(!n)
return 0.0;
if(n==1)
return a[0];
if(n==2)
return a[0]*a[3]-a[1]*a[2];
for(i=0;i<n;i++)
{
{
float total=1.0;
int row=0,con;
int num=0;
for(con=i;con<n;con++,row++)
{
total*=a[row*n+con];
num++;
}
row=num;
for(con=0;row<n&&num!=n;con++,row++)
total*=a[row*n+con];
sum+=total;
}
{
float total=1.0;
int row=0,con;
int num=0;
for(con=i;con>=0;con--,row++)
{
total*=a[row*n+con];
num++;
}
row=num;
for(con=n-1;row<n&&num!=n;con--,row++)
total*=a[row*n+con];
sub+=total;
}
}
return sum-sub;
}
void main()
{
int n; /*阶数*/
int i;
float a[MAX*MAX];
float result;
printf("\n输入阶数(<%d):",MAX);
scanf("%d",&n);
printf("\n依序输入行列式(行展开的顺序):\n");
for(i=0;i<n*n;i++)
scanf("%f",&a[i]);
printf("\n******输入的行列式******\n");
for(i=0;i<n*n;i++)
{
printf("%f\t",a[i]);
if(i%n==n-1) printf("\n");
}
result=value(n,a);
printf("***行列式结果为:%f \n",result);
}
jixingzhong
2006-11-26
打赏
举报
回复
晕啊 ~~
我的意思是 输入 n
是行列式的阶数 然后输入行列式的元素 输出行列式的制
n<10就行
===========
基本就不需要改了啊,
注意一下输入数据格式就足够了 ...
hksblct
2006-11-26
打赏
举报
回复
呵呵 这个也改过 可惜就是没弄好
medie2005
2006-11-26
打赏
举报
回复
楼主看下面的合适不?
代码:
//------------------------------------------
// 行列式求值
//
// 本程序使用降阶法, 用递归实现.
//
//
//------------------------------------------
#include <stdio.h>
#define MAX 20
float value(int n,float *a)
{
float sum=0;/*符号为+*/
float sub=0;/*符号为-*/
int i;
if(n==0)
return 0.0;
if(n==1)
return a[0];
if(n==2)
return a[0]*a[3]-a[1]*a[2];
for(i=0;i<n;i++)
{
{
float total=1.0;
int row=0,con;
int num=0;
for(con=i;con<n;con++,row++){
total*=a[row*n+con];
num++;}
row=num;
for(con=0;row<n&&num!=n;con++,row++)
total*=a[row*n+con];
sum+=total;
}
{
float total=1.0;
int row=0,con;
int num=0;
for(con=i;con>=0;con--,row++)
{
total*=a[row*n+con];
num++;
}
row=num;
for(con=n-1;row<n&&num!=n;con--,row++)
total*=a[row*n+con];
sub+=total;
}
}
return sum-sub;
}
int main()
{
int n; /*阶数*/
int i;
float a[MAX*MAX];
float result;
printf("\n输入阶数:");
scanf("%d",&n);
printf("\n依序输入行列式(行展开的顺序):\n");
for(i=0;i<n*n;i++)
scanf("%f",&a[i]);
printf("\n******输入的行列式******\n");
for(i=0;i<n*n;i++)
{
printf("%f\t",&a[i]);
if(i%n==n-1)
printf("\n");
}
result=value(n,a);
printf("***行列式结果为:%f \n",&result);
return 1;
}
hksblct
2006-11-26
打赏
举报
回复
我也知道有花三角式 和递归 可毕竟是新手阿 怎么也想不出怎么编
hksblct
2006-11-26
打赏
举报
回复
这种算法我看过可惜不好用
这几天几乎把网上能看得都看了
能改的都改了
很多都有错误
我的意思是 输入 n
是行列式的阶数 然后输入行列式的元素 输出行列式的制
n<10就行
youlvconlin
2006-11-26
打赏
举报
回复
网上的一种递归算法
#define N 5
swap(int j,int n,int a[N][N])
// 把a[n][n]中的除n-1行和j列以外的元素放到a的前(n-1)^2个元素中
{ int x,y;
for(y=j;y<n;y++)
for(x=0;x<=n-1;x++)//只交换前n行
a[x][y]=a[x][y+1];
}
int hls(int n, int a[N][N])
//求a的前n^2个元素组成的行列式的值
{ //思路:
//保存b[x][y]=a[x][y];
//把a[n][n]中的n-1行和0列上以外的元素放到a的前(n-1)*(n-1)个元素中
//计算a[n-1][0]*hls(n-1,a)*(-1)^(n-1+0)
//恢复a
//...
////把a[n][n]中的n-1行和j列以外的元素放到a的前(n-1)*(n-1)个元素中
//计算a[n-1][j]*hls(n-1,a)*(-1)^(n-1+j)
//恢复a
//...
//返回上述之和
int x,y,j,s=0,b[N][N];
if(n==2) return a[0][0]*a[1][1]-a[0][1]*a[1][0];
for(j=0;j<n;j++)
{
for(x=0;x<N;x++)
for(y=0;y<N;y++)
b[x][y]=a[x][y];
swap(j,n-1,a);
if((j+n-1)%2) s-=a[n-1][j]*hls(n-1,a);
else s+=a[n-1][j]*hls(n-1,a);
for(x=0;x<N;x++)
for(y=0;y<N;y++)
a[x][y]=b[x][y];
}
return s;
}
main()
{ int a[N][N];
printf("输入%d个数:",N*N);
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
scanf("%d",&a[i][j]);
printf("结果=%d\n",hls(N,a));
}
jackzhhuang
2006-11-26
打赏
举报
回复
什么叫"计算n阶行列式值的程序"???说清楚点好吗?
hksblct
2006-11-26
打赏
举报
回复
大家不屑回答吗?
2012年省赛
本文记录了一次省赛的经历,包括比赛前后的趣事、与队友的互动以及比赛中遇到的挑战。虽然最终获得了金牌,但作者对于比赛过程的感受却颇为复杂。
全球各国汇率、短长期、政策利率数据(1914-2024.3)
根据国际货币基金组织(IMF)等平台的数据,整理了全球各国的兑美元汇率,短期利率、长期利率、政策利率数据,时间范围最新至2024年3月,希望对大家有所帮助 一、数据介绍 数据名称:全球各国汇率、短长期、政策利率数据 数据范围:全球国家 样本数量:76403条 数据年份:1914-2024.3 数据说明:包含兑美元汇率、短期利率、长期利率、政策利率 更新时间:2024年3月 二、指标范围 单位 国家 年份 兑美元汇率-月度均值 兑美元汇率-年度均值 短期利率 长期利率 政策利率
YOLO算法实验室电子仪器电源状态目标检测数据集-60张-标注类别为关机状态-开机状态.zip
YOLOv11目标检测实战项目
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章