【数值计算方法】《工程数值计算Python教程》笔记

news2024/11/17 23:47:09

文章目录

第一章:绪论


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}')

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

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

相关文章

力扣日记12.19-【二叉树篇】二叉搜索树中的搜索

力扣日记&#xff1a;【二叉树篇】二叉搜索树中的搜索 日期&#xff1a;2023.12.19 参考&#xff1a;代码随想录、力扣 700. 二叉搜索树中的搜索 题目描述 难度&#xff1a;简单 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中…

微软在 Perforce Helix 核心服务器中发现4个安全漏洞

微软分析师在对Perforce Helix的游戏开发工作室产品进行安全审查时&#xff0c;发现为游戏、政府、军事和技术等部门广泛使用的源代码管理平台 Perforce Helix Core Server 存在四大漏洞&#xff0c;并于今年 8 月底向 Perforce 报告了这些漏洞&#xff0c;其中一个漏洞被评为严…

HarmonyOS应用开发实战—开箱即用的活动创建页面【ArkTS】【鸿蒙专栏-33】

一.HarmonyOS应用开发实战—开箱即用的个人主页页面【ArkTS】【鸿蒙专栏-32】 1.1 项目背景 HarmonyOS(鸿蒙操作系统)是华为公司推出的一种分布式操作系统。它被设计为一种全场景、全连接的操作系统,旨在实现在各种设备之间的无缝协同和共享,包括智能手机、平板电脑、智能…

MFC 窗口创建过程与消息处理

目录 钩子简介 代码编写 窗口创建过程分析 消息处理 钩子简介 介绍几个钩子函数&#xff0c;因为它们与窗口创建工程有关 安装钩子函数 HHOOK SetWindowsHookExA([in] int idHook,[in] HOOKPROC lpfn,[in] HINSTANCE hmod,[in] DWORD dwThreadId ); 参数说明…

Kafka 安装与部署

目录 Kafka 下载 &#xff08;1&#xff09;将 kafka_2.11-2.4.1.tgz 上传至 /opt/software/ &#xff08;2&#xff09;解压安装包至 /opt/module/ [huweihadoop101 ~]$ cd /opt/software/ [huweihadoop101 software]$ tar -zxvf kafka_2.11-2.4.1.tgz -C ../module/&#…

PB开发Windows服务方案

1、项目简介 ​ PB作为一门客户端开发语言&#xff0c;虽然官方并未提供标准的Windows服务开发方案&#xff0c;但使用PB开发Windows服务并非无法实现。自PB9开始&#xff0c;PB提供了PBNI接口&#xff0c;PB与C可以通过这个接口互相调用&#xff0c;而C可以开发Windows服务。…

Java智慧工地数字化云平台源码(SaaS模式)

智慧工地是智慧城市理念在建筑工程行业的具体体现&#xff0c;智慧工地解决方案是建立在高度信息化基础上一种支持人事物全面感知、施工技术全面智能、工作互通互联、信息协同共享、决策科学分析、风险智慧预控的新型信息化手段。围绕人、机、料、法、环等关键要素&#xff0c;…

【算法与数据结构】376、LeetCode摆动序列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题难点在于要考虑到不同序列的情况&#xff0c;具体来说要考虑一下几种特殊情况&#xff1a; 1、上…

python学习,2.简单的数据类型

1.了解数及运算 整数&#xff1a;1&#xff0c;2&#xff0c;3。 运算符&#xff1a;加减乘除&#xff0c;**(乘方) 浮点数&#xff1a;python将所有带小数点的数称为浮点数。 这一块和别的语言有些不一样&#xff0c; 像C&#xff0c;分为float&#xff0c;double&#x…

河南开放大学形成性考核 平时作业 统一参考资料

试卷代号&#xff1a;1288 现代管理原理 参考试题&#xff08;开卷&#xff09; 一、单项选择&#xff08;下列选项中只有一个答案是准确的&#xff0c;请将其序号填入括号中。每小题2分&#xff0c;共20分&#xff09; 1.“凡事预则立&#xff0c;不预则废”&#xff0c;说…

极简Windows本机下载安装启动zookeeper

1.下载zookeeper Apache Download Mirrors 注意&#xff01;&#xff01;&#xff01;&#xff1a;安装的路径不要用中文 2.生成zoo.cfg文件 复制zookeeper的conf目录下的zoo_simple.cfg文件&#xff0c;并重命名为zoo.cfg 修改zoo.cfg文件中的路径(data&#xff0c;log…

Navicat 16最新操作

Navicat 16最新操作 1 知识小课堂1.1 Navicat 161.2 其他数据库连接工具 2 下载和安装2.1 下载2.2 安装 1 知识小课堂 1.1 Navicat 16 Navicat 16是一款功能强大的数据库管理工具&#xff0c;可以创建多个连接&#xff0c;方便管理不同类型的数据库&#xff0c;包括MySQL、Ora…

如何利用研发效能度量工具分析代码评审的效率、质量与瓶颈?

代码评审&#xff08;Code Review&#xff09;是保障代码质量中一个非常重要的环节&#xff0c;也是保证项目交付质量的关键一环。代码评审的开展对于产品质量提升、工程素养提升、研发团队的技术分享交流&#xff0c;或是完善团队代码规范&#xff0c;都能起到重要的促进作用。…

​【EI会议征稿通知】第三届智能系统、通信与计算机网络国际学术会议(ISCCN 2024)

第三届智能系统、通信与计算机网络国际学术会议&#xff08;ISCCN 2024&#xff09; 2024 3rd International Conference on Intelligent Systems, Communications and Computer Networks 第三届智能系统、通信与计算机网络国际学术会议&#xff08;ISCCN 2024&#xff09;将…

期货股市联动(期股联动助推资本市场上扬)

期股联动——期货股市助推资本市场上扬 随着我国资本市场的不断发展&#xff0c;期货和股票这两个市场也在逐渐紧密地联系起来。期货和股票的相互作用是一种“期股联动”&#xff0c;它能够促进资本市场的上扬。 期货与股票市场 期货市场是一种标准化的场外交易市场&#xf…

OpenAI发布AGI安全风险框架!董事会可随时叫停GPT-5等模型发布,奥特曼也得乖乖听话

OpenAI 再次强调模型安全性&#xff01;AGI 安全团队 Preparedness 发布模型安全评估与监控框架&#xff01; 这两天关注 AI 圈新闻的小伙伴们可能也有发现&#xff0c;近期的 OpenAI 可谓进行了一系列动作反复强调模型的“安全性”。 前有 OpenAI 安全系统&#xff08;Safety…

HarmonyOS(十五)——状态管理之@Prop装饰器(父子单向同步)

上一篇文章我们认识了状态管理的State装饰器&#xff08;组件内状态&#xff09;&#xff0c;接下来我们学习另外一个状态管理装饰器Prop装饰器。 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的&#xff0c;但是变化不会同步回其父组件。 说明&#…

可视化数据监控大屏网页界面,数据大屏模版PS资料(免费UI源文件)

数据大屏模板在大数据领域被广泛应用&#xff0c;其优势在于能够将复杂的数据通过图形、图表等方式呈现出来&#xff0c;使数据更易于理解。数据大屏模板可以用来进行数据分析。通过对数据的比较、趋势分析、异常检测等&#xff0c;可以发现数据中的规律和问题&#xff0c;为决…

SQL进阶理论篇(十):数据库中的锁

文章目录 简介按照锁的粒度进行划分从数据库管理的角度进行划分从程序员的角度进行划分为什么共享锁会发生死锁&#xff1f;参考文献 简介 索引和锁&#xff0c;是数据库中的两个核心知识点。 索引的相关知识点&#xff0c;在之前的几章里我们已经介绍的差不多了。接下来我们…

CEC2013(python):五种算法(HHO、WOA、GWO、DBO、PSO)求解CEC2013(python代码)

一、五种算法简介 1、哈里斯鹰优化算法HHO 2、鲸鱼优化算法WOA 3、灰狼优化算法GWO 4、蜣螂优化算法DBO 5、粒子群优化算法PSO 二、5种算法求解CEC2013 &#xff08;1&#xff09;CEC2013简介 参考文献&#xff1a; [1] Liang J J , Qu B Y , Suganthan P N , et al. P…