行列式求值

c++ 将行列式化为上三角行列式,并求值。 c++ 将行列式化为上三角行列式,并求值。 #include<stdio.h> #include<iostream> using namespace std; void op(double *a,int row,int col,int temp) { double NUM1,NUM2; NUM1=a[temp*col+temp]; for(int i=temp... 阅读详情

行列式求值

Time Limit(Common/Java):10000MS/30000MS          Memory Limit:65536KByte
Total Submit:363            Accepted:65

Description

求 N 阶方阵对应的行列式值。

Input

输入数据包含多组测试案例。每组测试案例由N(0<N≤10)开头,N表示方阵阶数,后续N行每行包含N个实数。

Output

对于每个测试用例,行列式值打印在单独一行上,保留两位小数。

Sample Input

1
1
2
1 1.2
3 -3.4

Sample Output

1.00
-7.00

Source

南京邮电大学计算机学院首届ACM程序设计大赛(2009)


分析:终于AC了 T_T,学好数学的重要性

矩阵:

1 2 3

4 5 6

7 8 9

的行列式为:1*5*9+4*8*3+2*6*7-(3*5*7-6*8*1-2*4*9)

矩阵的输入简单:scanf("%lf",a[i][j]);

就是求行列式的问题。这里采用递归方法,精妙!

double acrush(double a[][N], int n)
{
	double p[N][N];
	double ret = 0.0;

	if(1 == n)
		return a[0][0];

	for(int k=0;k<n;k++)
	{
		for(int i=0;i<n-1;i++)
		{
			for(int j=0;j<n-1;j++)
			{
				if(i < k)
					p[i][j] = a[i][j+1];
				else //i >= k
					p[i][j] = a[i+1][j+1];
			}
		}
		ret += pow(-1.0, k) * a[k][0] * acrush(p, n-1);
	}
	
	return ret;
}
有个坑爹地方,一开始double p[N][N]; 定义在函数外部(全局定义),导致3阶以上就会出错,因为定义在外部的话,一旦递归作用,会导致二维数组p的元素变化,跳回原来的p的时候就不一样了。其实是个低级错误。

这里引出了一个二维数组形参的问题。

注意:二维数组的列必须是常量且必须写明。当然,也可以这样写:

double acrush(double **a, int n)
但是这样写的话,函数调用的时候就不能acrush(p, n-1) 了,因为p的定义是double p[N][N];

所以必须这样:malloc别忘了头文件:stdlib.h

double **p = (double **)malloc(sizeof(double *)*len);  
	for(int i=0;i<len;i++)  
		p[i] = (double *)malloc(sizeof(double)*len); 

但是递归还是很慢。行列式有很多更加好的方法。大一的线代都忘光了。。。

下面2种方法的代码:

No.1

#include<stdio.h>
#include<math.h>

#define N 10

//行列式求值

double a[N][N];

double acrush(double a[][N], int n)
{
	double p[N][N];
	double ret = 0.0;

	if(1 == n)
		return a[0][0];

	for(int k=0;k<n;k++)
	{
		for(int i=0;i<n-1;i++)
		{
			for(int j=0;j<n-1;j++)
			{
				if(i < k)
					p[i][j] = a[i][j+1];
				else //i >= k
					p[i][j] = a[i+1][j+1];
			}
		}
		ret += pow(-1.0, k) * a[k][0] * acrush(p, n-1);
	}
	
	return ret;
}

int main()
{
	int n;
	while(scanf("%d",&n) != EOF)
	{
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
				scanf("%lf",&a[i][j]);
		}
		printf("%.2lf\n",acrush(a, n));
	}

	return 0;
}


No.2

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 10

//行列式求值

double acrush(double **a, int n)
{
	double ret = 0.0;
	int len = n-1;

	double **p = (double **)malloc(sizeof(double *)*len);  
	for(int i=0;i<len;i++)  
		p[i] = (double *)malloc(sizeof(double)*len); 

	if(1 == n)
		return a[0][0];

	for(int k=0;k<n;k++)
	{
		for(int i=0;i<len;i++)
		{
			for(int j=0;j<len;j++)
			{
				if(i < k)
					p[i][j] = a[i][j+1];
				else //i >= k
					p[i][j] = a[i+1][j+1];
			}
		}
		ret += pow(-1.0, k) * a[k][0] * acrush(p, n-1);
	}

	for(int i=0;i<len;i++) 
		free(*(p+i)); 
	free(p); 

	return ret;
}

int main()
{
	double a[N][N];
	int n;
	while(scanf("%d",&n) != EOF)
	{
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
				scanf("%lf",&a[i][j]);
		}
		double **p = (double **)malloc(sizeof(double *)*n);  
		for(int i=0;i<n;i++) 
			p[i] = a[i]; 
		printf("%.2lf\n",acrush(p, n));
	}

	return 0;
}






高斯消元与行列式求值 高斯消元抹消了行列式递归定义中复杂的下标操作或者大幅的空间占用 阅读详情

相关推荐

Java实现行列式求值的高斯消元法

行列式,作为线性代数中的核心概念,是反映线性方程组、矩阵理论性质和解决线性问题的重要数学工具。它不仅仅是一个数值表达式,更是一个包含多重信息的集合。在几何中,行列式可以表示向量构成的平行多面体的体积。在代数中,行列式与矩阵的逆、秩等特性紧密相连,对于求解线性方程组、计算矩阵特征值等问题至关重要。理解行列式的定义及其背后的数学原理,对于IT行业中的算法工程师、数据分析专家以及科研工作者来说,不仅是理论基础的掌握,更是实践能力的提升。高斯消元法是一种在数值线性代数中用于求解线性方程组的算法。

weixin_35294091的博客 1053

矩阵行列式的计算

double hls(double *Metrix, int n) { double hls1=0; int i,j,k; double temp1,temp2; for(j=0;j { temp1=1.0;  for(k=0;k  {     if((k+j         temp1*=Metrix[k*n+k+j]; if((k+j)>n||(k+j)==n)

qq_32261049的博客 2009

别再手动翻译PDF了!手把手教你用Zotero PDF Translate插件搞定外文文献(附最新GitHub下载链接)

本文详细介绍如何利用Zotero PDF Translate插件高效翻译外文文献,包括插件安装、配置及多引擎对比。通过划词翻译、段落翻译和全文翻译功能,显著提升科研工作效率,特别适合处理大量英文PDF文献的研究人员。

weixin_33712987的博客 772

行列式的计算方法(含四种,看完就会!)

行列式的计算 前言 一、对角线法 二、代数余子式法 三、等价转化法 四、逆序数法 总结 本文主要讲述行列式的求解方法,所以本文侧重于方法的讲解,而并非推导。主要思路为从三阶行列式举例,再过渡到高阶行列式的通用方法

weixin_46664967的博客 83万+

求助:有没有基于pscad的锂电池仿真模型

求助:有没有基于pscad的锂电池仿真模型 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变没有 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写...

qq_38922523的博客 1222

从.bib到.bbl:手把手教你搞定LaTeX参考文献的完整流程

本文详细介绍了从.bib到.bbl的LaTeX参考文献处理完整流程,包括文献数据库构建、样式选择、主文档配置、编译流程及问题排查。特别针对.bib、.bbl等文件的操作提供了实战解决方案,帮助用户高效管理学术文献引用,适用于各类学术写作场景。

weixin_29292431的博客 285

行列式求值(C++)

C++实现行列式计算

m0_50793313的博客 3365

S32DS新建工程、编译调试下载、导入工程详细介绍

新建了一个工程之后,下面简单介绍下基本的UI界面。其中最左下角那个是界面,这个界面很重要,是图形化配置界面,然后可以根据这些配置自动生成代码。其中,左边那些配置文件,都是系统帮我们创建好了的,我们其实可以直接用就行。有PE工具的调试,以及Jlink工具的调试。我目前使用到PE工具调试可以查看寄存器值,而Jlink调试查看不了寄存器值。连接了开发板之后,点击Debug就可以吧程序下载到芯片上了,而且可以进入到调试界面。

luobeihai的博客 2万+

行列式基础知识

行列式是一个数学概念,主要用于线性代数中,它是一个可以从方阵(即行数和列数相等的矩阵)形成的一个标量(即一个单一的数值)。1.以3阶行列式为例3阶行列式按行展开后为6项,每项为3个不同行不同列的3个元素相乘aij元素的行标i都是123的自然排列aij元素列标j则为:123、231、312、321、213、132,总数为3!=6N(123) = 0 偶数N(231) = 1 + 1 = 2 偶数N(312) = 2 偶数N(321) = 2 + 1 = 3 奇数。

m0_73723097的博客 5680

2025华为od机试真题B卷【版本管理】JavaScript实现

在 软件版本管理中,版本号由点分割的数字组成,例如 1.2.3 和 2.8。现在,你需要编写一个函数,计算两个版本号之间的可用版本号个数。这里的可用版本号指的是所有满足 version1<x<version2的版本号x的个数。若 version1 >=version2 返回0.,

MISAYAONE的博客 254

cesium 实现经纬线绘制和经纬度标注

废话不对数直接上线效果图及代码 1.效果图 2.实现代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=

一碗老面的博客 2569

行列式求值Java语言实现———线性代数

行列式求值对于刚刚学习完线性代数的大学生再熟悉不过了,同样于上一篇文章,这也是我们学习线性代数这个课程必须要掌握的知识点,但对于许多比较难算的题目,我依然想用代码帮助解决计算的问题,这种通过写代码来帮助我解决学习上的问题,能很大程度的提高我们写代码的能力,对于行列式的化简写代码的过程就简单多了。............

A198237645_的博客 2421

PyTorch生成式人工智能(7)——生成对抗网络(Generative Adversarial Network, GAN)实践详解

生成对抗网络 (Generative Adversarial Network, GAN) 最早由 Ian Goodfellow 于 2014 年提出,其中生成器试图创建与真实样本无法区分的数据样本,而判别器则试图区分生成器生成的样本与真实样本。在本节中,我们将介绍 GAN 的理论基础。然后,介绍如何使用 PyTorch 从零开始构建 GAN,以便了解所有细节,深入理解 GAN 的内部工作原理,为后续讨论 GAN 的其他更高级内容奠定基础,比如生成高分辨率图像或逼真的音乐。

盼小辉丶的博客 1万+

高斯消元与行列式求值 part1

两道模板题,思路与算法却是相当经典。 先说最开始做的行列式求值,题目大致为给一个10*10的行列式,求其值 具体思路(一开始看到题我的思路): 1.暴算,把每种可能组合试一遍,求逆序数,做相应加减运算,一看就知道不是正解。 2.暴算2.0 用递归和代数余子式计算,但同样需计算逆序数。 3.一看就是知道是正解高斯消元,将行列式消为上三角,将对角线相乘。 看看代码: #include...

weixin_30681615的博客 338

行业变革下的功能安全落地痛点3:高阶智驾安全责任转移 —— 从 “人为中心” 到 “机器主责” 的产业阵痛

文章围绕高阶智驾(L3 级)落地挑战,探讨安全责任从 “人控” 向 “机控” 转移的本质、技术短板导致的责任模糊、全球法规实践及技术 - 法规 - 保险的破局路径。

my9111526 126

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

二维数组之行列式求值

二维数组之行列式求值直接上代码代码如下: 直接上代码 本人之前都是做投资的,9月开始学java。在大佬门前班门弄斧,见笑了。。 老年人再出发不容易。。轻拍。 代码如下: 去[博客设置](https://mp.csdn.`在这里插入代码片`net/console/configBlog)页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 `代码片`.在这里插入代码片 ```javascript // An highlighted block var foo = 'bar'; ...

lecherme的博客 1475

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

uva 684 Integral Determinant 行列式求值

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=625 题意:给出一个n阶行列式,求值。 思路:模板参考http://blog.youkuaiyun.com/zhoufenqin/article/details/7779707: ...

weixin_30329623的博客 140

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

矩阵行列式求值

矩阵 行列式

2301_77896761的博客 167

《P7112 【模板】行列式求值》

摘要:本文实现了一个计算n阶行列式模p值的算法。输入包括n和p,以及n×n的矩阵元素。使用高斯消元法将矩阵转化为上三角矩阵,过程中处理行列交换对行列式符号的影响,并利用模运算保持数值范围。最终输出行列式模p的最小自然数值。算法时间复杂度为O(n³),适用于n≤600的情况。代码包含快速输入优化,处理大数取模运算。

Jasmine_llq的博客 153

【算法】n阶行列式求值 全排列

行列式求值&amp;amp;amp;&amp;amp;amp;全排列 个人感觉自己写的行列式求值的程序与全排列的程序有几分神似,所以就把它们放到一起啦。 先来看求n阶行列式的程序 #include&amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;stdlib.h&amp;amp;gt; //C语言初学者,欢迎大家指正 void show(int **p,int size)

loxs 2030

c语言行列式求值函数,行列式的求值(C语言版).doc

行列式的求值(C语言版)行列式的求值(C语言版)本程序用C语言实现行列式的求值,由于采用的是行列式中最原始的公式求解,其运行效率并不十分高,但可以保证只要电脑能跑下来,就可以算对.本人验证表明,对9阶以内的运行效果还可以.10阶就不好说了.本程序实际上是分二部分,第一部分是程序求0到n-1或1到n的全排列,并采用文件操作,将排列结果保存在一个文件中;第二部分是用数学方法求行列式的值,并从文件中读取...

weixin_35462903的博客 709
上一篇: IBM技术俱乐部主席竞选
下一篇: 数据离散化 & 线段树
tcherry
博客等级 码龄16年 46粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值