计算方法实验2(补充):列主元消元法解线性方程组

C++源代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

// 列主元消去法求解线性方程组
vector<long double> Column_Elimination(vector<vector<long double>> A, vector<long double> b);

int main()
{
    vector<vector<long double>> A(3, vector<long double>(3, 0));
    A[0][0] = 2, A[0][1] = 4, A[0][2] = -3;
    A[1][0] = 4, A[1][1] = -3, A[1][2] = 1;
    A[2][0] = 1, A[2][1] = 3, A[2][2] = -2;
    vector<long double> b(3, 1);
    vector<long double> X = Column_Elimination(A, b);
    for(int i = 0; i < 3; i++)
        cout << X[i] << " ";
    return 0;
}

// 列主元消去法求解线性方程组
vector<long double> Column_Elimination(vector<vector<long double>> A, vector<long double> b)
{
    int n = A.size();
    vector<long double> x(n, 0);
    vector<vector<long double>> matrix(n, vector<long double>(n + 1, 0));

    for(int i = 0; i < n; i++)
    {
        matrix[i][n] = b[i];
        for(int j = 0; j < n; j++)
            matrix[i][j] = A[i][j];
    }
        
    for(int col = 0; col < n; col++)//找到列主元
    {
        long double maxnum = abs(matrix[col][col]);
        int maxrow = col;
        for(int row = col + 1; row < n; row++)
        {
            if(abs(matrix[row][col]) > maxnum)
            {
                maxnum = abs(matrix[row][col]);
                maxrow = row;
            }
        }
        swap(matrix[col], matrix[maxrow]);
        for(int row = col + 1; row < n; row++)
        {
            long double res = matrix[row][col] / matrix[col][col];
            for(int loc = col; loc <= n; loc++)
                matrix[row][loc] -= matrix[col][loc] * res; 
        }
    }
    for(int row = n - 1; row >= 0; row--)//回代
    {
        for(int col = row + 1; col < n; col++)
        {
            matrix[row][n] -= matrix[col][n] * matrix[row][col] / matrix[col][col];
            matrix[row][col] = 0;
        }
        matrix[row][n] /= matrix[row][row];
        matrix[row][row] = 1;
    }
    for(int i = 0; i < n; i++)
        x[i] = matrix[i][n];
    return x;
}

补充:python解线性方程组

python 复制代码
import numpy as np

A = np.array([[2, 4, -3], [4, -3, 1], [1, 3, -2]])
b = np.array([1, 1, 1])

x = np.linalg.solve(A, b)

print(x)
相关推荐
云里雾里!几秒前
力扣 268. 缺失数字 ✅ 【位运算(异或)最优解法】深度解析
算法·leetcode
YJlio5 分钟前
PsPing 学习笔记(14.7):一条龙网络体检脚本——连通性、延迟、带宽全都要
开发语言·网络·笔记·python·学习·pdf·php
kaikaile19957 分钟前
ISODATA聚类方法在MATLAB中的实现指南
算法·matlab·聚类
梭七y10 分钟前
【力扣hot100题】(122)回文链表
算法·leetcode·链表
J_liaty12 分钟前
雪花主键(Snowflake ID)算法详解
算法
2401_8414956415 分钟前
【DeepSeek系列】论文《mHC: Manifold-Constrained Hyper-Connections》全流程复现详解(附Python代码)
人工智能·pytorch·python·深度学习·论文复现·deepseek·mhc模型
汤姆yu16 分钟前
基于python大数据的地震数据可视化分析系统
大数据·python·信息可视化
阿蔹21 分钟前
Python-基础语法五-数据可视化、对象、类、多态、继承、封装、抽象类
开发语言·python
tobias.b22 分钟前
408真题-2009-7-数据结构-无向连通图性质
数据结构·算法·408考研·408真题·真题解析
小白学大数据27 分钟前
未来趋势:AI 时代下 python 爬虫技术的发展方向
运维·人工智能·爬虫·python·自动化