活动介绍

Python中的微积分应用:从追逐曲线到抛体运动

立即解锁
发布时间: 2025-08-29 10:09:32 阅读量: 5 订阅数: 8
PDF

Python数学与AI应用入门

### Python 中的微积分应用:从追逐曲线到抛体运动 #### 1. 追逐曲线 追逐曲线是微积分中的一个重要主题,它描述了一个主体追逐移动目标时所走过的路径。由于追逐者直接朝着目标移动,而目标也在移动,这种情况会产生各种微分方程。这些代数运算可能会非常复杂,但这也正是微积分教授们喜欢这个主题的原因。通常,微分方程的求解是为了找到一个通用的代数解,即一个函数,而不是一个具体的数值。理论上,我们将值代入函数中,以确定特定时间下粒子的位置或房间的温度。使用 Python,我们可以通过对情况进行建模并找到数值解,从而跳过代数求解步骤。虽然这样做损失了一定的通用性,但计算变得更加简便。 ##### 1.1 练习 12.19:找出捕食者追上猎物的位置 一只兔子从点 (0, 0) 开始,以每秒 1 个单位的速度沿正 y 轴方向奔跑。一只狐狸从点 (20, 0) 开始追逐兔子,其速度是兔子的 1.5 倍。那么,狐狸在哪个 y 值处追上兔子呢? 具体步骤如下: 1. 首先,我们需要从 `math` 模块中导入一些用于测量距离和角度的函数: ```python from math import sqrt, atan2, sin, cos ``` 2. 编写一个函数,使用勾股定理来测量捕食者和猎物位置之间的距离: ```python def dist(x1, y1, x2, y2): """Returns distance from (x1,y1) to (x2,y2)""" return sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) ``` 3. 关键在于,猎物和捕食者位置之间的 y 变化量与 x 变化量的比值代表了我们所需角度的正切值。我们已知它们的位置,因此使用反正切函数 `atan2` 来计算角度,使捕食者直接指向猎物。我们真正想知道的是,为了让捕食者向猎物移动 1 个单位,其 x 和 y 坐标需要改变多少。为了使捕食者转向猎物,我们需要找到两点之间的角度,如下所示: ```python def towards(x1, y1, x2, y2): """Returns unit vector in [x,y] format from point 1 to point 2""" dx, dy = x2 - x1, y2 - y1 angle = atan2(dy, dx) return [cos(angle), sin(angle)] ``` 我们计算 x 和 y 的变化量,使用反正切函数计算角度,然后使用余弦和正弦函数来确定捕食者的 x 和 y 坐标的相应变化,使其向猎物移动 1 个单位。 4. 现在,追逐开始。我们将捕食者和猎物放置在指定的位置,然后开始一个循环,在循环中让猎物移动 1 个单位(或者为了提高精度,移动一个增量): ```python def chase(): predator_x, predator_y = 20, 0 predator_v = 1.5 # prey is 1 prey_x, prey_y = 0, 0 inc = 0.001 while dist(predator_x, predator_y, prey_x, prey_y) > 0.001: prey_y += 1 * inc p_vec = towards(predator_x, predator_y, prey_x, prey_y) predator_x += predator_v * p_vec[0] * inc predator_y += predator_v * p_vec[1] * inc # print(dist(predator_x, predator_y, prey_x, prey_y)) return predator_y ``` 5. 运行追逐函数,并打印出捕食者追上猎物时的 y 值: ```python y = chase() print("Y:", y) print("dist:", dist(1, 1, 4, 5)) print("towards:", towards(1, 1, 2, 2.732)) ``` 输出结果如下: ```plaintext Y: 23.997299988652507 dist: 5.0 towards: [0.5000110003630132, 0.8660190526287391] ``` 这个结果非常接近理论值 24。 ##### 1.2 练习 12.20:使用海龟模块可视化追逐曲线 在这个练习中,我们将可视化捕食者和猎物的路径,即追逐曲线。Python 中有一个内置模块,基于 Logo 编程语言的虚拟海龟概念,它可以让我们轻松创建虚拟代理,这些代理可以根据我们编写的代码在屏幕上移动。完成此练习的步骤如下: 1. 首先,从 `turtle` 模块导入所需的函数: ```python from turtle import * ``` 2. 根据所需的左下角点 (-30, -30) 和右上角点 (40, 40) 设置屏幕大小: ```python setworldcoordinates(-30, -30, 40, 40) ``` 3. 设置捕食者和猎物,即创建一个 `Turtle` 对象,并设置其颜色、位置和速度。海龟在移动时会留下轨迹,因此我们使用 `penup` 方法,使其在到达起始位置之前不绘制轨迹,然后使用 `pendown` 方法,使其开始绘制: ```python # set up predator predator = Turtle() predator.color("red") predator.penup() predator.setpos(20, 0) predator.pendown() predator.speed(0) # set up prey prey = Turtle() prey.color("green") prey.shape("turtle") prey.setheading(90) prey.speed(0) ``` 4. `pursue` 函数看起来可能很熟悉,但它包含了用于计算距离甚至指向另一个海龟的内置函数: ```python def pursue(): inc = 0.05 while predator.distance(prey) > 0.05: predator.setheading(predator.towards(prey)) prey.forward(inc) predator.forward(1.5 * inc) print("y:", predator.ycor()) ``` 5. 执行 `pursue` 函数,在打印输出后,告诉程序结束,以免图形窗口冻结: ```python pursue() done() ``` 如果运行这段代码,你可以看到追逐的过程。最终输出的捕食者路径是一条对数曲线。 此外,我们还可以将猎物的路径改为圆形。在让猎物向前移动的代码行之后,添加以下代码: ```python prey.left(.3) ``` 这将使猎物每步向左转动一小角度。如果每次转动的角度相同,最终它会形成一个圆形路径。 #### 2. 位置、速度和加速度 微分方程常用于研究抛体的运动路径,这也可以说是微积分的起源。牛顿发明微积分工具是为了解决他在研究行星运动时产生的微分方程,并证明地球上的落体与绕轨道运行的行星遵循相同的物理定律。 ##### 2.1 练习
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

张_伟_杰

人工智能专家
人工智能和大数据领域有超过10年的工作经验,拥有深厚的技术功底,曾先后就职于多家知名科技公司。职业生涯中,曾担任人工智能工程师和数据科学家,负责开发和优化各种人工智能和大数据应用。在人工智能算法和技术,包括机器学习、深度学习、自然语言处理等领域有一定的研究
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看