东南大学研究生-数值分析上机题(2023)Python 3 线性代数方程组数值解法

news/2025/1/16 3:44:25/

列主元Gauss消去法

3.1 题目

对于某电路的分析,归结为就求解线性方程组 R I = V \pmb{RI=V} RI=V,其中
R = [ 31 − 13 0 0 0 − 10 0 0 0 − 13 35 − 9 0 − 11 0 0 0 0 0 − 9 31 − 10 0 0 0 0 0 0 0 − 10 79 − 30 0 0 0 − 9 0 0 0 − 30 57 − 7 0 − 5 0 0 0 0 0 − 7 47 − 30 0 0 0 0 0 0 0 − 30 41 0 0 0 0 0 0 − 5 0 0 27 − 2 0 0 0 − 9 0 0 0 − 2 29 ] \pmb{R} = \begin{bmatrix} 31 & -13 & 0 & 0 & 0 & -10 & 0 & 0 & 0\\ -13 & 35 & -9 & 0 & -11 & 0 & 0 & 0 & 0 \\ 0 & -9 & 31 & -10 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & -10 & 79 & -30 & 0 & 0 & 0 & -9 \\ 0 & 0 & 0 & -30 & 57 & -7 & 0 & -5 & 0 \\ 0 & 0 & 0 & 0 & -7 & 47 & -30 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & -30 & 41 & 0 & 0 \\ 0 & 0 & 0 & 0 & -5 & 0 & 0 & 27 & -2& \\ 0 & 0 & 0 & -9 & 0 & 0 & 0 & -2 & 29 \end{bmatrix} R= 3113000000013359000000093110000000010793000090110305770501000074730000000030410000005002720009000229
V T = ( − 15 , 27 , − 23 , 0 − 20 , 12 , − 7 , 7 , 10 ) \pmb{V}^T=(-15,27,-23,0-20,12,-7,7,10) VT=(15,27,23,020,12,7,7,10)
(1) 编写解 n n n阶线性方程组 A x = b \pmb{Ax=b} Ax=b的列主元Gauss消去法的通用程序;
(2) 用所编程序解线性方程组 R I = V \pmb{RI=V} RI=V ,并打印出解向量,保留5位有效数字;
(3) 通过本题程序的编写,你提高了哪些编程能力?

3.2 Python源程序

线性方程组 A x = b \pmb{Ax=b} Ax=b的列主元Gauss消去法

求解不同的线性方程组 A x = b Ax=b Ax=b,只需要修改参数 A \pmb{A} A b \pmb{b} b

import numpy as np  A = np.array([[31, -13, 0, 0, 0, -10, 0, 0, 0],  [-13, 35, -9, 0, -11, 0, 0, 0, 0],  [0, -9, 31, -10, 0, 0, 0, 0, 0],  [0, 0, -10, 79, -30, 0, 0, 0, -9],  [0, 0, 0, -30, 57, -7, 0, -5, 0],  [0, 0, 0, 0, -7, 47, -30, 0, 0],  [0, 0, 0, 0, 0, -30, 41, 0, 0],  [0, 0, 0, 0, -5, 0, 0, 27, -2],  [0, 0, 0, -9, 0, 0, 0, -2, 29]], dtype=np.float64)  b = np.array([[-15], [27], [-23], [0], [-20], [12], [-7], [7], [10]], dtype=np.float64)  row_num = A.shape[0]  # 系数矩阵A的行数  
col_num = A.shape[1]  # 系数矩阵A的列数  x = np.zeros(row_num)  # A_表示为增广矩阵  
A_ = A.copy()  
A_abs = np.absolute(A_)  
A_ = np.append(A_, values=b, axis=1)  for i in range(row_num-1):  # 处理主元为0的情况  if A_[i,i] == 0:  m = i + 1  while A_[m, i] == 1:  m += 1  A_[[i, m], :] = A_[[m, i], :]  # 选取列主元  index = A_abs[range(i, row_num), i].argmax()  index += i  A_[[i, index], :] = A_[[index, i], :]  # 消元  for j in range(i, row_num-1):  k = A_[j+1, i]/A_[i, i]  A_[j+1, :] = A_[j+1, :] - k * A_[i, :]  # # 回代求解向量  
x[row_num-1] = A_[row_num-1, row_num]/ A_[row_num-1, row_num-1]  
for i in range(row_num - 2, -1, -1):  x[i] = (A_[i, row_num] - (A_[i, i+1:row_num].dot(x[i+1:row_num])))/A_[i, i]  print("解向量x为")  
for i in range(row_num):  print("{:.5f}".format(x[i]))

3.3 程序运行结果

解向量x为
-0.28923381601575443
0.34543571577911536
-0.7128117310868789
-0.22060851057052858
-0.43040043270402234
0.15430873983831117
-0.05782287328904061
0.2010538948236807
0.29022866187974494

根据题意,保留5位有效数字,则方程 R I = V \pmb{RI=V} RI=V的解向量 I \pmb{I} I
I = [ − 0.28923 0.34544 − 0.71281 − 0.22061 − 0.43040 0.15431 − 0.057823 0.20105 0.29023 ] \pmb{I} = \begin{bmatrix} -0.28923\\0.34544\\-0.71281\\-0.22061\\-0.43040\\0.15431\\-0.057823\\0.20105\\0.29023 \end{bmatrix} I= 0.289230.345440.712810.220610.430400.154310.0578230.201050.29023

3.4 总结感悟

通过本次线性方程组的列主元Gauss消元法编程,熟悉掌握了Python的重要工具Numpy模块的用法,对复杂数据的编程操作的能力进一步提升,对列主元高斯消去法也有了进一步的认识,我们通常可以通过笔算很快地得到一些简单线性方程组的解,但是真正将这一算法通过严谨的程序编写出来很是有很大的难度。列主元 Gauss 消去法可以减小由消去过程中分母相较分子过小(两个相差很大的数相除)引起的误差,列主元Gauss消去法基本上是稳定的。


http://www.ppmy.cn/news/1521755.html

相关文章

【2024-2025源码+文档+调试讲解】微信小程序的城市公交查询系统

摘 要 当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统城市公交查询管理采取了人工的管理方法…

怎么摆脱非自然链接?

什么是非自然链接? 非自然链接是人为创建的链接,用于操纵网站在搜索引擎中的排名。非自然链接违反了Google 的准则,网站可能会因此受到惩罚。 它们不是由网站所有者编辑放置或担保的。示例包括带有过度优化锚文本的链接、通过 PR 的广告、嵌…

Nginx部署前端VUE项目

要部署一个Vue项目,可以使用nginx作为web服务器。下面是一些步骤: 确保你已经在本地机器上安装了nginx。如果没有安装,请按照官方文档进行安装。 将Vue项目构建为静态文件。在项目根目录下运行以下命令: npm run build这将在项…

如何在Excel中创建一个VBA宏,并设置一个按钮来执行这个宏

下面是一个详细的步骤指南 步骤1:创建VBA宏 1. 打开Excel并按 Alt F11 打开VBA编辑器。 2. 在VBA编辑器中,选择 Insert > Module 来插入一个新的模块。 3. 将以下代码粘贴到模块中: vba Sub CreateNewSheet() 声明一个工作表对象Dim …

【STM32项目设计】STM32F411健康助手--MPU6050陀螺仪驱动(6)

硬件设计 软件设计 此项目使用的是软件I2C,MPU6050的SCL连接到STM32的PB10,SDA连接到STM32的PB9 mpuiic.c #include "mpuiic.h" #include "delay.h"//MPU IIC 延时函数 void MPU_IIC_Delay(void) {delay_us(2); }//初始化IIC voi…

AWS账号关闭后的影响:您需要知道的一切

亚马逊网络服务(AWS)作为全球领先的云计算平台,为众多企业和个人提供了便捷、高效的云服务。然而,当用户决定关闭其AWS账号时,可能会对其现有的服务和资源产生重大影响。我们九河云将通过本文将深入探讨AWS账号关闭后的…

SQLite 创建表:一场数据库里的“造物运动”

嘿,各位数据库的“造物主”们!今天咱们来聊聊SQLite里的一场有趣活动——创建表。没错,就像上帝创造了世界,我们也可以在SQLite数据库里创造属于我们自己的“小世界”。 一、创建表的“魔法咒语” 在SQLite这个“魔法世界”里&a…

ARM基础知识---CPU---处理器

目录 一、ARM架构 1.1.RAM---随机存储器 1.2.ROM---只读存储器 1.3.flash---闪存存储器 1.4.时钟(振晶) 1.5.复位 二、CPU---ARM920T 2.1.R0~R12---通用寄存器 2.2.PC程序计数器 2.3.LR连接寄存器 2.4.SP栈指针寄存器 2.5.CPSR当前程序状态寄存…