数值计算(Python实现)(一)

本篇内容简介:

  • 解线性方程组:高斯消元法和高斯列主元消去法
  • 解线性方程组的迭代方法:雅克比(Jacobi)迭代法与高斯-赛德尔迭代法
  • 拉格朗日插值法
  • 解非线性方程的迭代方法:区间半分法、不动点迭代法和牛顿法

一、解线性方程组

1.1 高斯消元法

def gauss(a,b):# a - a is an N * N nonsigular matrix# b - b is an N * 1 matrixn=len(b)for i in range(0,n-1):for j in range(i+1,n):if a[j,i]!=0.0:lam=float(a[j,i]/a[i,i])             #乘子a[j,i:n]=a[j,i:n]-lam*a[i,i:n]       #第2行起每一行减去第一行的lam倍
                b[j]=b[j]-lam*b[i]                   #常数项向量也做同样的操作#print("第%d行"%(j+1),[a,b])for k in range(n-1,-1,-1):b[k]=(b[k]-np.dot(a[k,(k+1):n],b[(k+1):n]))/a[k,k]    #可在教科书上找到该公式
        result=b return result                                    #result为线性方程组的解

  一般情形下并不需要自己动手编写一个计算线性方程组的高斯消元函数,直接调用出现自带的求解函数即可。

1.2 高斯列主元消去法

def Pivot_Gauss(a,b):# a - a is an N * N nonsigular matrix# b - b is an N * 1 matrixn=len(b)for i in range(0,n-1):for j in range(i+1,n):if a[j,i]>a[i,i]:a[[i,j],:]=a[[j,i],:]b[[i,j]]=b[[j,i]]#print("换行",[a,b])if a[j,i]!=0.0:lam=float(a[j,i]/a[i,i])a[j,i:n]=a[j,i:n]-lam*a[i,i:n]b[j]=b[j]-lam*b[i]#print("第%d行"%(j+1),[a,b])for k in range(n-1,-1,-1):b[k]=(b[k]-np.dot(a[k,(k+1):n],b[(k+1):n]))/a[k,k]    #可在教科书上找到该公式result=breturn result         #result为线性方程组的解

二、解线性方程组的迭代方法

2.1 雅克比(Jacobi)迭代法

import numpy as np
def Jocobi(A,b,P,delta,max1):'''Input - A is an N * N nonsigular matrix- b is an N * 1 matrix- P is an N * 1 matrix; the initial guess- delta is the tolerance for P- max1 is the maximum number of iterationsOutput - X is an N * 1 matrix; the jacobi approximation to the solution of AX = b- I the indicator of result'''D=np.diag(np.diag(A))E=np.tril(A,-1)F=np.triu(A,1)d=np.linalg.inv(D)G=-np.dot(d,E+F)f=np.dot(d,b)X=np.dot(G,P)+ffor i in range(max1):if np.linalg.norm(X-P)>delta:P=XX=np.dot(G,P)+f#print "i=%d"%i,X,np.linalg.norm(X-P)I=1I=0         return X,I

2.2 高斯-赛德尔迭代法

import numpy as np
def Seidel(A,b,P,delta,max1):'''Input - A is an N * N nonsigular matrix- b is an N * 1 matrix- P is an N * 1 matrix; the initial guess- delta is the tolerance for P- max1 is the maximum number of iterationsOutput - X is an N * 1 matrix; the jacobi approximation to the solution of AX = b- I the indicator of result'''D=np.diag(np.diag(A))E=np.tril(A,-1)F=np.triu(A,1)d=np.linalg.inv(D+E)G=-np.dot(d,F)f=np.dot(d,b)X=np.dot(G,P)+ffor i in range(max1):if np.linalg.norm(X-P)>delta:P=XX=np.dot(G,P)+f#print "i=%d"%i,X,np.linalg.norm(X-P)I=1I=0         return X,I

三、拉格朗日插值法

def Lagrange(X, Y, Z):'''Input:X - X[0],X[1],...,X[N]Y - Y[0],Y[1],...,Y[N]Z - The point to estimateOutput:The Lagrange result'''result=0.0for i in range(len(Y)):t=Y[i]for j in range(len(Y)):if i !=j:t*=(Z-X[j])/(X[i]-X[j])result +=treturn result

四、解非线性方程的迭代方法

4.1 区间半分法

def Half(a,b,to1):# a - 左边端点# b - 右边端点# tol - Epsilon 误差c=(a+b)/2k=1n=1+round((np.log10(b-a)-np.log10(to1)/np.log10(2)))#print ("Total n=%d" % n)while k<=n:#print ("k=%d,a=%f,b=%f,c=%f,f(c)=%f" % (k,a,b,c,f(c)))if f(c)==0:                              # f()为所需求解的函数#print("k=%d,c=%c"%(k,c))return celif f(a)*f(c)<0:b=(a+b)/2else:a=(a+b)/2c=(a+b)/2k=k+1#print("x=%f"%c)return c        

4.2 不动点迭代法

def Picard(x0, to1, N):# x0 - 初始值# to1 - Epsilon 误差# N - 最大的迭代次数# I- 最终是否收敛for k in range(N): #print("x(%d)=%.10f"%(k,x0))x1=g(x0)                        # g(x)为所需求解的函数 if abs(x1-x0)<to1:I=0#print("x(%d)=%.10f"%(k+1,x1))return x1,k+1,I             # 最终的x1为所求的解x0=x1I=1    return x1,k+1,I

4.3 牛顿法

def newton_iteration(x0, to1, N, Y, Y1):# x0 - 初始值# to1 - 误差容限# N - 最大迭代数# Y - 所求解的函数# Y1 - 所求解函数的导数# I - 最终是否收敛;此函数下,I=0为收敛for k in range(N): #print("x(%d)=%.10f"%(k,x0))x1=x0-Y(x0)/Y1(x0)if abs(x1-x0)<to1:I=0#print("x(%d)=%.10f"%(k+1,x1))return (x1, Y(x1), k, I)        # x1为所求的解x0=x1I=1    return (x1, Y(x1), k, I)      

转载于:https://www.cnblogs.com/Negan-ZW/p/8407067.html

数值计算(Python实现)(一)相关推荐

  1. python用复化梯形公式积分_复化梯形求积分——用Python进行数值计算

    用程序来求积分的方法有很多,这篇文章主要是有关牛顿-科特斯公式. 学过插值算法的同学最容易想到的就是用插值函数代替被积分函数来求积分,但实际上在大部分场景下这是行不通的. 插值函数一般是一个不超过n次 ...

  2. python的科学计算库总结

    参考地址:https://www.stxnext.com/blog/most-popular-python-scientific-libraries/?utm_campaign=Pat&utm ...

  3. python中正确的输入语句是_python的输入语句

    Python语言基础4-5程序控制.分支语句.循环语句_计算机软件及应用_IT/... 实验目的 (1)了解 Python 编程环境,进行程序设计的基本训练; (2)熟悉 Python 语言的使用方式 ...

  4. origin和python有什么不同_LabPlot替代Origin用于科研绘图

    Origin软件被许多科研工作者用于数据分析与科研绘图.也许打开10个科研人员的电脑,其中有9台均安装了Origin,至于软件是否是正版,我们就不多说了. 在开源届有一款软件,它同样提供了交互式的科研 ...

  5. 技术 | 入门机器学习必须知道的6件事,你可未必都了然于心了

    翻译 | AI科技大本营(rgznai100) 参与 | shawn 过去两年中,我曾经多次折服于机器学习的魅力.但每当我决定尝试新事物时,经常会不得不重新学习某些概念和课程,其实大部分学习就是这样一 ...

  6. 心得丨老生常谈:普通程序员到底如何入门深度学习?

    作为一名软件工程师,我们应该活到老学到老,时刻与不断发展的框架.标准和范式保持同步.同时,还要能活学活用,在工作中使用最合适的工具,以提高工作效率.随着机器学习在越来越多的应用程序中寻得了一席之地,越 ...

  7. origin使用指导。pdf_LabPlot替代Origin用于科研绘图

    Origin软件被许多科研工作者用于数据分析与科研绘图.也许打开10个科研人员的电脑,其中有9台均安装了Origin,至于软件是否是正版,我们就不多说了. 在开源届有一款软件,它同样提供了交互式的科研 ...

  8. C 怎么读取Cpp文件_python之调用C加速计算(一)

    一.前言 python语言是目前比较火的语言,很容易上手,对数据处理也比较友好,可以用几行代码就能进行一些简单的数据处理工作.但是对于稍微大型的数值计算,或者一些涉及到大量循环的数值计算python的 ...

  9. python3基础知识一

    一.Python3 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建.当然也可以使用del语句删除一些对象.del var,del var_a, ...

  10. [研究方向]什么是深度学习?它到底有多火?

    本文转自CSDN,作者Anymake 本文是一篇供程序员了解的深度学习入门文章.由于目前深度学习很火,也是考研的热门研究方向之一,于是就提供给同学们啦~ 作为一名软件工程师,我们应该活到老学到老,时刻 ...

最新文章

  1. 翻译下 golang package time
  2. 开发日记-20190328 关键词 利用eolinker一键快速生成API接口文档
  3. 找不到或无法加载主类的原因之一
  4. 进程间通信(4) 匿名管道
  5. MyBatis二级缓存的关闭
  6. BOOTSTRAP ---- 重要部分
  7. Soul 网关源码阅读(一) 概览
  8. 【渝粤教育】 广东开放大学21秋期末考试会议运行管理10036k2
  9. 用Protel 99 SE学习原理图的设计及pcb的绘制
  10. 《无线通信基础》笔记
  11. opencv自适应二值化的应用
  12. 【20】前端实习:react官方文档学习(构成与继承)
  13. 如何把多个文件夹里的文件提取出来?
  14. 精英都是方法控,做人做事必备的100套思维框架工具
  15. 集成机器学习服务上架华为应用市场指南
  16. 高级面试题--SpringBoot启动流程解析
  17. HUAWEIWATCH GT3有哪些功能?华为新款手表测评
  18. Unity摄像机跟随转动分析
  19. 深度学习之图像分类(十九)-- Bottleneck Transformer(BoTNet)网络详解
  20. matlab机械手ikine函数,matlab中robotics toolbox的函数解说

热门文章

  1. window 系统上传文件到linux 系统出现dos 格式换行符
  2. Django与SQL语言中——NULL与空字符串的区别
  3. 虚拟机下安装vmtool
  4. java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)
  5. XAMPP 无法启动解决
  6. docker 中不能用vim编辑文件
  7. Idea的一些调试技巧及设置todo
  8. 3D打印技术在医疗领域能做些什么?帮助精确完成手术
  9. 《黑客秘笈——渗透测试实用指南》—第2章2.3节 外部或内部的主动式信息收集...
  10. Codeforces 754E:Dasha and cyclic table