《工程数值计算Python教程》笔记

文章目录

第一章:绪论


1.1 1.1 1.1|数值计算在工程科学中的重要性


1.2 1.2 1.2|数值计算方法


1.3 1.3 1.3|程序设计

盒图
  • 盒图也称为 N − S N-S NS结构化流程图
  • 如果一个算法可以用 N − S N-S NS流程图描述,则说明它是结构化的
  • 盒图示例

1

计算方法的选取
减少运算次数
  • 计算多项式 P n ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n P_{n} (x) = a_{0} + a_{1} x + a_{2} x^{2} + \cdots + a_{n} x^{n} Pn(x)=a0+a1x+a2x2++anxn的值
    • 如果逐项计算,所需乘法次数为 1 + 2 + ⋯ + n = 1 2 n ( n + 1 ) 1 + 2 + \cdots + n = \cfrac{1}{2} n (n + 1) 1+2++n=21n(n+1),所需加法次数为 n n n

S 0 = a 0 S k = a k x k ( k = 1 , 2 , ⋯   , n ) P n ( x ) = ∑ i = 0 n S i S_{0} = a_{0} \\ S_{k} = a_{k} x^{k} (k = 1 , 2 , \cdots , n) \\ P_{n} (x) = \displaystyle\sum\limits_{i = 0}^{n}{S_{i}} S0=a0Sk=akxk(k=1,2,,n)Pn(x)=i=0nSi

    • 如果采用递推法(秦九韶算法),则只需 n n n次乘法和 n n n次加法

S n = a n S k = x S k − 1 + a k ( k = n − 1 , n − 2 , ⋯   , 0 ) P n ( x ) = S 0 S_{n} = a_{n} \\ S_{k} = x S_{k - 1} + a_{k} (k = n - 1 , n - 2 , \cdots , 0) \\ P_{n} (x) = S_{0} Sn=anSk=xSk1+ak(k=n1,n2,,0)Pn(x)=S0

避免相近的数相减
  • 在计算过程中,应避免相近的数相减,不然会使有效数字的位数大大减少

1.4 1.4 1.4|误差的来源、表示及传递

误差的来源和分类
模型误差
  • 模型与实际问题的误差
观测误差
  • 通常数学模型中都包含一些需要实验测定的参数,这些参数存在测定值与真实值之间的误差
截断误差
  • 数值计算方法中,常用收敛无穷级数的前几项代替无穷级数
  • 截断误差与算法有关,常用截断误差限或截断误差的阶来判断某种算法的优劣
舍入误差
  • 由于计算机位数有限引起的误差称为舍入误差
  • 舍入误差与计算机有关,也与数学表达式有关
误差的表示
绝对误差
  • x x x表示准确值 x ∗ x^{*} x的近似值,绝对误差为 e = x − x ∗ e = x - x^{*} e=xx
  • 通常 x ∗ x^{*} x是未知的,故 e e e的真实值也是不知道的,常根据实际情况估算它的上限, ∣ e ∣ = ∣ x − x ∗ ∣ ≤ ε | e | = | x - x^{*} | \leq \varepsilon e=xxε x − ε ≤ x ∗ ≤ x + ε x - \varepsilon \leq x^{*} \leq x + \varepsilon xεxx+ε ε \varepsilon ε称为 x x x的绝对误差限
相对误差
  • e r = e x = x − x ∗ x e_{r} = \cfrac{e}{x} = \cfrac{x - x^{*}}{x} er=xe=xxx
  • ∣ e r ∣ = ∣ x − x ∗ x ∣ ≤ ε r | e_{r} | = | \cfrac{x - x^{*}}{x} | \leq \varepsilon_{r} er=xxxεr
平均误差
  • 算数平均值 x ˉ = 1 n ∑ i = 1 n x i \bar{x} = \cfrac{1}{n} \displaystyle\sum\limits_{i = 1}^{n}{x_{i}} xˉ=n1i=1nxi
  • 平均误差为 δ = 1 n ∑ i = 1 n d i = 1 n ∑ i = 1 n ∣ x ˉ − x i ∣ \delta = \cfrac{1}{n} \displaystyle\sum\limits_{i = 1}^{n}{d_{i}} = \cfrac{1}{n} \displaystyle\sum\limits_{i = 1}^{n}{| \bar{x} - x_{i} |} δ=n1i=1ndi=n1i=1nxˉxi
标准误差
  • σ = 1 n − 1 ∑ i = 1 n d i 2 \sigma = \sqrt{\cfrac{1}{n - 1} \displaystyle\sum\limits_{i = 1}^{n}{d_{i}^{2}}} σ=n11i=1ndi2
  • 标准误差也称为均方根误差
误差的传递
误差在和、差计算中的传递
  • x ∗ x^{*} x y ∗ y^{*} y的近似值为 x x x y y y z ∗ = x ∗ + y ∗ z^{*} = x^{*} + y^{*} z=x+y
绝对误差
  • e z = e x + e y e_{z} = e_{x} + e_{y} ez=ex+ey
  • ∣ e z ∣ ≤ ∣ e x ∣ + ∣ e y ∣ | e_{z} | \leq | e_{x} | + | e_{y} | ezex+ey
相对误差
  • e r z = ( x + y ) − ( x ∗ + y ∗ ) x + y = x − x ∗ x × x x + y + y − y ∗ y × y x + y e_{rz} = \cfrac{(x + y) - (x^{*} + y^{*})}{x + y} = \cfrac{x - x^{*}}{x} \times \cfrac{x}{x + y} + \cfrac{y - y^{*}}{y} \times \cfrac{y}{x + y} erz=x+y(x+y)(x+y)=xxx×x+yx+yyy×x+yy
    • x x x y y y同号时, ∣ x x + y ∣ ≤ 1 | \cfrac{x}{x + y} | \leq 1 x+yx1 ∣ y x + y ∣ ≤ 1 | \cfrac{y}{x + y} | \leq 1 x+yy1 e r z ≤ ∣ e r x ∣ + ∣ e r y ∣ e_{rz} \leq | e_{rx} | + | e_{ry} | erzerx+ery
    • x + y ≈ 0 x + y \approx 0 x+y0时,可能有 e r z ≫ ∣ e r x ∣ + ∣ e r y ∣ e_{rz} \gg | e_{rx} | + | e_{ry} | erzerx+ery
误差在积、商计算中的传递
  • x ∗ x^{*} x y ∗ y^{*} y均为正数,近似值分别为 x x x y y y,绝对误差为 d x = x − x ∗ dx = x - x^{*} dx=xx d y = y − y ∗ dy = y - y^{*} dy=yy,相对误差为 x − x ∗ x = d x x = d ln ⁡ x \cfrac{x - x^{*}}{x} = \cfrac{dx}{x} = d \ln{x} xxx=xdx=dlnx y − y ∗ y = d y y = d ln ⁡ y \cfrac{y - y^{*}}{y} = \cfrac{dy}{y} = d \ln{y} yyy=ydy=dlny
乘积的绝对误差
  • d ( x y ) = x d y + y d x d(xy) = x dy + y dx d(xy)=xdy+ydx
乘积的相对误差
  • d ln ⁡ x y = d ( ln ⁡ x + ln ⁡ y ) = d x x + d y y d \ln{xy} = d(\ln{x} + \ln{y}) = \cfrac{dx}{x} + \cfrac{dy}{y} dlnxy=d(lnx+lny)=xdx+ydy
商的绝对误差
  • d ( x / y ) = y d x − x d y y 2 d(x / y) = \cfrac{y dx - x dy}{y^{2}} d(x/y)=y2ydxxdy
商的相对误差
  • d ln ⁡ x / y = d ( ln ⁡ x − ln ⁡ y ) = d x x − d y y d \ln{x / y} = d(\ln{x} - \ln{y}) = \cfrac{dx}{x} - \cfrac{dy}{y} dlnx/y=d(lnxlny)=xdxydy

第二章:Python基础


2.1 2.1 2.1|概述


第三章:方程(组)的求解


3.1 3.1 3.1|非线性代数方程的求根

二分法
原理
  • f f f是一个连续函数,假设存在一个区间 [ a , b ] [a,b] [a,b] f f f在区间的两端点处的值符号相反,即 f ( a ) f ( b ) < 0 f(a) f(b) < 0 f(a)f(b)<0,于是, f f f在区间 [ a , b ] [a,b] [a,b]有一个根,这可由函数的中值定理得到
步骤
  • 有一个区间 [ a , b ] [a,b] [a,b]和值 u = f ( a ) u = f(a) u=f(a) v = f ( b ) v = f(b) v=f(b),满足 u v < 0 uv < 0 uv<0

  • 构造区间的中点 c = ( a + b ) / 2 c = (a + b) / 2 c=(a+b)/2并计算 w = f ( c ) w = f(c) w=f(c),可能碰巧 w = 0 w = 0 w=0,则算法结束

  • 通常情况下 w ≠ 0 w \neq 0 w=0,如果 w u < 0 wu < 0 wu<0,则可断定在区间 [ a , c ] [a,c] [a,c]中存在 f f f的一个根,因而将 c c c的值存储到 b b b中,将 w w w的值存储到 v v v中,如果 w v < 0 wv < 0 wv<0,则 f f f在区间 [ c , b ] [c,b] [c,b]中有一个根,因而将 c c c的值存储到 a a a中,将 w w w的值存储到 u u u

  • 重复进行,每次区间长度减少一半,直到区间达到需要的精度

  • 结束时,根的最佳估计是 ( a + b ) / 2 (a + b) / 2 (a+b)/2

  • 在程序运行过程中,中点处函数值 w = 0 w = 0 w=0的概率是极低的,为此增加一个判断语句是不值得的,对任意区间 [ a , b ] [a,b] [a,b],只要 u v ≤ 0 uv \leq 0 uv0即可保证区间中包含零点

Python实现
  • 求解 f ( x ) = x 3 − 3 x + 1 f(x) = x^{3} - 3x + 1 f(x)=x33x+1在区间 [ 0 , 1 ] [0,1] [0,1]上的零点
def bisect(f, a, b, eps=1e-9, args=()):
    u, v = f(a, *args), f(b, *args)

    if u * v <= 0:
        while abs(a - b) > eps:
            c = (a + b) / 2
            w = f(c, *args)

            if w * u <= 0:
                b, v = c, w
            else:
                a, u = c, w

        return (a + b) / 2
    else:
        print(f'The function values at {a} and {b} have the same sign')


def f(x): return x * (x * x - 3) + 1


if __name__ == '__main__':
    a, b = 0, 1
    eps = 1e-9

    res = bisect(f, a, b, eps)

    print('The result is:', res)
  • 求解 f ( x ) = cosh ⁡ ( x 2 + 1 − e x ) + log ⁡ ∣ sin ⁡ x ∣ f(x) = \cosh{(\sqrt{x^{2} + 1} - e^{x})} + \log{| \sin{x} |} f(x)=cosh(x2+1 ex)+logsinx在区间 [ 0 , 1 ] [0,1] [0,1]上的零点
    • 该式在 0 0 0点没有定义,计算会发生溢出,此时可以选择一个很小的值作为左边界,如 1 0 − 10 10^{-10} 1010
import numpy as np
from bisection import bisect


def f(x): return np.cosh(np.sqrt(x * x + 1) - np.exp(x)) + np.log10(np.abs(np.sin(x)))


if __name__ == '__main__':
    a, b = 1e-10, 1

    res = bisect(f, a, b)

    print(f'The result is: {res}')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java代码审计】目录穿越篇

【Java代码审计】目录穿越篇 1.Java中的目录穿越2.目录穿越漏洞审计3.Java中目录穿越漏洞修复 1.Java中的目录穿越 目录穿越漏洞产生的本质是路径可控&#xff0c;一旦涉及文件的读取问题便会涉及java.io.File类&#xff0c;因此在审计这类漏洞时可以优先查找java.io.File引用…

C++初阶-list类的模拟实现

list类的模拟实现 一、基本框架1.1 节点类1.2 迭代器类1.3 list类 二、构造函数和析构函数2.1 构造函数2.2 析构函数 三、operator的重载和拷贝构造3.1 operator的重载3.2 拷贝构造 四、迭代器的实现4.1 迭代器类中的各种操作4.1 list类中的迭代器 五、list的增容和删除5.1 尾插…

爬虫工作量由小到大的思维转变---<第十一章 Scrapy之sqlalchemy模版和改造(番外)>

前言: 正常的pymysql当然问题不大,但是我个人还是建议:sqlalchemy! 因为他更能让我们把精力放在表单设计上,而不执着于代码本身了. (-----版权所有。未经作者书面同意&#xff0c;不得转载或用于任何商业用途!----) 正文: 先提供一个基础模版: 表图: 创建表的sql: CREA…

软件设计师——法律法规(三)

&#x1f4d1;前言 本文主要是【法律法规】——软件设计师——法律法规的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304…

《科技风》期刊发表投稿方式、收稿方向

《科技风》杂志是经国家新闻出版总署批准&#xff0c;河北省科学技术协会主管&#xff0c;河北省科技咨询服务中心主办的国内公开发行的大型综合类科技期刊。 该刊集科技性、前瞻性、创新性和专业性于一体&#xff0c;始终以“把脉科技创新 引领发展风尚”为办刊宗旨&#xff…

ES-脚本

脚本 简单使用 POST product/_update/2 {"script": {"source": "ctx._source.salary1" #将薪水字段的值 1} }预定义变量 POST product/_update/2 {"script": {"lang": "painless","source": "…

Android studio中文汉化教程

相比于jetbrains的软件直接在软件内搜索chinese 就可以找到中文包相比&#xff0c;Android studio需要手动安装&#xff0c;接下来就给大家介绍下如何汉化 一、确认版本号 根据版本下载对应的中文汉化包&#xff0c;如果安装的汉化包版本不对应&#xff0c;可能会导致安装失败。…

升华 RabbitMQ:解锁一致性哈希交换机的奥秘【RabbitMQ 十】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 升华 RabbitMQ&#xff1a;解锁一致性哈希交换机的奥秘【RabbitMQ 十】 前言第一&#xff1a;该插件需求为什么需要一种更智能的消息路由方式&#xff1f;一致性哈希的基本概念&#xff1a; 第二&…

大华 DSS 数字监控系统 itcBulletin SQL 注入漏洞复现

0x01 产品简介 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。 0x02 漏洞概述 大华 DSS存在SQL注入漏洞,攻击者 /portal/services/itcBulletin 路由发送特殊构造的数据包,利用报错注入获取数据库…

WPF-UI HandyControl 控件简单实战

文章目录 前言UserControl简单使用新建项目直接新建项目初始化UserControlGeometry:矢量图形额外Icon导入最优解决方案 按钮Button切换按钮ToggleButton默认按钮图片可切换按钮加载按钮切换按钮 单选按钮和复选按钮没有太大特点&#xff0c;就不展开写了总结 DataGrid数据表格G…

【机器学习】044_Kaggle房价预测(机器学习模型实战)

参考自《动手学深度学习》中“Kaggle比赛实战&#xff1a;预测房价”一节 一、数据准备 首先从网站上下载要获取的房价数据。 DATA_HUB是一个字典&#xff0c;用来将数据集名称的字符串和数据集相关的二元组一一对应。 二元组包含两个值&#xff1a;数据集的URL和用来验证文…

基于linux系统的Tomcat+Mysql+Jdk环境搭建(二)jdk1.8 linux 上传到MobaXterm 工具的已有session里

【JDK安装】 1.首先下载一个JDK版本 官网地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载1.8版本&#xff0c;用红框标注出来了&#xff1a; 也许有的同学看到没有1.8版本&#xff0c;你可以随便下载一个linux的…

本地运行大语言模型并可视化(Ollama+big-AGI方案)

目前有两种方案支持本地部署&#xff0c;两种方案都是基于llamacpp。其中 Ollama 目前只支持 Mac&#xff0c;LM Studio目前支持 Mac 和 Windows。 LM Studio&#xff1a;https://lmstudio.ai/ Ollama&#xff1a;https://ollama.ai/download 本文以 Ollama 为例 step1 首先下…

限流常用算法以及基于Sentinel的微服务限流及熔断

一、服务限流的作用及实现 在没有任何保护机制的情况下&#xff0c;如果所有的流量都进入服务器&#xff0c;很可能造成服务器宕机导致整个系统不可用&#xff0c;从而造成巨大的损失。为了保证系统在这些场景中仍然能够稳定运行&#xff0c;就需要采取一定的系统保护策略&…

智能优化算法应用:基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.天牛须算法4.实验参数设定5.算法结果6.参考文…

Ubuntu 常用命令之 ls 命令用法介绍

Ubuntu ls 命令用法介绍 ls是Linux系统下的一个基本命令&#xff0c;用于列出目录中的文件和子目录。它有许多选项可以用来改变列出的内容和格式。 以下是一些基本的ls命令选项 -l&#xff1a;以长格式列出文件&#xff0c;包括文件类型、权限、链接数、所有者、组、大小、最…

Java 第10、11章 本章作业

目录 6 综合编程题7 成员内部类应用8 枚举类 & switch 6 综合编程题 3. 交通工具工厂类&#xff1a;由于在任务中只需要调用其中获得交通工具的方法&#xff0c;可以将方法定义为静态方法&#xff0c;这样就不用先创建工厂类的对象&#xff0c;直接“类名.方法” 即可。为了…

基于Java SSM框架实现疫情居家办公OA系统项目【项目源码+论文说明】

基于java的SSM框架实现疫情居家办公OA系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识…

3.1 内容管理模块 - 工程搭建、课程查询、配置Swagger、数据字典

文章目录 内容管理模块一、基础工程搭建1.1 需求分析1.2 业务流程1.3 数据模型1.4 创建模块工程1.4.1 介绍1.4.2 xuecheng-plus-content 聚合工程1.4.3 模块演示 二、课程查询准备2.1 需求分析2.1.1 业务流程2.1.2 数据模型 2.2 生成PO类2.2.1 新增Maven配置2.2.2 课程基本信息…

文档安全加固:零容忍盗窃,如何有效预防重要信息外泄

文档安全保护不仅需要从源头着手&#xff0c;杜绝文档在使用和传播过程中产生的泄密风险&#xff0c;同时还需要对文档内容本身进行有效的保护。为了防范通过拷贝、截屏、拍照等手段盗窃重要文档内容信息的风险&#xff0c;迅软DSE加密软件提供了文档加密保护功能&#xff0c;能…