![]()
编辑推荐 如果你可以用Python编程来解决具有挑战性的工程问题会如何?这本“硬核”的书将教你如何使用线性代数、几何和物理知识从头开始编码求解算法,以编写自定义库、绘制基元和构建应用程序。作者在这本书中为机械工程师提供了核心编程技巧,专注于打磨高质量的代码和利用自动化的单元测试来保证实现无差错。你将开发一个几何工具箱,用线和形状来绘制工程问题图,为机械模拟创建矢量图和动画,以及编码算法来执行复杂的计算。最终,你将结合这些知识来构建一个完整的结构分析应用程序,以解决实际工作中可能遇到的二维桁架问题。 通过阅读本书,你将学到: ·使用正则表达式来优雅地解析输入文件 ·使用单元测试、封装和描述性名称来优化代码 ·使用Tkinter的画布小部件在屏幕上绘制图像和创建动画 ·用Cholesky分解算法求解线性方程组 ·构建一个可以可视化桁架结构的应力和张力的应用程序 停止依赖第三方软件--通往专业化的道路没有捷径。本书将帮助你掌握编程技巧,让你每次都能获得正确的结果。 内容推荐 本书是一本专门面向工程相关专业读者的编程类技术图书,主要介绍如何使用Python来解决工程问题。书中涵盖了如何编码几何基元、读写文件、绘制矢量图并制作动画来展示运算结果,以及求解大型线性方程组,并在最后整合所有知识,搭建了一个求解桁架结构问题的应用程序。本书适合任何有一定专业背景并且想通过编程来解决工程问题的读者阅读,同时适合工程相关专业的学生作为参考。具有线性代数、平面几何和物理学的基础知识,并了解材料力学和数值方法的原理会比较有帮助。 目录 目 录 译者序 前言 致谢 作者简介 技术评审员简介 第一部分 基础知识 第1章 Python快速入门 2 1.1 Python包和模块 2 1.1.1 Python模块 2 1.1.2 Python包 3 1.2 运行文件 3 1.3 导入代码 3 1.4 用文档字符串注释代码 7 1.5 Python中的元素集 8 1.5.1 集合 8 1.5.2 元组 9 1.5.3 列表 11 1.5.4 字典 14 1.6 解包 15 1.7 小结 16 第2章 两种编程范式 17 2.1 函数式编程 17 2.1.1 纯函数 17 2.1.2 不可变性 18 2.1.3 lambda函数 19 2.1.4 高阶函数 20 2.1.5 嵌套函数 21 2.1.6 filter、map和reduce函数 22 2.1.7 列表推导式 26 2.2 面向对象编程 27 2.2.1 类 28 2.2.2 魔术方法 33 2.3 类型提示 35 2.4 小结 36 第3章 命令行 37 3.1 UNIX和Windows系统的命令行 37 3.2 准备好shell 37 3.2.1 安装Windows Subsystem for Linux软件 38 3.2.2 初识shell 38 3.3 文件和目录 38 3.3.1 移动命令 39 3.3.2 创建文件和目录 40 3.3.3 删除文件和目录 41 3.3.4 命令汇总 41 3.3.5 使用Windows Subsystem for Linux 42 3.4 运行Python脚本 43 3.5 给脚本传递参数 43 3.6 标准输入和输出 44 3.6.1 将输出重定向到文件 44 3.6.2 将输入重定向为文件 44 3.7 使用PyCharm自带的Python 控制台 45 3.8 小结 47 第二部分 二维几何 第4章 点和向量 50 4.1 比较数字 50 4.2 创建类:Point 51 4.2.1 计算两点间的距离 52 4.2.2 加减操作 53 4.3 创建类:Vector 54 4.3.1 向量的加减 55 4.3.2 向量的缩放 56 4.3.3 用向量移动点 56 4.3.4 向量的范数 57 4.3.5 不可变的代码设计 58 4.3.6 方法的命名约定 59 4.3.7 向量的点乘 59 4.3.8 向量的投影 60 4.3.9 向量的叉乘 61 4.3.10 平行和垂直向量 61 4.3.11 向量的夹角 62 4.3.12 向量的旋转 63 4.3.13 向量的正弦和余弦 64 4.4 完善Vector类 65 4.4.1 检验相等性 65 4.4.2 字符串表示 67 4.4.3 向量的工厂函数 68 4.5 单元测试 69 4.5.1 测试距离计算方法 70 4.5.2 测试向量的加减方法 72 4.5.3 测试向量的乘法方法 73 4.5.4 测试向量的平行和垂直方法 74 4.5.5 单元测试的三个重要规则 75 4.6 小结 77 第5章 直线和线段 78 5.1 创建类:Segment 78 5.1.1 线段的方向 79 5.1.2 线段的长度 81 5.1.3 参数t和线段中点 83 5.1.4 计算线段上的最近点 88 5.1.5 计算线段与点的最短距离 91 5.1.6 计算线段的交点 91 5.1.7 相等和字符串表示 94 5.2 创建类:Line 96 5.3 线段的垂直平分线 100 5.4 小结 101 第6章 多边形 102 6.1 创建类:Polygon 102 6.1.1 多边形的边 103 6.1.2 多边形的质心 106 6.1.3 检验多边形是否包含点 108 6.1.4 多边形的工厂函数 113 6.1.5 检验多边形的相等性 114 6.2 创建类:Circle 116 6.2.1 检验圆是否包含点 117 6.2.2 圆的近似多边形 117 6.2.3 圆的相等性和字符串表示 118 6.2.4 圆的工厂函数 120 6.3 创建类:Rect 121 6.3.1 检验矩形是否包含点 123 6.3.2 检查矩形是否重叠 123 6.3.3 矩形转多边形 127 6.3.4 矩形的相等性检查 128 6.3.5 矩形的工厂函数 130 6.4 小结 132 第7章 仿射变换 133 7.1 初识仿射变换 133 7.2 创建类:Affine Transform 137 7.2.1 单元测试:点的变换 137 7.2.2 变换线段和多边形 138 7.2.3 组合变换 140 7.2.4 逆仿射变换 142 7.2.5 缩放变换 144 7.2.6 旋转变换 146 7.3 插值变换 148 7.3.1 插值的类型 148 7.3.2 插值的实现 150 7.4 Geom2D的最后一步 152 7.4.1 测试文件整理 152 7.4.2 同时运行所有测试文件 152 7.4.3 包的统一导入 153 7.5 小结 154 第三部分 图形和模拟 第8章 绘制矢量图 156 8.1 位图和矢量图 156 8.2 SVG格式 157 8.2.1 视框 158 8.2.2 空间变换 159 8.3 创建包:svg 160 8.3.1 模板字符串 161 8.3.2 导入模板 162 8.3.3 图像模板 163 8.3.4 属性 165 8.4 SVG的基元 166 8.4.1 直线 167 8.4.2 矩形 168 8.4.3 圆 169 8.4.4 多边形 170 8.4.5 多段线 171 8.4.6 文本 172 8.4.7 分组 173 8.4.8 箭头 174 8.5 基元总结 176 8.6 导入包 178 8.7 小结 178 第9章 三点画圆 179 9.1 应用程序的架构 179 9.2 初始设置 180 9.2.1 创建一个运行配置 181 9.2.2 为什么要使用运行配置 184 9.3 读取输入和配置文件 184 9.3.1 正则表达式 185 9.3.2 正则表达式备忘录 189 9.3.3 匹配点 189 9.3.4 配置文件 190 9.4 问题模型和解决方法 192 9.5 结果输出 192 9.5.1 绘制结果圆 193 9.5.2 绘制输入点 195 9.5.3 最终代码 197 9.5.4 翻转y轴方向 199 9.6 分发应用程序 199 9.6.1 理解问题所在 199 9.6.2 寻找解决方案 201 9.6.3 不用文件作为输入启动应用 程序 203 9.7 小结 203 第10章 图形用户界面和画布 204 10.1 Tkinter包介绍 204 10.1.1 我们的第一个GUI程序 204 10.1.2 画布 207 10.2 绘制几何基元 212 10.2.1 画布的装饰器类 212 10.2.2 绘制线段 214 10.2.3 绘制多边形 215 10.2.4 绘制箭头 217 10.3 小结 220 第11章 动画、模拟和时间循环 221 11.1 名词解释 221 11.1.1 什么是动画 221 11.1.2 什么是系统 222 11.1.3 什么是模拟 222 11.1.4 什么是时间循环 223 11.2 我们的第一个动画 224 11.2.1 初始设置 224 11.2.2 添加帧计数标签 226 11.2.3 系统更新 227 11.2.4 创建运动 228 11.3 抽象主循环函数 230 11.4 重构模拟程序 232 11.4.1 尝试不同的多边形 近似圆 233 11.4.2 尝试不同的仿射变换 234 11.5 模块简洁化 235 11.6 小结 236 第12章 仿射变换动画化 237 12.1 应用程序架构和图示 237 12.2 初始设置 238 12.2.1 创建运行配置文件 239 12.2.2 创建一个bash脚本 239 12.3 读取配置文件 240 12.4 读取输入文件 241 12.4.1 输入格式化 241 12.4.2 添加输入范例 242 12.4.3 解析仿射变换 243 12.4.4 解析几何基元 245 12.5 运行模拟程序 251 12.5.1 建立用户界面 252 12.5.2 实现模拟逻辑 253 12.5.3 绘制坐标轴 255 12.6 小结 259 第四部分 方程组 第13章 矩阵和向量 262 13.1 列表初始化 263 13.2 初始设置 264 13.3 向量 264 13.3.1 创建类:Vector 265 13.3.2 测试Vector类 268 13.4 矩阵 269 13.4.1 设置矩阵值 270 13.4.2 获取矩阵值 272 13.4.3 缩放矩阵值 273 13.4.4 矩阵相等性 273 13.4.5 测试Matrix类 276 13.5 小结 279 第14章 线性方程组 280 14.1 线性方程组简介 280 14.2 数值方法 281 14.3 Cholesky分解法 282 14.3.1 LU算法 282 14.3.2 Cholesky算法原理 284 14.3.3 因式分解过程演算 285 14.3.4 解答过程演算 286 14.3.5 实现Cholesky算法 288 14.3.6 集成测试法测试Cholesky 算法 298 14.4 小结 299 第五部分 桁架结构 第15章 结构模型 302 15.1 求解结构问题 302 15.2 结构件的内力分析 303 15.2.1 弹性体受外力作用 303 15.2.2 轴向力和剪切力 304 15.2.3 弯曲和扭转力矩 304 15.3 拉伸和压缩 305 15.3.1 胡克定律 305 15.3.2 应力–应变曲线 306 15.4 平面桁架 307 15.5 二力构件 308 15.6 全局坐标中的刚度矩阵 309 15.7 结构的初始模型 311 15.7.1 创建类:StrNode 312 15.7.2 创建类:StrBar 315 15.7.3 创建类:Structure 319 15.7.4 用Python shell创建结构 320 15.8 结构的解模型 321 15.8.1 创建类:StrNodeSolution 321 15.8.2 创建类:StrBarSolution 324 15.8.3 创建类:StructureSolution 330 15.9 小结 334 第16章 模型求解 335 16.1 算法原理 335 16.1.1 刚度矩阵项的含义 336 16.1.2 结构初始化 336 16.1.3 结构求解的主算法 337 16.1.4 给结构的自由度编号 338 16.1.5 组合和求解方程组 339 16.1.6 创建解模型 345 16.1.7 代码汇总 347 16.2 进阶版单元测试法:测试替代 技术 350 16.2.1 测试替代技术介绍 351 16.2.2 unittest.mock包 351 16.3 测试StructureSolution类 356 16.4 测试结构问题求解过程 359 16.5 小结 364 第17章 从文件中读取输入 365 17.1 定义输入数据格式 365 17.1.1 节点的格式 365 17.1.2 载荷的格式 366 17.1.3 杆的格式 366 17.1.4 文件格式 366 17.2 找到正则表达式 367 17.2.1 节点的正则表达式 367 17.2.2 载荷的正则表达式 368 17.2.3 杆的正则表达式 368 17.3 初始设置 369 17.4 节点解析程序 369 17.5 杆解析程序 372 17.6 载荷解析程序 374 17.7 结构解析程序 375 17.7.1 总览 376 17.7.2 设置 377 17.7.3 忽略空白和注释 377 17.7.4 解析行 378 17.7.5 拆解行和组装结构 379 17.7.6 代码汇总 381 17.7.7 程序测试 383 17.8 小结 388 第18章 生成SVG图像和文本文件 389 18.1 初始设置 389 18.2 从结构解到SVG 390 18.2.1 配置文件 390 18.2.2 参数设置 391 18.2.3 函数:绘制结果图 392 18.2.4 注释 394 18.2.5 绘制杆图形 395 18.2.6 绘制节点图形 402 18.2.7 节点反作用力 403 18.2.8 载荷 408 18.2.9 代码汇总 409 18.2.10 最终结果 410 18.3 从结构解到文本 412 18.3.1 结构解的字符串表示 412 18.3.2 节点 414 18.3.3 杆 415 18.3.4 Unicode字符 416 18.3.5 代码汇总 417 18.4 小结 418 第19章 组装应用程序 419 19.1 概述 419 19.2 设置 420 19.3 输入参数 421 19.4 生成输出文件 423 19.5 主脚本 424 19.6 尝试应用程序 425 19.6.1 尝试不同的参数输入 428 19.6.2 求解一个大型结构问题 430 19.7 小结 434 参考文献 435 |