首页 > 其他分享 >高斯消元学习笔记

高斯消元学习笔记

时间:2023-04-26 22:46:44浏览次数:52  
标签:limits int sum 笔记 学习 消掉 一列 高斯消

一、前言

讲一下高斯-约旦消元法。
它适用于处理 \(n\) 元 1 次 方程组。
误差较小并且好写。

二、步骤

主要用消元的方式求解,就是一列列处理,每一次处理消掉这一列所有其它的未知数。
处理第 \(i\) 列:

  1. 找到当前这一列的所有系数的绝对值的最大值,确定在第 \(x\) 行。
  2. 如果这一列全是 0,那么无解或者无穷解。
  3. 交换第 \(i\) 行和 \(x\) 行。
  4. 消掉这一列所有其它未知数。

那我们最后可以得到一个矩阵,只有值的那一列和一条斜对角线有系数,除一下就好了。

int main(){
	n=read();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n+1;j++)a[i][j]=read();
	for(int i=1,x=1;i<=n;i++,x=i){
		for(int j=i+1;j<=n;j++)
			if(fabs(a[j][i])>fabs(a[x][i]))x=j;
		if(a[x][i]==0){puts("No Solution");return 0;}
		for(int j=1;j<=n+1;j++)swap(a[i][j],a[x][j]);
		for(int j=1;j<=n;j++)
			if(j!=i){
				double y=a[j][i]/a[i][i];//将第 i 行的系数乘 y 后恰好消掉 a[j][i]
				for(int k=i+1;k<=n+1;k++)a[j][k]-=y*a[i][k];
			}
	}
	for(int i=1;i<=n;i++)printf("%.2f\n",a[i][n+1]/a[i][i]);
	return 0;
}

三、例题

1. 【模板】高斯消元法

模板题。代码如上。

2. [JSOI2008]球形空间产生器

推一下式子就可以了。
假设球心的坐标是 \((x_1,...,x_n)\),那么由题目给出的公式可以知道,\(\sum\limits^n\limits_{i=1}(a_{1,i}-x_i)^2=\sum\limits^n\limits_{i=1}(a_{2,i}-x_i)^2=...=\sum\limits^n\limits_{i=1}(a_{n+1,i}-x_i)^2\)。取出前两个,化简后得到 \(\sum\limits^n\limits_{i=1}a_{1,i}^2-2\sum\limits^n\limits_{i=1}a_{1,i}·x_i=\sum\limits^n\limits_{i=1}a_{2,i}^2-2\sum\limits^n\limits_{i=1}a_{2,i}·x_i\),即 \(\sum\limits^n\limits_{i=1}(a_{2,i}-a_{1,i})·x_i=\frac{\sum\limits^n\limits_{i=1}(a_{2,i}^2-a_{1,i}^2)}{2}\)。

其余同理。直接用高斯消元即可。

点击查看代码
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n+1;i++)
		for(int j=1;j<=n;j++)scanf("%lf",&a[i][j]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			b[i][j]=a[i+1][j]-a[i][j];
			b[i][n+1]+=(a[i+1][j]*a[i+1][j]-a[i][j]*a[i][j])/2.0;
		}
	for(int i=1,x=1;i<=n;i++,x=i){
		for(int j=i+1;j<=n;j++)
			if(fabs(b[j][i])>fabs(b[x][i]))x=j;
		for(int j=1;j<=n+1;j++)swap(b[i][j],b[x][j]);
		for(int j=1;j<=n;j++)
			if(j!=i){
				double y=b[j][i]/b[i][i];
				for(int k=i+1;k<=n+1;k++)b[j][k]-=y*b[i][k];
			}
	}
	for(int i=1;i<=n;i++)printf("%.3f ",b[i][n+1]/b[i][i]);
	return 0;
}

3. P2455 [SDOI2006]线性方程组

标签:limits,int,sum,笔记,学习,消掉,一列,高斯消
From: https://www.cnblogs.com/qwq-qaq-tat/p/17357485.html

相关文章

  • 学习(review)二——CSS(上)
    CSS(层叠样式表)一般通过<styletype="text/css">内部为CSS环境</style>进行编写CSS。使用CSS,您可以控制颜色、字体、文本大小、元素之间的间距、元素的位置和布局、要使用的背景图像或背景颜色、不同设备的不同显示和屏幕大小等等CSS一般用于修饰页面显示效果设计网页的样......
  • 王者荣耀英雄张良技能单词学习---continuous,intercept,battery,suppress 这四个单词
    刚刚用张良拿了首胜言灵·咒令(被动技能)被动:张良对任一敌人造成的相邻两次普攻或技能伤害的时间间隔若小于1.5秒,这两次伤害的间隔时间被视为“连续攻击状态”,该状态每积累满1.2秒,会使该敌人额外承受140(+50%法术加成)点真实伤害,该伤害随英雄等级每级成长10点。这个技能重点是连续,只......
  • Vulnhub靶机笔记01——Billu_b0x
    一、Billu_b0x介绍billu_b0x是vulnhub的一款经典靶机二、安装与环境下载地址:billu_b0x,下载后解压导入即可攻击机:kaili靶机:billu_b0x三、动手1.信息获取nmap扫描(1)主机存活扫描nmap-sn192.168.124.0/24┌──(root㉿kali)-[~]└─#nmap-sn192.168.124.0/24Star......
  • python+playwright 学习-57 svg 元素拖拽
    前言SVG英文全称为ScalablevectorGraphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过​name​()函数来进行定位。本篇讲下关于svg元素的拖拽相关操作。拖拽svg元素如图所示,svg下的circle元素是可以拖动的比如往右拖动100个像素,那么cx的值由原来的cx="100"变成......
  • 最大公约数学习笔记
    一、定义因数/约数:给定一个正整数\(x\),\(x\)的因数/约数就是所有满足\(x\)是\(y\)的正整数倍的\(y\)。最大公因数/最大公约数:给定两个正整数\(a\),\(b\),求一个最大的正整数数\(x\),使得它同时是\(a\)和\(b\)的因数。一般在OI中记为\((a,b)=x\),在数学上记为\(\gc......
  • 构建之法阅读笔记与感悟06
    9.1PM是啥软件团队里除了能写代码、测试代码和画图做设计的成员,还有一类角色,不做上面这些事情但也很重要,我们叫他们项目经理——PMPM的M就是Manager,但是P有这几种:ProductManager、ProjectManager、ProgramManager,在不同的行业和公司,他们的作用各不相同。接下来介绍的是项目经......
  • 华为HCIP学习清单
    华为HCIP学习清单本篇博客用于汇总本人对于华为HCIP-Datacom方向的学习笔记,便于索引.笔记HCIP-ICT实战进阶01-OSPF各类LSA介绍及分析HCIP-ICT实战进阶02-OSPF特殊区域及其他特性HCIP-ICT实战进阶03-OSPF高级特性HCIP-ICT实战进阶04-ISIS原理与配置HCIP-ICT实战进阶05-路......
  • 利用pytorch深度学习框架验证骰子的合格性
    利用pytorch深度学习框架验证骰子的合格性骰子生产的合格性可以用概率来表达,比如每个面出现的概率大概都是1/6。importtorchfromd2limporttorchasd2lfromtorch.distributionsimportmultinomial#多次扔骰子出现每个面的概率服从多项式分布fair_probs=torch.ones(......
  • Django笔记三十一之全局异常处理
    本文首发于公众号:Hunter后端原文链接:Django笔记三十一之全局异常处理这一篇笔记介绍Django的全局异常处理。当我们在处理一个request请求时,会尽可能的对接口数据的格式,内部调用的函数做一些异常处理,但可能还是会有一些意想不到的漏网之鱼,造成程序的异常导致不能正常运行,......
  • Linux笔记
    Linux注:笔记中带有特殊标识,特殊标识仅为作者自己设立,起提醒作用枫染:主要是标识额外的其他命令,或补充命令幻舞:主要是标识命令的其他用法,多用法,或选项寒星:主要是标识快捷方式和键盘操作落霞:主要是标识其他操作或危险命令操作Linux用户Linux的用户有三种:root 普通用户 系统......