Python基于高斯消元法计算线性方程组示例

yizhihongxing

Python基于高斯消元法计算线性方程组示例

高斯消元法是一种求解线性方程组的经典方法,对于大部分的线性方程组都可以有效求解。本文将介绍如何使用Python语言来实现高斯消元法求解线性方程组。

高斯消元法原理简介

高斯消元法的核心思想是将线性方程组转化为简化阶梯矩阵。简化阶梯矩阵可以很直观地得到方程组的解。以下是高斯消元法的具体步骤。

  1. 构造增广矩阵

增广矩阵是将系数矩阵和向量矩阵组合而成的矩阵。

  1. 消元

通过一系列消元操作,将增广矩阵转换为简化阶梯矩阵。

  1. 回归

从简化阶梯矩阵的最后一行开始,反向计算出未知数的值。

Python实现高斯消元法

在Python中实现高斯消元法,我们可以通过使用numpy库来处理矩阵计算。以下是一个示例程序,其中解决了以下线性方程组。

2x1 + 4x2 - 1x3 = 5
5x1 + 6x2 - 3x3 = 7
1x1 - 1x2 + 2x3 = 10

import numpy as np

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

B = np.array([5, 7, 10])

AB = np.column_stack((A, B))

n = len(B)

for i in range(n):
    max_row = i
    for j in range(i+1, n):
        if abs(AB[j, i]) > abs(AB[max_row, i]):
            max_row = j
    AB[i], AB[max_row] = AB[max_row], AB[i]

    for j in range(i+1, n):
        AB[j] = AB[j] - AB[i] * (AB[j,i] / AB[i,i])

# 回收
X = np.zeros(n)        
for i in range(n-1, -1, -1):
    s = sum(AB[i, j] * X[j] for j in range(i, n))
    X[i] = (AB[i, n] - s) / AB[i, i]

print(X)

该程序的输出为:

[ 2.  1. -1.]

表示方程组的解为x1=2,x2=1,x3=-1。

高斯消元法示例二

以下是另外一个线性方程组的求解,假设有以下线性方程组。

1x1 - 2x2 + 1x3 = 0
-1x1 + 3x2 + 1x3 = 3
3x1 - 1x2 + 2x3 = 3

我们可以通过类似的方式实现高斯消元法。

import numpy as np

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

B = np.array([0, 3, 3])

AB = np.column_stack((A, B))

n = len(B)

for i in range(n):
    max_row = i
    for j in range(i+1, n):
        if abs(AB[j, i]) > abs(AB[max_row, i]):
            max_row = j
    AB[i], AB[max_row] = AB[max_row], AB[i]

    for j in range(i+1, n):
        AB[j] = AB[j] - AB[i] * (AB[j,i] / AB[i,i])

# 回收
X = np.zeros(n)        
for i in range(n-1, -1, -1):
    s = sum(AB[i, j] * X[j] for j in range(i, n))
    X[i] = (AB[i, n] - s) / AB[i, i]

print(X)

输出结果为:

[ 3. -1.  2.]

表示方程组的解为x1=3,x2=-1,x3=2。

在这两个示例中,我们使用了numpy库的array和column_stack方法来构造矩阵,使用for循环实现了消元和回归的过程,使用了range、abs、sum等Python标准函数辅助计算。这一过程中,需要注意数值计算时的精度问题,以保证求解结果更加准确。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基于高斯消元法计算线性方程组示例 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • anconda的pip下载包出现的问题解决

    下面是“conda的pip下载包出现的问题解决”的完整攻略。 问题描述 在使用Anaconda中的pip下载包时,可能会出现以下问题: SSL错误: pip._vendor.requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ss…

    python 2023年5月14日
    00
  • Python figure参数及subplot子图绘制代码

    下面就对这个问题进行详细讲解。 1. Python中的figure参数 在Python的matplotlib库中,figure参数指代的是整个图形对象的定义,它可以控制图形的大小、分辨率、背景色等属性。首先需要创建一个figure对象,然后在对象上进行绘图即可。 下面给出一个示例代码,展示如何创建一个figure对象: import matplotlib.p…

    python 2023年5月19日
    00
  • 关于Python 内置库 itertools

    一、Python内置库itertools简介 Python内置库itertools提供了很多方便的迭代器函数,这些函数能够用于高效地组合和操作可迭代对象,使代码更加简洁高效。 itertools模块主要包括以下常用函数: count(start=0, step=1):从start开始不停递增step的无限迭代器; cycle(iterable):循环返回it…

    python 2023年6月3日
    00
  • Python基础详解之列表复制

    Python基础详解之列表复制 什么是列表复制 列表复制是指将一个列表中的元素复制到另一个列表。Python中复制列表分为浅复制和深复制两种方法。 浅复制: 将原列表中的对象的引用复制到新列表中,新列表的元素和原列表的元素对象是同一个对象,修改其中一个对象会影响另一个对象。 深复制: 重新创建一个与原列表相同的列表,其元素对象全部重新创建,新对象与原对象互不…

    python 2023年5月20日
    00
  • python3+PyQt5使用数据库表视图

    让我们来详细讲解一下”Python3+PyQt5使用数据库表视图”的完整攻略。 一、准备工作 在使用Python3+PyQt5进行数据库表视图的开发前,需要以下准备工作: 安装Python3,可以在官方网站下载:https://www.python.org/downloads/ 安装PyQt5,可以在命令行使用pip进行安装:pip install PyQt…

    python 2023年6月3日
    00
  • python 设置输出图像的像素大小方法

    Python有很多适用于图像处理的库,比如Pillow和matplotlib。接下来我将逐步介绍如何通过Pillow、matplotlib分别设置输出图像的像素大小。 1. 使用Pillow设置输出图像的像素大小 Pillow库是Python中最受欢迎的图像处理库之一,它可以通过修改图像的像素大小调整图像的大小。 下面是一个示例代码,它展示了如何使用Pill…

    python 2023年5月18日
    00
  • Python读取properties配置文件操作示例

    下面是详细讲解“Python读取properties配置文件操作示例”的完整攻略,希望对你有所帮助。 概述 properties(属性文件)是一种常见的配置文件类型,我们可以通过Python来读取和操作它。Python提供了ConfigParser模块来操作properties配置文件。 示例1:读取properties配置文件中的数据 假设我们有一个名为c…

    python 2023年6月3日
    00
  • pyqt5 使用label控件实时显示时间的实例

    使用label控件实时显示时间,可以通过以下步骤来实现。 借助PyQt5自带的QtCore库和QtWidgets库。QtCore库中的QTimer类提供了定时器,可以每隔一段时间发射一个信号。而QtWidgets库中的QLabel类可以用于显示文本或图片。 创建一个Qt应用程序,这是一个基本的框架。这里我们使用QMainWindow作为窗口。 import …

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部