首页 > 其他分享 >Note - 高斯消元法(证明略)

Note - 高斯消元法(证明略)

时间:2024-08-16 19:48:28浏览次数:10  
标签:... int text Note 高斯消 array 元法

线性代数

高斯消元法求解线性方程组

高斯消元法是求解线性方程组的经典算法,还可以用于行列式计算、求矩阵的逆。

部分代码 From「SDOI2006」线性方程组

double a[N][N];//a[i][j] 表示第 i 个方程中第 j 个元的系数,a[i][n+1] 为等号右侧的常数项
void Gauss(){
    for(int i=1;i<=n;i++){
        //当前消第 i 个元
        //找第 i 个元系数绝对值最大的行 m
        int mxo=i;
        for(int j=1;j<=n;j++){
            if(fabs(a[j][j])>eps&&j<i)continue;
            if(fabs(a[j][i])>fabs(a[mxo][i]))mxo=j;
        }
        //换第 i 行和第 m 行,使得交换后第 i 行第 i 个系数最大 
        for(int j=1;j<=n+1;j++)
            swap(a[i][j],a[mxo][j]);
        if(fabs(a[i][i])<eps)continue;//无解或有无数解
        for(int j=1;j<=n;j++){//在每一个方程中消元 
            if(i==j)continue;
            double tmp=a[j][i]/a[i][i];//令 tmp 为当前行第 i 个元系数与第 i 行第 i 个元系数的比值
            for(int k=i;k<=n+1;k++)//1~i-1 为 0,可以从 i 开始 
                a[j][k]-=a[i][k]*tmp;
        }
    }
}

理论上 n 个方程出现 n 个元的方程组有定解。

若出现系数全 0 且常数项不为 0,则为无解(方程间矛盾)。

若出现系数全 0 且常数项为 0,则有无数解(n 个方程中有等价的)。

否则矩阵变为

\[\left[\begin{array}{c} k_1 & 0 & 0 & 0 & \text{...} & v_1 \\ 0 & k_2 & 0 & 0 & \text{...} & v_2 \\ 0 & 0 & k_3 & 0 & \text{...} & v_3 \\ \text{...} & \text{...} & \text{...} & \text{...} & \text{...} & \text{...} \\ 0 & 0 & 0 & k_n & \text{...} & v_n \end{array} \right] \]

消去系数可得到简化阶梯形矩阵

\[\left[\begin{array}{c} 1 & 0 & 0 & 0 & \text{...} & v_1/k_1 \\ 0 & 1 & 0 & 0 & \text{...} & v_2/k_2 \\ 0 & 0 & 1 & 0 & \text{...} & v_3/k_3 \\ \text{...} & \text{...} & \text{...} & \text{...} & \text{...} & \text{...} \\ 0 & 0 & 0 & 1 & \text{...} & v_n/k_n \end{array} \right] \]

线性基

高斯消元法。

部分代码 From 「JLOI2015」装备购买

#define ld long double
ld a[N][N];
int cnt;//cnt 表示已求出的线性基数量 
for(int i=1;i<=m;i++){//最多买 m 件装备
    int now=0;//在为求出的方程中找存在第 i 个元且常数项最小的
    for(int j=cnt+1;j<=n;j++){
        if(fabs(a[j][i])>eps&&(now==0||w[j]<w[now]))now=j;
    }
    if(now==0)continue;//可由其它方程表示出(非线性基)
    ++cnt;
    ans+=w[now];
    for(int k=1;k<=m;k++)
        swap(a[now][k],a[cnt][k]);//交换当前第 cnt 行和后面的第 now 行
    swap(w[now],w[cnt]);
    for(int j=1;j<=n;j++){//与高斯消元同
        if(j!=cnt&&fabs(a[j][i])>eps){
            ld t=a[j][i]/a[cnt][i];
            for(int k=i;k<=m;k++)
                a[j][k]-=a[i][k]*t;
        }
    }
}

异或线性基

贪心法一般更实用,如下。

ll base[55],ans;
bool insert(ll x){
    for(int i=50;i>=0;i--)
        if(x>>i&1){
            if(base[i])x^=base[i];
            else{
                base[i]=x;
                return 1;
            }
        }
    return 0;
}

标签:...,int,text,Note,高斯消,array,元法
From: https://www.cnblogs.com/zengzi/p/18359681

相关文章

  • EndNote21.4安装教程(最新版)
    下载链接:https://docs.qq.com/doc/DSVZXTVRvYXdEd21q软件介绍、EndNote文献管理软件是由科睿唯安公司开发的文献管理软件,可用于帮助研究人员管理和组织参考文献、引用和注释,从文献检索、组织科研活动、撰写论文,到发表文章和共享科研成果,助力机构用户加速科研流程。EndNote......
  • 禁止使用 @NotEmpty 注解
    先上结论:@NotEmpty是一个容易让人产生误解的注解,因为他不是一个原子注解;@NotEmpty注解作用于string的话,很鸡肋,没有@NotBlank更简单暴力,容易理解;避免出现空格的问题;空格也没有什么具体业务场景;@NotEmpty作用于list的话也是很鸡肋,不如:@NotNull+@Size灵活容易理解;**......
  • 8个快速提升工作效率的印象笔记(Evernote)使用技巧,你掌握了吗?
    印象笔记(Evernote)是一款强大的笔记软件,它可以帮助用户更好地组织和管理信息。为了提升使用印象笔记的效率,以下是几个实用的技巧:1.快速记录想法1.1快速创建笔记印象笔记的电脑和手机客户端都有快速创建笔记的功能。在主屏向下滑动,可以在通知栏中添加笔记。如果下滑后没有......
  • 详细揭秘:特殊图高斯消元
    树上高斯消元给你一颗树,某些点为终止结点,求从每个点开始随机游走走到某个终止节点的期望时间。从叶子开始将\(f(u)\)表示为\(k(u)f(\text{fa}(u))+b(u)\),带回\(f(\text{fa}(u))\)的方程中将\(f(u)\)消掉即可。DAG上高斯消元可重集/reset有一个可重集\(S\),每一......
  • 提升效率的印象笔记(Evernote)使用指南
    印象笔记(Evernote)是一个功能强大、跨平台的笔记管理工具,它不仅能帮助你记录日常笔记,还可以用于整理工作计划、管理项目、存储灵感和信息等。为了最大化地提高你的生产力,以下将介绍一些高效使用印象笔记的技巧,帮助你充分发挥其潜力。一、入门基础:理解印象笔记的基本概念1.1笔......
  • 高斯消元 学习笔记
    用于求解方程组。给定\(n\)个关于\(m\)个变量的方程组,需要你判断该方程组是否无解、有无数解、有唯一解,并输出唯一的解。考虑使用消元法。我们枚举一个变量\(i\),从所有没有被操作过的方程式中选出一个,然后用它对其他没有被操作过的方程式进行消元,并将被选中的那个方程式视......
  • notepad++安装使用
    1.简介1Notepad++是Windows中免费的文本编辑器(软件版权许可证:GPL),有完整的中文化接口,并支持多国语言,默认采用UTF-8编码。23Notepad++的功能要比Windows中的txt记事本要强大的多,除了可以编写一般的纯文字说明文件,也可以编写各种计算机代码。Notepad++不仅支持语法高......
  • 【python学习】巧用notedown:Markdown与Jupyter Notebook的高效互转指南
    在数据科学、教学、技术写作等领域,Markdown文件和JupyterNotebook都是非常重要的工具。notedown是一个轻量级的Python库,能够方便地将Markdown文件转换为JupyterNotebook,或将JupyterNotebook转换为Markdown文件。这篇博客将介绍notedown的基本用法、常见命......
  • AI Python for Beginners-Andrew吴恩达-study notes(2)
    1Introduction    itisbelievedthatwiththehelpofAIchatbotwecanlearnpythonmoreeasilyanditwillbeamazingtoautomatetasksusingPython2 CompletingatasklistwithAI2.1List①listisasinglevariableoftype thatholdsm......
  • 高斯消元
    1.高斯消元的基础信息本质通过初等行变化,将线性方程组的增广矩阵转化为行阶梯矩阵,讲人话就是用加减消元来转化,代入消元来回带。应用用来求解线性方程组(m个一次方程,n个变量),矩阵的秩(校园后的主元数)以及求可逆方阵的逆矩阵。难度思维难度低,代码实现难度低复杂度时间:O(n^3)空间......