搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
Python实验编程(自然科学探究)
0.00     定价 ¥ 68.00
图书来源: 浙江图书馆(由浙江新华配书)
此书还可采购25本,持证读者免费借回家
  • 配送范围:
    浙江省内
  • ISBN:
    9787030763006
  • 作      者:
    编者:鲁尚文//李佳熹//程锐|责编:孙力维//杨凯
  • 出 版 社 :
    科学出版社
  • 出版日期:
    2023-10-01
收藏
内容介绍
本书选取一些自然科学的经典知识和案例,如数学中的傅里叶变换、圆周率,计算机技术中的RSA加密,数学建模中的微分方程数值算法,航天领域的火箭、发动机、卫星轨道和卫星探测等,将这些案例中的知识点、研究和计算过程与Python编程的应用有机结合,带领读者初步体验和学习使用Python进行数学建模、数据处理等。 本书可作为理工类学生学习Python、数学建模或使用相关工具的参考书,也可作为学有余力的高中阶段学生的探究性学习或科普知识用书。
展开
精彩书摘

第1章 数学可视化
  1.1 离散傅里叶变换和频域变换
  傅里叶分析是对声音、图像等计算机数据进行分析和处理的**知识。本节我们通过合成声音、傅里叶分析和频谱处理等一系列操作,让读者对傅里叶分析的原理和应用有一个较为直观的理解。图1.1 显示了音频数据合成和在频域进行声调变换前后,声音和频谱的展示及对比。本节后续内容将遵循这个流程进行实操。
  图1.1 通过在频域上处理音频数据改变声音
  表1.1 中列出了文中使用的Python 程序库。这些程序库被众多用户熟知并广泛使用。截至2023 年3 月,表1.1 中的程序库均需要在Python 3.8或更高版本运行。建议读者用*新版本的Python 搭建运行环境,运行本文中的代码。
  表1.1 本文使用的Python 程序库
  1.1.1 傅里叶级数和离散傅里叶变换
  如图1.1 所示,一般的波动信号可以分解为不同周期的正弦波的总和。求解一个波动信号包含哪些不同周期的正弦波(三角函数)的技术,称为傅里叶分析。本小节介绍傅里叶级数展开和离散傅里叶变换的基础知识,不对数学原理做过多展开。
  1. 傅里叶级数
  简单地说,傅里叶级数是用三角函数之和逼近一个函数。设函数?? (??) 的周期为?? ,它的傅里叶级数表达式如下:
  (1.1)
  式(1.1) 中的系数???? 和???? 称为傅里叶系数。将?? (??) 看作周期性声音信号,信号的*低频率,也就是基频,为1 / ?? 。傅里叶级数中sin 和cos 函数的自变量里出现的?? / ?? 可以看作基频的?? 倍,简称为倍频。
  即使?? (??) 为非周期性函数,也可以对?? (??) 在[??? / 2, ?? / 2] 上定义的函数值进行周期延拓,从而应用傅里叶级数展开。
  接下来用一段程序完成以下内容:
  ① 使用SymPy 求解任意函数的傅里叶级数展开。
  ② 验证函数?? (??) = ?? 的傅里叶级数展开可表示为三角函数的和。
  ③ 验证近似水平随着傅里叶级数展开式中项数的增加而增加。
  2. 代码实现
  程序1.1 使用SymPy 求解任意函数的傅里叶级数展开
  1 from sympy import *
  2 # 定义用于表达式的变量符号
  3 x = symbols('x')
  4 # 定义用于傅里叶级数展开的函数f(x) = x
  5 f = x
  6 # 求解傅里叶级数展开
  7 s = fourier_series(f, (x, -pi, pi))
  8 # 指定项数,求解级数展开的部分和
  9 terms = (1, 5, 31)
  10 ss = [s.truncate(n) for n in terms]
  11 # 输出级数展开的表达式
  12 for n, exp in zip(range(len(terms)), ss):
  13 print(f'n = {terms[n]}时: ')
  14 display(exp)
  15 # 使用sympy 的绘图函数plot 绘制函数图形
  16 p = plot(f, *ss, (x, -pi, pi), show = False, legend =True)
  17 p[0].line_color = (0,0,0)
  18 p[0].label = '$x$'
  19 for i in range(len(terms)):
  20 p[i+1].label = f'$n$ = {terms[i]}'
  21 p.show()
  程序1.1 展示了傅里叶级数展开的实现程序,下面解释程序1.1 中的关键步骤。
  ?第3行
  3 x = symbols('x')
  定义建立表达式所需的符号(变量),如果需要定义多个变量,则用
  a, x = symbols('a, x')
  其中,symbols() 函数的参数以一组空格分隔的字符串组成,字符串数量等于函数返回的变量元组(tuple)的长度。
  ?第5 行
  5 f = x
  定义需要展开的函数。函数的形式为?? (??) = ?? 时, 在Python 中记为f(x) = x;其他函数形式,例如?? (??) = ??(?? + 1)2,在Python 中记为f(x) =a*(x+1)**2。
  ? 第7 行
  7 s = fourier_series(f, (x, -pi, pi))
  使用SymPy 提供的fourier_series() 函数计算给定函数的傅里叶级数展开,有两个参数,一是被展开的函数,二是函数的自变量及其周期范围(x,-pi, pi),以Python 元组的形式给出。代码中的pi 为SymPy 预先定义的圆周率π的符号。
  ? 第9、10 行
  9 terms = (1, 5, 31)
  10 ss = [s.truncate(n) for n in terms]
  用truncate() 函数截断傅里叶级数展开的表达式,以求得给定项数的部分和。第10 行的写法在Python 中称为列表推导式(list comprehension),是一种为列表中各个元素赋值的简洁写法。
  ? 第12~14 行
  12 for n, exp in zip(range(len(terms)), ss):
  13 print(f'n = {terms[n]} 时:')
  14 display(exp)
  将上述部分和公式的具体形式打印出来。
  ? 第16~21 行
  16 p = plot(f, *ss, (x, -pi, pi), show = False, legend =True)
  17 p[0].line_color = (0,0,0)
  18 p[0].label = '$x$'
  19 for i in range(len(terms)):
  20 p[i+1].label = f'$n$ = {terms[i]}'
  21 p.show()
  使用SymPy 的plot() 函数绘制原来的函数以及每个部分和。plot() 函数的参数中包含要绘制的函数、自变量范围以及其他一些绘图选项。其中,16行的*ss 为Python 中展开列表的写法,将列表ss 中的元素展开,同前面的f 一并作为参数传递给plot 函数。
  3. 运行结果
  图1.2 和图1.3 展示了在Jupyter Notebook 中运行程序1.1 得到的结果。
  图1.2 中,函数?? = ?? 的傅里叶展开式中只包含正弦函数。这是因为?? = ?? 是奇函
  6 Python 实验编程:自然科学探究
  数,其图像关于原点对称,所以其傅里叶展开式中所有余弦函数的系数为0。
  图1.2 函数?? = ?? 的傅里叶展开式截断到不同项数的结果
  图1.3 函数?? = ?? 及其傅里叶级数的部分和图像
  从图1.3 可以看出,?? = 1 时,傅里叶级数逼近原来的函数?? = ?? 的程度甚微;?? 增加到31 时,除自变量范围的边缘?? = ±π 附近之外,其他部分已经很好地逼近了原来的函数。
  利用式(1.1),容易求得函数?? (??) = ?? 的傅里叶级数通项公式为
  

展开
目录

第1章数学可视化1
1.1离散傅里叶变换和频域变换1
1.1.1傅里叶级数和离散傅里叶变换2
1.1.2体验声音的变化7
1.1.3小结15
1.2素数的可视化15
1.2.1素数的定义15
1.2.2用动画演示埃拉托斯特尼筛法15
1.2.3绘制素数螺旋20
1.2.4绘制不同形状的素数螺旋30
1.2.5小结32
延伸阅读欧拉素数生成多项式32
1.3圆周率计算和可视化33
1.3.1π值应该取到小数点后多少位?34
1.3.2高精度计算程序库——gmpy235
1.3.3π值的传统计算方法38
1.3.4π值的无穷级数算法47
延伸阅读1梅钦类公式的推导52
延伸阅读2高斯-勒让德算法54
第2章RSA加密算法和相关知识55
2.1计算*大公因数55
2.1.1RSA加密方法简介55
2.1.2通过素因数分解求解*大公因数56
2.1.3利用辗转相除法求解*大公因数60
2.1.4辗转相除法的可视化62
2.1.5扩展的辗转相除法69
延伸阅读1全体素数的生成函数72
延伸阅读2由三角函数组成旋转矩阵73
延伸阅读3从程序的递归调用联想到数学归纳法73
2.2用于互联网通信的公钥加密系统74
2.2.1对称密钥加密技术——恺撒密码75
2.2.2非对称密钥加密技术——RSA77
2.2.3文本加密的实现80
延伸阅读1密码学中常用的人名轶闻84
延伸阅读2RSA加密算法解密结果正确性的证明84
2.3RSA加密的应用86
2.3.1图像加密86
2.3.2数字签名95
延伸阅读1五边形五角星背后的数学106
延伸阅读2哈希碰撞概率的计算108
第3章通过微分方程描述自然109
3.1种群规模随时间演化的模拟109
3.1.1生态学的概念109
3.1.2种群规模建模的**案例110
3.1.3种群规模演化的Lotka-Volterra方程116
3.1.4求解Lotka-Volterra方程组121
3.1.5数值模型正确性的相关讨论123
3.2常见的自然现象和微分方程之间的联系125
3.2.1解析解示例1——物体的运动126
3.2.2解析解示例2——电容器充电的过程129
3.2.3数值计算的应用——蛋白质立体结构的运算132
3.2.4数值计算求解微分方程的原理134
3.2.5欧拉法求解微分方程的实践136
延伸阅读莱昂哈德 欧拉141
3.3微分方程的各种数值解法142
3.3.1欧拉法的回顾和分析142
3.3.2休恩法(Heun法)143
3.3.3中点法146
3.3.4古典四阶龙格-库塔法149
3.3.54种数值解法的对比153
延伸阅读函数的泰勒展开与数值解法的阶数153
3.4微分方程的辛欧拉法154
3.4.1单摆运动的精确方程155
3.4.2联立方程组的数值解法156
3.4.3代码实现和运行结果157
延伸阅读什么是“辛”?167
第4章航天中的物理170
4.1火箭升空背后的物理170
4.2火箭发动机的拉瓦尔喷管175
4.2.1拉瓦尔喷管的出口设计176
4.2.2复杂方程的数值解法——牛顿迭代法178
4.3万有引力和轨道运算183
4.3.1从万有引力定律到卫星运动方程184
4.3.2卫星轨道的相关参数187
4.3.3卫星运行轨迹的计算和可视化192
4.4多普勒效应的可视化202
4.4.1多普勒效应的原理和数学描述203
4.4.2多普勒频移的可视化205
4.4.3电磁波的多普勒频移216

展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证