高斯消元及实现

Posted 行码棋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高斯消元及实现相关的知识,希望对你有一定的参考价值。

  • 博客主页: https://blog.csdn.net/qq_50285142
  • 欢迎点赞👍收藏✨关注❤留言 📝 如有错误,敬请指正
  • 🎈虽然生活很难,但我们也要一直走下去🎈

高斯消元

前置知识:增广矩阵是什么,矩阵行列变换,对角阵等

高斯消元主要用于多元线性方程组的求解,只对系数进行操作,不对未知数进行操作。

高斯消元知识点可以参考以下链接:

https://www.tonyyin.top/2021/09/gauss-elimination/

https://oi-wiki.org/math/gauss/

https://blog.nowcoder.net/n/5705bab812774f1eb6e60c2e8c55ca1e

我习惯把高斯消元分为几步:

  • 化为上三角矩阵
    • 找主元(主元即对角线上位置的元素)
      即按列来找,找每一列中绝对值最大的一行,将该行和当前访问到的行进行交换
    • 交换
    • 主元归一
      即将当前的对角元素变为1,对应该行也要做相同的变换
    • 消元
  • 化为对角阵(主对角线都为1,其余位置都为0)

例1 球形空间产生器

题目链接:https://www.acwing.com/problem/content/209/

有一个球形空间产生器能够在 n 维空间中产生一个坚硬的球体。
现在,你被困在了这个 n 维球体中,你只知道球面上 n+1 个点的坐标,你需要以最快的速度确定这个 n 维球体的球心坐标,以便于摧毁这个球形空间产生器。

思路

因为是n维空间,一个点的坐标有n个值。
可以设球心坐标为 ( x 1 , x 2 , . . . , x n ) (x_1,x_2,...,x_n) (x1,x2,...,xn)表示n维情况下的坐标,设半径为 R R R
给出了n+1个点的坐标,设第i个点的坐标为 ( a i , 1 , a i , 2 , . . . , a i , n ) (a_i,1,a_i,2,...,a_i,n) (ai,1,ai,2,...,ai,n)
球形可以想到球上的点到球心的距离相等,进而可以列出方程组
( a 1 , 1 − x 1 ) 2 + . . . + ( a 1 , n − x n ) 2 = R 2 【 式 1 】 ( a 2 , 1 − x 1 ) 2 + . . . + ( a 2 , n − x n ) 2 = R 2 【 式 2 】 . . . . . . ( a n + 1 , 1 − x 1 ) 2 + . . . + ( a n + 1 , n − x n ) 2 = R 2 【 式 n + 1 】 \\begincases (a_1,1-x_1)^2+...+(a_1,n-x_n)^2=R^2【式1】\\\\ (a_2,1-x_1)^2+...+(a_2,n-x_n)^2=R^2【式2】\\\\ ......\\\\ (a_n+1,1-x_1)^2 +...+(a_n+1,n-x_n)^2=R^2【式n+1】 \\endcases (a1,1x1)2+...+(a1,nxn)2=R21(a2,1x1)2+...+(a2,nxn)2=R22......(an+1,1x1)2+...+(an+1,nxn)2=R2n+1
可以发现并不是满足线性的条件,但是我们却可以把它化成线性的情况
从第二个式子开始,依次减去第一个式子,然后我们就可以得到
2 ( a 2 , 1 − a 1 , 1 ) x 1 + . . . + 2 ( a 2 , n − a 1 , n ) x n = ( a 2 , 1 2 + . . . + a 2 , n 2 ) − ( a 1 , 1 2 + . . . + a n , n 2 ) 2 ( a 3 , 1 − a 1 , 1 ) x 1 + . . . + 2 ( a 3 , n − a 1 , n ) x n = ( a 3 , 1 2 + . . . + a 3 , n 2 ) − ( a 1 , 1 2 + . . . + a n , n 2 ) . . . . . . 2 ( a n + 1 , 1 − a 1 , 1 ) x 1 + . . . + 2 ( a n + 1 , n − a 1 , n ) x n = ( a n + 1 , 1 2 + . . . + a n + 1 , n 2 ) − ( a 1 , 1 2 + . . . + a n , n 2 ) \\begincases 2(a_2,1-a_1,1)x_1+...+2(a_2,n-a_1,n)x_n=(a_2,1^2+...+a_2,n^2)-(a_1,1^2+...+a_n,n^2)\\\\ 2(a_3,1-a_1,1)x_1+...+2(a_3,n-a_1,n)x_n=(a_3,1^2+...+a_3,n^2)-(a_1,1^2+...+a_n,n^2)\\\\ ......\\\\ 2(a_n+1,1-a_1,1)x_1+...+2(a_n+1,n-a_1,n)x_n=(a_n+1,1^2+...+a_n+1,n^2)-(a_1,1^2+...+a_n,n^2) \\endcases 2(a2,1a1,1)x1+...+2(a2,na1,n)xn=(a2,12+...+a2,n2)(a1,12+...+an,n2)2(a3,1a1,1)x1+...+2(a3,na1,n)xn=(a3,12+...+a3,n2)以上是关于高斯消元及实现的主要内容,如果未能解决你的问题,请参考以下文章

复习及学习计划

浅谈高斯消元的实现和简单应用

高斯消元法的C++简单实现

高斯消元法

线性方程直接求法——高斯消元法(一)

高斯消元并行