文章目录

  • 题目
  • 方法一:高斯消去法
    • 结果截图
  • 方法二:列主元素高斯消元法
    • 结果截图
  • 方法三:LU分解
  • 结果截图
    • 结果总结

题目

实现高斯消去、列主元高斯消去,LU分解分别求解线性方程组

方法一:高斯消去法

消去过程:
l i k = a i k ( k − 1 ) / a k k ( k − 1 ) ( i = k + 1 , k + 2 , . . . , n ) l_{ik} = a_{ik}^{(k-1)}/a_{kk}^{(k-1)} (i=k+1,k+2,...,n) lik​=aik(k−1)​/akk(k−1)​(i=k+1,k+2,...,n)
a i j ( k ) = a i j ( k − 1 ) − l i k a j k ( k − 1 ) ( i , j = k + 1 , k + 2 , . . . , n ) a_{ij}^{(k)} = a_{ij}^{(k-1)}-l_{ik}a_{jk}^{(k-1)}(i,j=k+1,k+2,...,n) aij(k)​=aij(k−1)​−lik​ajk(k−1)​(i,j=k+1,k+2,...,n)
b i ( k ) = b i ( k − 1 ) − l i k b k ( k − 1 ) ( i = k + 1 , k + 2 , . . . , n ) b_{i}^{(k)} = b_{i}^{(k-1)}-l_{ik}b_{k}^{(k-1)}(i=k+1,k+2,...,n) bi(k)​=bi(k−1)​−lik​bk(k−1)​(i=k+1,k+2,...,n)
回代过程:
x n = b n ( n − 1 ) / a n n ( n − 1 ) x_{n}= b_{n}^{(n-1)}/a_{nn}^{(n-1)} xn​=bn(n−1)​/ann(n−1)​
x k = ( b k ( k − 1 ) − ∑ j = k + 1 n a k j ( k − 1 ) x j ) / a k k ( k − 1 ) x_{k}= (b_{k}^{(k-1)}-\sum_{j=k+1}^{n}a_{kj}^{(k-1)}x_j )/a_{kk}^{(k-1)} xk​=(bk(k−1)​−j=k+1∑n​akj(k−1)​xj​)/akk(k−1)​
在消元法第k次迭代时,首先 ,寻找第k列中从k到n处的绝对值最大的一个,然后互换该行和第k行的所有位置。 然后再消元。这样的好处是能控制舍入误差的扩大和传播。 基本算法如下:

import numpy as np
A = np.array([[10,-7,0,1],[-3, 2.099999,6,2 ],[5,-1,5,-1],[2,1,0,2]])
b = np.array([[8],[5.900001],[5],[1]])
def guass(A,b):n = b.shape[0]A=A.astype('float')b=b.astype('float')#消元for k in range(n-1):    #k第一层循环,第(0~n-1)行
#         print('第',k+1,'次的初值')
#         print(A)
#         print(b)for i in range(k+1,n):    #i第二层循环,第(k+1,n)行mik = A[i,k]/A[k,k]for j in range(k+1,n):    A[i,j] = A[i,j] - mik*A[k,j]b[i] = b[i] - mik*b[k]
#         print('第',k+1,'次消元后的值')
#         print(A)
#         print(b)#回代solution = np.zeros(n)solution[n-1] = b[n-1]/A[n-1,n-1]    #改为n-1for i in range(n-2,-1,-1):for j in range(i+1,n):solution[i] = solution[i] + A[i,j]*solution[j]solution[i] = (b[i] - solution[i])/A[i,i]return solutionguass(A,b)

结果截图


方法二:列主元素高斯消元法

def guass_zhuyuan(A,b):n = b.shape[0]A=A.astype('float')b=b.astype('float')#寻找列主元素for k in range(n-1):     #k第一层循环,第(0~n-2)行
#         print('第',k+1,'次的初值')
#         print(A)
#         print(b)arr = abs(A[k:n,k])  #每一列最大值的数组value = max(arr)     #最大值position = np.argmax(arr)    #最大值索引#print(position)if position != 0:
#             A[k,k:n-1],A[position+k,k:n-1] = A[position+k,k:n-1],A[k,k:n-1]
#             b[k],b[position+k] = b[position+k],b[k]A[[k,position+k],k:n] = A[[position+k,k],k:n]b[[k,position+k],:] = b[[position+k,k],:]
#         print('第',k+1,'次交换后的值')
#         print(A)
#         print(b)#消元for i in range(k+1,n):    #i第二层循环,第(k+1,n-1)行mik = A[i,k]/A[k,k]for j in range(k+1,n):    #j从k开始循环,不是k+1A[i,j] -= mik*A[k,j]b[i] = b[i] - mik*b[k]
#         print('第',k+1,'次消元后的值')
#         print(A)
#         print(b)#回代solution = np.zeros(n)solution[n-1] = b[n-1]/A[n-1,n-1]    #改为n-1for i in range(n-2,-1,-1):for j in range(i+1,n):solution[i] = solution[i] + A[i,j]*solution[j]solution[i] = (b[i] - solution[i])/A[i,i]return solution                     

结果截图


方法三:LU分解

def LUfenjie(A,b):n = b.shape[0]A = A.astype('float')b = b.astype('float')U = np.zeros(A.shape)L = np.zeros(A.shape)U[0,:] = A[0,:]    #U的第一行元素和A的第一行元素相等L[1:n,0] = A[1:n,0]/U[0,0]    #L的每一行的第一列元素和U第一个元素相乘=A的对应元素#分解#U为上三角元素 k=1~n-1行 j=k~n-1列 r=0~k-2行 i=k+1~n-1行
#     for k in range(1,n):
#         for j in range(k,n):
#             U[k,j] = A[k,j] - L[k,0:k-1] * U[0:k-1,j]
#         for i in range(k+1,n):
#             L[i,k] = (A[i,k]-L[i,0:k-1] * U[0:k-1,k])/U[k,k]#分解#U为上三角元素 k=1~n-1行 j=k~n-1列 r=0~k-2行 i=k+1~n-1行for k in range(1,n):    for j in range(k,n):delta = 0for r in range(0,k):delta += L[k,r] * U[r,j]U[k,j] = A[k,j] - deltafor i in range(k+1,n):theta = 0for r in range(0,k):theta += L[i,r] * U[r,k]L[i,k] = (A[i,k] - theta)/U[k,k]#求解yy = np.zeros(b.shape[0])#忘了初始化……y[0] = b[0]for i in range(1,n):alpha = 0for j in range(0,i):alpha += L[i,j]*y[j].Ty[i] = b[i] - alpha#求解xx = np.zeros(b.shape[0])x[n-1] = y[n-1]/U[n-1,n-1]for i in range(n-2,-1,-1):gama = 0 for j in range(i+1,n):gama += U[i,j]*x[j].Tx[i] = (y[i] - gama )/U[i,i]return (x)

结果截图


结果总结

方法 结果
高斯迭代法 [-6.03391825e-10, -1.00000000e+00, 1.00000000e+00, 1.00000000e+00]
列主元素高斯 [ 2.66453526e-16, -1.00000000e+00, 1.00000000e+00, 1.00000000e+00]
LU分解 [-6.03391825e-10, -1.00000000e+00, 1.00000000e+00, 1.00000000e+00]

【计算方法】实验二:python实现高斯消去、列主元高斯消去,LU分解分别求解线性方程组相关推荐

  1. python语言基础实验_实验二Python语言基础函数包练习.doc

    实验二Python语言基础函数包练习 实验 Python语言基础函数包练习:1208 学号: 实验目的 1.Python语言包,如math.NumPySciPy和Matplotlib等函数包的使用实验 ...

  2. 实验二 Python流程控制

    一.实验目的 1.掌握分支条件语句的使用. 2.掌握分支嵌套语句的使用. 3. 掌握for.while循环语句及break,continue的使用 4. 掌握带else字句的循环语句的使用 5. 掌握 ...

  3. 实验二.Python 运算符与内置函数

    一.实验目的 1.熟练运用python运算符: 2.熟练运用Python内置函数. 二.实验环境 多媒体计算机  Windows 操作系统  Python3.7   三.实验内容及要求 (一).编写程 ...

  4. 合肥工业大学宣城校区计算方法 实验二

    1实验目的和要求 实验目的: (1)熟悉复化梯形方法.复化Simpson方法.梯形递推算法.龙贝格算法: (2)能编程实现复化梯形方法.复化Simpson方法.梯形递推算法.龙贝格算法: (3)理解并 ...

  5. 高斯-赛德尔(Gauss-Seidel)迭代法求解线性方程组matlab程序设计

    算法步骤 例题 程序代码 function x=GaussSeidel(A,b,x0,eps,N) n=length(b); if nargin<5N=500; end if nargin< ...

  6. [笔记]搜索引擎-实验报告-实验二

    实验目的 掌握文本处理和分析的内容: 掌握文本预处理的基本技术 掌握倒排文档的实现 掌握向量空间模型的实现 掌握文本分类模型的实现 链接分析的内容: 掌握 PageRank 算法的原理和实现 实验步骤 ...

  7. 用列主元高斯(Gauss)消元法求n阶线性方程组的解(python)

    (一)目的 通过设计.编制.调试2~3个求n阶线性方程组数值解的程序,加深对其数值计算方法及有关的基础理论知识的理解. (二)要求 用编程语言实现用高斯(Gauss)消元法求n阶线性方程组的解.用列主 ...

  8. 高斯消去、列主元消去、Lu分解、追赶法(matlab)

    文章目录 一.高斯消去法 二.高斯列主元消去法 三.Lu分解 四.追赶法 一.高斯消去法 比如对与上面的这个方程组,用消去法解方程组的基本思想是用逐次消 去未知数的方法把原方程组 Ax = b 化为与 ...

  9. 实验二:用python实现SVM支持向量机并对鸢尾花数据集分类

    实验二:SVM支持向量机 1. 实验内容: (1)用你熟知的语言(尽量使用python)实现支持向量机的算法,并在给定的数据集上训练. (2)在测试集上用训练好的支持向量机进行测试,并将预测结果以cs ...

最新文章

  1. 为什么 JavaScript 的私有属性使用 # 符号
  2. 追番必备,动漫角色也可以用人脸识别了
  3. 科学解释超级计算机,超级计算机:彻底“改变”科学
  4. qt 在移动的两点之间连线_几种移动端跨平台技术区别
  5. [转]autoid文件上传
  6. 剑指Offer_编程题_22
  7. MongoDB创建索引
  8. OpenGL RGTC Compressor压缩实例
  9. 【批处理】shift用法举例
  10. HDU 3449 Consumer
  11. Qt翻译文件(.ts)的使用
  12. python获取淘宝服务器时间的代码
  13. vnc-4.0-winsrc版本之winvnc工程分析_源码研究
  14. 安装mysql驱动报错_java.sql.SQLException: org.gjt.mm.mysql.Driver 报错【解决办法】
  15. 中文标点符号unicode码
  16. /proc/sysrq-trigger说明
  17. MDF和DHF、DMR、DHR三者差异?注册与备案文件?
  18. 罚单不断,长文揭秘第三方支付!
  19. 黑客是如何攻破一个网站的?
  20. torchtext使用-- 单标签多分类任务TREC

热门文章

  1. Hank的无线802.11学习笔记--part 3
  2. 量子力学的诡异现象—朱清时教授
  3. 【数据分析】指标体系
  4. ubuntu18.04使用xrdp远程连接
  5. 没有要使用本计算机 用户必须输入密码,要使用本计算机,用户必须输入用户名和密码选项不见了怎么办...
  6. Pandas中describe()函数
  7. 迄今为止最全的技术文档汇总,编程语言,操作系统,数据结构,设计模式等赶紧收藏起来。
  8. 【工作向】docker镜像构建方法与命令
  9. 简单的python画图小实例
  10. 云知声AI开放平台之语音合成技术:让AI人工智能照亮智慧生活