• 浅谈高斯约旦消元法


    高斯约旦消元法的用处其实就是针对n个方程n个未知数求解的过程

    那么n个方程n个未知数我们知道是有解的,但如何求解,我们需要先知道矩阵以及矩阵的初等变换,知道了矩阵的初等变换,我们就可以用数组去模拟矩阵的初等变换

    \left\{\begin{matrix} a_{1}x_{1}+a_{2}x_{2}+...+a_{n}x_{n}=d_{1}\\ b_{1}x_{1}+b_{2}x_{2}+...+b_{n}x_{n}=d_{2}\\ ...\\ c_{1}x_{1}+c_{2}x_{2}+...+c_{n}x_{n}=d_{n} \end{matrix}\right.

    这种形式的方程组我们可以写成增广矩阵的形式

    \begin{bmatrix} a_{1}x_{1} & a_{2}x_{2} & ... & d_{1}\\ b_{1}x_{1}& b_{1}x_{2} &... &d_{2} \\ ...& ... & ... &... \\ c_{1}x_{1} &c_{1}x_{2} &... &d_{n} \end{bmatrix}

    运用线性代数中的初等行变换,我们知道可以把前n行前n列变换成单位矩阵,那么最后n+1列就是我们要的方程组的解

    为什么要用高斯约旦消元而不是传统的高斯消元?

    相对于传统的高斯消元,约旦消元法的精度更好、代码更简单,没有回带的过程。

    高斯约旦消元法大致思路如下:

    先枚举每一列,然后找出这一列在所有行中的最大值的位置,然后将枚举的这一列所在的行与最大值所在的行进行互换,然后再枚举除最大值所在行的其他行,然后让其他行在这一列的值为0,相当于做初等行变换,线代的基本操作,写代码时注意下标到底表示的是行还是列

    【模板】高斯消元法 - 洛谷

    AC代码:

    1. #include
    2. using namespace std;
    3. using LL = long long;
    4. int main() {
    5. ios::sync_with_stdio(false);
    6. cin.tie(nullptr);
    7. int n;
    8. cin >> n;
    9. vectordouble>> a(n + 1, vector<double> (n + 2));
    10. for (int i = 1; i <= n; i++) {
    11. for (int j = 1; j <= n + 1; j++) {
    12. cin >> a[i][j];
    13. }
    14. }
    15. for (int i = 1; i <= n; i++) {
    16. int maxx = i;
    17. for (int j = i + 1; j <= n; j++) {
    18. if (fabs(a[j][i] > fabs(a[maxx][i]))) {
    19. maxx = j;
    20. }
    21. }
    22. for (int j = 1; j <= n + 1; j++) {
    23. swap(a[i][j], a[maxx][j]);
    24. }
    25. if (!a[i][i]) {
    26. cout << "No Solution\n";
    27. exit(0);
    28. }
    29. for (int j = 1; j <= n; j++) {
    30. if (i != j) {
    31. double tmp = a[j][i] / a[i][i];
    32. for (int k = i + 1; k <= n + 1; k++) {
    33. a[j][k] -= tmp * a[i][k];
    34. }
    35. }
    36. }
    37. }
    38. for (int i = 1; i <= n; i++) {
    39. cout << fixed << setprecision(2) << a[i][n + 1] / a[i][i] << '\n';
    40. }
    41. return 0;
    42. }

    这么简单的知识点为什么要写一篇文章呢?还不是想提醒自己要分清表示的到底是行还是列

  • 相关阅读:
    什么是Vue的keep-alive组件?有什么作用
    在 Istio 服务网格内连接外部 MySQL 数据库
    JUC系列(五) 读写锁与阻塞队列
    HTTP协议详解
    STL算法
    zookeeper + kafka集群搭建详解
    Go语言的流程控制
    深入浅出RPC原理
    电脑软件:推荐八款图片处理工具,值得收藏
    【文章转载】Lance Martin的关于RAG的笔记
  • 原文地址:https://blog.csdn.net/eyuhaobanga/article/details/126680468