数值分析第四章节 用Python实现数值积分与数值微分

news2024/11/25 6:45:20

参考书籍:数值分析 第五版 李庆杨 王能超 易大义编 第4章 数值积分与数值微分
文章声明:如有发现错误,欢迎批评指正

文章目录

  • 梯形公式
  • 矩形公式
  • 辛普森公式
  • 柯特斯公式
  • 复合梯形公式
  • 复合辛普森公式

4.1数值积分概论
4.1.1数值积分基本思想
使用某种方法近似替代 ∫ a b f ( x ) d x = ( b − a ) f ( ξ ) \int^b_af(x)dx=(b-a)f(\xi) abf(x)dx=(ba)f(ξ)中的 f ( ξ ) f(\xi) f(ξ)避免牛顿莱布尼茨公式求积困难。更一般地我们选取区间 [ a , b ] [a,b] [a,b] k k k个节点,然后用 f ( x k ) f(x_k) f(xk)加权平均得到 f ( ξ ) f(\xi) f(ξ)近似值如: ∫ a b f ( x ) d x ≈ ∑ k = 0 n A k f ( x k ) \int_a^bf(x)dx\approx\sum\limits_{k=0}^nA_kf(x_k) abf(x)dxk=0nAkf(xk)
4.1.2代数精度的概念
定义1:m次代数精度(m次代数精确度)定义。一般欲使 ∫ a b f ( x ) ≈ ∑ k = 0 n A k f ( x k ) \int^b_af(x)\approx\sum\limits_{k=0}^nA_kf(x_k) abf(x)k=0nAkf(xk)有m次代数精度。要求有 ∑ k = 0 n A k = b − a , ∑ k = 0 n A k x k = 1 2 ( b 2 − a 2 ) , … , ∑ k = 0 n A k x k m = 1 m + 1 ( b m + 1 − a m + 1 ) \sum\limits_{k=0}^nA_k=b-a,\sum\limits_{k=0}^nA_kx_k=\frac{1}{2}(b^2-a^2),\dots,\sum\limits_{k=0}^n A_kx_k^m=\frac{1}{m+1}(b^{m+1}-a^{m+1}) k=0nAk=ba,k=0nAkxk=21(b2a2),,k=0nAkxkm=m+11(bm+1am+1)

梯形公式

因为只有两个节点 x 0 , x 1 x_0,x_1 x0,x1,所以只有两个系数 A 0 , A 1 A_0,A_1 A0,A1。如果满足代数精度为1则有 A 0 + A 1 = b − a , A 0 x 0 + A 1 x 1 = 1 2 ( b 2 − a 2 ) A_0+A_1=b-a,A_0x_0+A_1x_1=\frac{1}{2}(b^2-a^2) A0+A1=ba,A0x0+A1x1=21(b2a2)。两个方程但四个未知数难以求解所以对 x 0 , x 1 x_0,x_1 x0,x1作假设。 x 0 = a , x 1 = b x_0=a,x_1=b x0=a,x1=b代入方程组中解得 A 0 = A 1 = 1 2 ( b − a ) A_0=A_1=\frac{1}{2}(b-a) A0=A1=21(ba)。带入原式有 ∫ a b f ( x ) d x ≈ b − a 2 [ f ( a ) + f ( b ) ] \int_a^bf(x)dx\approx\frac{b-a}{2}[f(a)+f(b)] abf(x)dx2ba[f(a)+f(b)]
例子 : ∫ a b λ x e − λ x − 1 d x ,取 a = 0 , b = 1 , λ = 1 吧,即 ∫ 1 2 x e − x − 1 d x 例子:\int_a^{b}\lambda xe^{-\lambda x^{-1}}dx,取a=0,b=1,\lambda=1吧,即\int_1^2xe^{- x^{-1}}dx 例子:abλxeλx1dx,取a=0b=1,λ=1吧,即12xex1dx
反正我是积不出来我太菜了。题目来自概率论与数理统计:知 x ∼ E x p ( λ ) x\sim Exp(\lambda) xExp(λ) E ( 1 x ) E(\frac{1}{x}) E(x1)。我感觉 E ( 1 x ) E(\frac{1}{x}) E(x1)并不存在可能是我理解错了题目意思。但是这里并不重要,只需使用数值方法求解这个定积分吧。

import math
def function(x):
    return x*pow(math.e,-pow(x,-1))
print("{:.8f}".format((2-1)/2*(function(1)+function(2))))
#0.79047038

矩形公式

因为只有一个节点 x 0 x_0 x0,所以只有一个系数 A 0 A_0 A0。如果满足代数精度为1则有 A 0 = b − a , A 0 x 0 = 1 2 ( b 2 − a 2 ) A_0=b-a,A_0x_0=\frac{1}{2}(b^2-a^2) A0=ba,A0x0=21(b2a2)。两个方程且两个未知数直接求解。有 A 0 = b − a , x 0 = 1 2 ( a + b ) A_0=b-a,x_0=\frac{1}{2}(a+b) A0=ba,x0=21(a+b)。代入原式有 ∫ a b f ( x ) d x ≈ ( b − a ) f ( a + b 2 ) \int_a^bf(x)dx\approx(b-a)f(\frac{a+b}{2}) abf(x)dx(ba)f(2a+b)
就同样使用上面那个例子吧。

import math
def function(x):
    return x*pow(math.e,-pow(x,-1))
print("{:.8f}".format((2-1)*function((2-1)/2)))
#0.06766764

4.1.3插值型的求积公式
在区间 [ a , b ] [a,b] [a,b]选取 n + 1 n+1 n+1个节点用拉格朗日插值多项式近似替代 f ( x ) f(x) f(x),即 ∫ a b f ( x ) d x \int_a^bf(x)dx abf(x)dx变为 ∫ a b L n ( x ) \int_a^bL_n(x) abLn(x)。公式仍然为 ∫ a b f ( x ) d x ≈ ∑ k = 0 n A k f ( x k ) \int_a^bf(x)dx\approx\sum\limits_{k=0}^nA_kf(x_k) abf(x)dxk=0nAkf(xk)但是 A k A_k Ak不再由解方程组给出,为 A k = ∫ a b l k ( x ) d x , k = 0 , 1 , … , n A_k=\int_a^bl_k(x)dx,k=0,1,\dots,n Ak=ablk(x)dx,k=0,1,,n。余项为 R [ f ] = ∫ a b [ f ( x ) − L n ( x ) ] d x = ∫ a b R n ( x ) d x R[f]=\int_a^b[f(x)-L_n(x)]dx=\int_a^bR_n(x)dx R[f]=ab[f(x)Ln(x)]dx=abRn(x)dx R n ( x ) = f n + 1 ( ξ ) ( n + 1 ) ! ω n + 1 ( x ) , ω n + 1 ( x ) = ( x − x 0 ) ( x − x 1 ) … ( x − x n ) R_n(x)=\frac{f^{n+1}(\xi)}{(n+1)!}\omega_{n+1}(x),\omega_{n+1}(x)=(x-x_0)(x-x_1)\dots(x-x_n) Rn(x)=(n+1)!fn+1(ξ)ωn+1(x),ωn+1(x)=(xx0)(xx1)(xxn)
4.1.4求积公式的余项
R [ f ] = ∫ a b f ( x ) d x − ∑ k = 0 n A k f ( x k ) = K f ( m + 1 ) ( η ) R[f]=\int_a^bf(x)dx-\sum\limits_{k=0}^nA_kf(x_k)=Kf^{(m+1)}(\eta) R[f]=abf(x)dxk=0nAkf(xk)=Kf(m+1)(η) K K K是不依赖于 f ( x ) f(x) f(x)的待定参数。显然当 f ( x ) f(x) f(x)次数 ≤ m \leq m m时, f m + 1 ( η ) = 0 f^{m+1}(\eta)=0 fm+1(η)=0所以 R [ f ] = 0 R[f]=0 R[f]=0满足m次代数精度。
4.1.5求积公式的收敛性与稳定性
定义2:在求积公式 ∫ a b f ( x ) d x ≈ ∑ k = 0 n A k f ( x k ) \int_a^bf(x)dx\approx\sum\limits_{k=0}^nA_kf(x_k) abf(x)dxk=0nAkf(xk)中,若 lim ⁡ n → ∞ h → 0 ∑ k = 0 n A k f k ( x k ) \lim\limits_{\begin{matrix}n\rightarrow\infty\\h\rightarrow0\end{matrix}}\sum\limits_{k=0}^nA_kf_k(x_k) nh0limk=0nAkfk(xk)。其中 h = max ⁡ 1 ≤ i ≤ n { x i − x i − 1 } h=\max\limits_{1\leq i\leq n}\{x_i-x_{i-1}\} h=1inmax{xixi1},则称求积公式 ∫ a b f ( x ) d x ≈ ∑ k = 0 n A k f ( x k ) \int_a^bf(x)dx\approx\sum\limits_{k=0}^nA_kf(x_k) abf(x)dxk=0nAkf(xk)是收敛的。
定理2:若求积公式 ∫ a b f ( x ) d x ≈ ∑ k = 0 n A k f ( x k ) \int_a^bf(x)dx\approx\sum\limits_{k=0}^nA_kf(x_k) abf(x)dxk=0nAkf(xk)中系数 A k > 0 ( k = 0 , 1 , … , n ) A_k>0(k=0,1,\dots,n) Ak>0(k=0,1,,n),则此求积公式是稳定的。
4.2牛顿-柯特斯公式
4.2.1柯特斯系数与辛普森公式
设将积分区间 [ a , b ] [a,b] [a,b]划分为n等份,步长 h = b − a n h=\frac{b-a}{n} h=nba,选取等距节点 x k = a + k h x_k=a+kh xk=a+kh构造出的插值型求积公式 I n = ( b − a ) ∑ k = 0 n C k ( n ) f ( x k ) I_n=(b-a)\sum\limits_{k=0}^nC_k^{(n)}f(x_k) In=(ba)k=0nCk(n)f(xk),称为牛顿-柯特斯公式,式中 C k ( n ) C_k^{(n)} Ck(n)称为柯特斯系数。由于这是插值型的求积公式所以有 A k = ( b − a ) C k ( n ) A_k=(b-a)C_k^{(n)} Ak=(ba)Ck(n)并且有 A k = ∫ a b l k ( x ) d x , k = 0 , 1 , … , n A_k=\int_a^bl_k(x)dx,k=0,1,\dots,n Ak=ablk(x)dx,k=0,1,,n(这个之前已经说过)。柯特斯系数的理论求解是可行的因为全部是多项式;但是还是记住考试谁想算啊,记住 ≤ 4 \leq 4 4的应该就好。当 n = 1 n=1 n=1时为梯形公式有 c 0 ( 1 ) = c 1 ( 1 ) = 1 2 c_0^{(1)}=c_1^{(1)}=\frac{1}{2} c0(1)=c1(1)=21

辛普森公式

n = 2 n=2 n=2时为辛普森公式有 c 0 ( 2 ) = c 2 ( 2 ) = 1 6 , c 1 ( 2 ) = 2 3 c_0^{(2)}=c_2^{(2)}=\frac{1}{6},c_1^{(2)}=\frac{2}{3} c0(2)=c2(2)=61,c1(2)=32
就同样使用上面那个例子吧。

import math
def function(x):
    return x*pow(math.e,-pow(x,-1))
print("{:.8f}".format((2-1)*(1/6*function(1)+2/3*function((2-1)/2)+1/6*function(2))))
#0.30860189

记一下 n = 3 n=3 n=3时的系数

柯特斯公式

n = 4 n=4 n=4时为柯特斯公式有 c 0 ( 4 ) = c 4 ( 4 ) = 7 90 , c 1 ( 4 ) = c 3 ( 4 = 16 45 , c 2 4 = 2 15 c_0^{(4)}=c_4^{(4)}=\frac{7}{90},c_1^{(4)}=c_3^{(4}=\frac{16}{45},c_2^{4}=\frac{2}{15} c0(4)=c4(4)=907,c1(4)=c3(4=4516,c24=152
就同样使用上面那个例子吧。

import math
def function1(x):
    return x*pow(math.e,-pow(x,-1))
def function2():
    cnt=0;lt=[7/90,16/45,2/15,16/45,7/90]
    for i in range(5):
        cnt+=lt[i]*function1(1+i*(2-1)/4)
    return cnt
print("{:.8f}".format(function2()))
#0.77672741

4.2.2偶阶求积公式的代数精度
当阶 n n n为欧式时,牛顿-柯特斯公式至少有 n + 1 n+1 n+1次代数精度。
4.2.3辛普森公式的余项
算就好了,不难算的。我们来推一下一般。前面已经说了K不依赖于 f ( x ) f(x) f(x),不妨令 f ( x ) = x m + 1 f(x)=x^{m+1} f(x)=xm+1,所以有 K = ∫ a b f ( x ) d x − ∑ k = 0 n A k f ( x k ) f ( m + 1 ) ( η ) = ∫ a b x m + 1 d x − ∑ k = 0 n A k f ( x k ) ( m + 1 ) ! = 1 m + 2 ( b m + 2 − a m + 2 ) − ∑ k = 0 n A k f ( x k ) ( m + 1 ) ! K=\frac{\int_a^bf(x)dx-\sum\limits_{k=0}^nA_kf(x_k)}{f^{(m+1)}(\eta)}=\frac{\int_a^bx^{m+1}dx-\sum\limits_{k=0}^nA_kf(x_k)}{(m+1)!}=\frac{\frac{1}{m+2}(b^{m+2}-a^{m+2})-\sum\limits_{k=0}^nA_kf(x_k)}{(m+1)!} K=f(m+1)(η)abf(x)dxk=0nAkf(xk)=(m+1)!abxm+1dxk=0nAkf(xk)=(m+1)!m+21(bm+2am+2)k=0nAkf(xk)。所以有 R [ f ] = K f ( m + 1 ) ( η ) R[f]=Kf^{(m+1)}(\eta) R[f]=Kf(m+1)(η)
4.3复合求积公式
就是一种简单套路。没啥可以拿来说的。
4.3.1复合梯形公式
4.3.2复合辛普森公式
例 3 : f ( x ) = ∫ 0 1 s i n x x d x 例3:f(x)=\int_0^1\frac{sinx}{x}dx 3:f(x)=01xsinxdx

复合梯形公式

from math import sin
def function2(x):
    return sin(x)/x
def function1(n):
    lt=[0+1/n for i in range(n+1)]
    cnt=0
    for i in range(n):
        cnt+=1/n*((function2(lt[i])+function2(lt[i+1]))/2)
    return cnt
for i in range(10):
    print("复合梯形公式,{:>2d}个区间,{:>2d}个节点,数值积分为{:>10.8f}".format(i+1,i+2,function1(i+1)))

在这里插入图片描述

复合辛普森公式

from math import sin
def function2(x):
    return sin(x)/x
def function1(n):
    lt=[0+1/n for i in range(n+1)]
    cnt=0
    for i in range(n):
        cnt+=1/n*(1/6*function2(lt[i])+2/3*function2((lt[i]+lt[i+1])/2)+1/6*function2(lt[i+1]))
    return cnt
for i in range(10):
    print("复合辛普森公式,{:>2d}个区间,{:>2d}个节点,数值积分为{:>10.8f}".format(i+1,i+2,function1(i+1)))

在这里插入图片描述
就这样吧受不了了。后面好像也不会考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue全家桶高仿小米商城】——(四)项目基础架构

第四章:项目基础架构 此章节全力讲解前端基本项目架构,通过此章节可搭建一个通用性的前端架构,内容涵盖跨域方案、路由封装、错误拦截等。 文章目录 第四章:项目基础架构一、前端跨域解决什么是前端跨域?怎么解决前端…

将h5项目转成uniapp小程序

打开微信开发者工具&#xff0c;新建项目&#xff1b;pages下index文件中index.wxml文件打开内容全删除&#xff1b;写入<web-view srchttp://域名.com/></web-view>&#xff1b;编译&#xff0c;成功在小程序中展示&#xff1b;其后&#xff0c;正常按照小程序流程…

scp命令及后台运行

将项目从一个服务器迁移到另外一个服务器的时候 当项目很大的时候 可以用到如下 1、scp -r 本地项目路径 需要迁移服务器的IP:/存放路径 scp -r /u01/media/Disk1/ 192.168.1.31:/u01/media/ reverse mapping checking getaddrinfo for bogon failed - POSSIBLE BREAK-IN ATTEM…

算法篇——动态规划 01背包问题 (js版)——更新新题

416. 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 链接&#xff1a;力扣 解题思路&#xff1a; 这道题看似是比较简单的背包问题&#xff1a; 首先可以通过判断数组和是否是…

【ZenUML】时序图之ZenUML详解

时序图 序列图是一种交互图&#xff0c;显示进程如何彼此操作以及顺序。 Mermaid可以使用ZenUML渲染序列图。请注意&#xff0c;ZenUML使用的语法与mermaid中的原始序列图不同。 目前&#xff0c;最新版本mermaid v10.2.3 暂时不单独支持zenuml语法,需要配合mermaid-zenuml一…

动态规划_可视化校园导航Floyd算法应用

目录 引言 图片展示 视频展示 针对校园导航问题的分析 关键技术和算法介绍 详细介绍&#xff1a;算法的实现 总结 代码 附件&#xff1a;Map.png 引言 本文主要通过详细的程序打印和作者的推理过程&#xff0c;描述作者对Floyd算法的理解&#xff0c;阐述其中的动态规划思想是如…

突然发现CSDN变得不一样了【建议】【活动】

突然发现CSDN变得不一样了【活动】 前言推荐突然发现CSDN变得不一样了关于上传代码包关于上传视频关于运行代码关于插入代码1关于插入代码2关于社区的建立关于社区的管理关于此次活动的评选关于排行突然发现说明一下关于我 最后 前言 2023-6-19 23:34:04 本文章仅用于参加 20…

【Python 随练】年龄计算问题

题目&#xff1a; 有 5 个人坐在一起&#xff0c;问第五个人多少岁&#xff1f;他说比第 4 个人大 2 岁。问第 4 个人岁数&#xff0c;他说比第3 个人大 2 岁。问第三个人&#xff0c;又说比第 2 人大两岁。问第 2 个人&#xff0c;说比第一个人大两岁。最后问第一个人&#x…

C++基础(8)——类和对象(6)

前言 本文主要介绍了C中多态的基本知识 4.7.1&#xff1a;多态的基本概念和原理剖析 1&#xff1a;基本概念 静态多态&#xff1a;函数重载、运算符重载 动态多态&#xff1a;派生类和虚函数实现运行时多态 静态多态在编译阶段确定函数地址&#xff1b;动态多态在运行阶段…

微信小程序uniapp+springboot实现小程序服务通知

微信小程序uniappspringboot实现小程序服务通知 1. 实现效果 2. 模板选用及字段类型判断 2.1 开通订阅消息,并选用模板 如果点击订阅消息让开启消息订阅开启后就可以出现以下页面,我本次使用的模板是月卡到期提醒模板,点击选用即可 2.2 查看模板字段类型 TemplateId后续会使用…

面试官问:Redis 分布式锁如何自动续期?

资深面试官&#xff1a;你们项目中的分布式锁是怎么实现的&#xff1f; 老任&#xff1a;基于redis的set命令&#xff0c;该命令有nx和ex选项。 资深面试官&#xff1a;那如果锁到期了&#xff0c;业务还没结束&#xff0c;如何进行自动续期呢&#xff1f; 老任&#xff1a;…

第九章 番外篇:TORCHSCRIPT

下文中的代码都使用参考教程中的例子。 会给出一点自己的解释。 参考教程&#xff1a; 文章目录 Introduction复习一下nn.Module()Torchscripttorch.jit.ScriptModule()torch.jit.script()torch.jit.trace()一个小区别 使用示例tracing Modulesscripting ModuleMixing scripti…

乐鑫线上研讨会|探索 LCD 屏在物联网中的发展趋势

LCD 屏通过显示实时信息并提供交互式体验&#xff0c;现已成为各类设备的重要组成部分。在当下的 AIoT 时代&#xff0c;随着物联网技术的快速发展和应用场景的不断拓展&#xff0c;LCD 作为人机交互的主要输入输出设备&#xff0c;在智能家居、智能安防、工业控制、智慧城市等…

C#开发的OpenRA游戏之建造物品的窗口5

C#开发的OpenRA游戏之建造物品的窗口5 前面分析了TAB窗口的建立和运行,现在关注它的子窗口,也就是ProductionPaletteWidget类实现的窗口,这个窗口主要用来显示所有可以创建物品的ICON图标。用户可以通过这个窗口实现物品创建,如下图所示: 比如要创建电厂,就是点击上面…

【好书精读】网络是怎样连接的 之 创建套接字

&#xff08;该图由AI制作 学习AI绘图 联系我&#xff09; 目录 协议栈的内部结构 套接字的实体就是通信控制信息 真正的套接字 调用 socket 时的操作 从应用程序收到委托后 &#xff0c; 协议栈通过 TCP 协议收发数据的操作可以分为 4 个阶段 。 首先是创 建套接字 &…

SothisAI创建容器和conda环境

1.创建容器&#xff08;设置torch版本&#xff0c;cuda&#xff0c;python版本等等&#xff09;后进入web shell 2.shell里输入ssh username&#xff08;你自己的用户名&#xff09; IP&#xff08;你创建的实例的ip地址&#xff09; 3.在web平台创建你自己的文件夹 4.shel…

小程序请求封装、使用

小程序请求封装 1、要了解方法 1.1、wx.request() wx.request 发起 HTTPS 网络请求。&#xff08;详情点击wx.request查看官方文档&#xff09; 1.2、wx.showModal() wx.showModal 显示模态对话框。&#xff08;详情点击wx.showModal查看官方文档&#xff09; 1.3、wx.sho…

Swift 周报 第三十一期

文章目录 前言新闻和社区注册 WWDC23 实验室和活动Apple Vision Pro 和 visionOS 撼世登场App Store 中新增的隐私功能 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第二十二期&#xff0c;每个模块已初步成型。各位读者如果…

奇数分频器电路设计

目录 奇数分频器电路设计 1、奇数分频器电路简介 2、实验任务 3、程序设计 3.1、7分频电路代码 3.2、仿真验证 3.2.1、编写 TB 文件 3.2.2、仿真验证 4、用状态机实现7分频电路设计 4.1、代码如下&#xff1a; 4.2、使用状态机的好处 奇数分频器电路设计 前面一节我…

前端JS限制绕过测试-业务安全测试实操(17)

前端JS限制绕过测试,请求重放测试 前端JS限制绕过测试 测试原理和方法 很多商品在限制用户购买数量时,服务器仅在页面通过JS脚本限制,未在服务器端校验用户提交的数量,通过抓取客户端发送的请求包修改JS端生成处理的交易数据,如将请求中的商品数量改为大于最大数限制的值…