数学以如此直观的方式与生物学联系|如何用Python计算出一只微生物(一)
0. 引子
我们先来看一看这些从《科学的极致:漫谈人工智能》一书中中截取下来的文字:
这部分内容后面又介绍了生命游戏——另一个十分有趣的话题。不过,现在我们主要来考虑一下,如何自己画出上面说的放射虫,甚至是最后那张图片里的所有微生物。
1. 绘图
我们先不去考虑那些复杂的迭代方程,也就是假设我们有了方便的迭代方程iterative_equation(x,y),它将返回迭代后的结果。这样,我们就能先专心考虑如何进行足够长时间的迭代,以及如何将迭代结果画出来。
我们考虑将迭代的运算过程与绘图结合起来,避免另外使用大的列表记录结果——这样做的后果是写的函数可能不是很清晰,不过我们尽量做到这一点。我们使用的绘图库是matplotlib。
至于迭代足够长时间,我们就设置其为100次;迭代的元素是整个画布内的像素,我们将选择一个合适的范围并适当调整(没有必要和真实的像素相同),同时,绘制颜色的选择条件也不是很清楚,我们将在编写过程中调整。
下面我们开始这一尝试:
def judge(x,y,r_square):'判断点是否在以r为半径的圆内'distance = x ** 2 + y ** 2if distance >= r_square:return Trueelse:return Falsedef draw(xstart=0,ystart=0,xend,yend):'绘制'plt.figure()#猜测一个r值。r_square = ((xstart + xend) / 2) ** 2 + ((ystart + yend) / 2) ** 2for x in range(xstart,xend + 1):for y in range(ystart,yend + 1):for time in range(100):(xnew,ynew) = (x,y)xnew,ynew = iterated_function(xnew,ynew)#前两层循环给入坐标值,第三层循环进行100次迭代计算。if judge(xnew,ynew,r_square):'点落在圆外:'plt.scatter(x,y,c='black',s = 0.1)
我们现在的draw()函数已经能完成简单的功能,但
- r_squart的值仍然可能需要我们自己进行调整。
- 像素值间间隙过大将导致图像粗糙。
- 为了提高效率我们可能需要讨论将计算过程矩阵化。
这几个问题我们在迭代函数的讨论中完善。
2. 简单的迭代函数
我们先来将引子中已经给出的式子转化成Python代码并运行整个程序,通过这些简单步骤得到的结果来完善整个程序。
迭代函数如下:
def iterated_function(x,y):'迭代函数'xnew = x ** 3 - 3 * x * (y ** 2) + 0.5ynew = 3 * (x ** 2) * y - y ** 3return xnew,ynew
我们对函数进行一个简单的测试:
(x,y) = (1,1)for i in range(10):x,y = iterated_function(x,y)print(x,y)
测试结果如下:
-1.5 2
15.125 5.5
2087.986328125 3608.2578125
-72450800441.37303 214822239.65589142
-3.802928053126974e+32 3.382872253495475e+30
-5.4985885011831324e+97 1.4676808096754469e+96
-1.658916062194702e+293 1.3309206334846214e+292
Traceback (most recent call last):File "microorganism.py", line 44, in <module>x,y = iterated_function(x,y)File "microorganism.py", line 6, in iterated_functionxnew = x ** 3 - 3 * x * (y ** 2) + 0.5
OverflowError: (34, 'Result too large')
不论我们如何在预先设想的范围内调整,这个结果都是具有打击性的——我们遇到了新问题。
解决问题的尝试:
在回顾引子中的文本时我们可以看到圆的半径并没有给出,结合以前对相似的问题——曼德博集合的了解,我们猜想绘制黑点或者白点的条件就是像曼德博集合中的那样——迭代结果是否会趋于无穷大。
我们将进行新的尝试,给出新的代码并尝试运行:
import matplotlib.pyplot as pltdef iterated_function(x,y):'迭代函数'xnew = pow(x,3) - 3 * x * pow(y,2) + 0.5ynew = 3 * pow(x,2) * y - pow(y,3)return xnew,ynew
'''
def judge(x,y,r_square):'判断点是否在以r为半径的圆内'distance = x ** 2 + y ** 2if distance >= r_square:return Trueelse:return False
'''
def draw(xend,yend,xstart=0,ystart=0):'绘制'plt.figure()'''#猜测一个r值。r_square = ((xstart + xend) / 2) ** 2 + ((ystart + yend) / 2) ** 2'''for x in range(xstart,xend + 1):for y in range(ystart,yend + 1):try:for time in range(100):(xnew,ynew) = (x,y)xnew,ynew = iterated_function(xnew,ynew)#前两层循环给入坐标值,第三层循环进行100次迭代计算。scatter(x,y) except:continuedraw(100,100)
运行后发现并没有输出图片——也就是并没有解决问题。
总结
我们的问题可能出在数学上,也可能处在程序上。
下一期中,我们将尝试在数学上考虑这些方程,同时绘制出图像看看。
并且,我们将检查代码。必要的情况下,我们将绘制曼德博集合以解决这个问题。
数学以如此直观的方式与生物学联系|如何用Python计算出一只微生物(一)相关推荐
- 【数学】用C语言实现函数的定积分—— 把 “定积分定义计算出的值” 和 “牛顿-莱布尼兹公式计算出的值” 两者进行误差比较
因为考研数学看到定积分的定义以及"牛顿-莱布尼兹公式" 突然心血来潮,想用C语言把它们实现出来并对比. 1.用 "定积分定义" 计算得出数值 以及 " ...
- 你不是不擅长数学,你只是打开方式不对
乘法表对于我们每个人来说都不陌生,毕竟它的存在感太强:在全世界无数的教室.书房里都可以见到它的踪影. 标准乘法表 这幅图片的准确性虽然无可指摘,可惜这个表格却不够精巧,它只是排列着一堆看起来毫无关联的 ...
- 2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题一python代码实现(更新完毕)
2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 思路及代码实现(持续更新完毕) 更新信息 2022-11-24 10:00 更新问题1和问题2 思路 2022-11-24 23:20 更新问 ...
- python做数学计算器_从零开始学习PYTHON3讲义(二)把Python当做计算器
<从零开始PYTHON3>第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3.Windows则从开始菜单中去寻找ID ...
- python画-如何用Python画各种著名数学图案 | 附图+代码
原标题:如何用Python画各种著名数学图案 | 附图+代码 用Python绘制著名的数学图片或动画,展示数学中的算法魅力. Mandelbrot 集 代码:46 lines (34 sloc) 1. ...
- Python找出列表中出现次数最多的元素三种方式
通过三种方式给大家介绍,具体详情如下所示: 方式一: 原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典中的key,如果不存在的话,将元素作为key,值为列表中 ...
- python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)...
模型拟合一般来说有这么三种: 切比雪夫近似准则 极小化绝对偏差之和 最小二乘准则 这几个原则各有各的适用范围.其中最小二乘准则是比较容易计算的.接下来我将简要的介绍最小二乘准则以及举例说明如何用pyt ...
- python中的content方法_content最新:python计算Content-MD5并获取文件的Content-MD5值方式_爱安网 LoveAn.com...
关于"content"的最新内容 聚合阅读 这篇文章主要介绍了python计算Content-MD5并获取文件的Content-MD5值方式,具有很好的参考价值,希望对大家有所帮助 ...
- 5种方式将机器学习带到Java、Python以及Go等编程语言
5种方式将机器学习带到Java.Python以及Go等编程语言 机器学习目前炙手可热,本文搜集了Java.Python以及go等编程语言中常见且实用的开源机器学习工具,对机器学习感兴趣的开发者或者准备 ...
最新文章
- VC++ 6.0的小花招
- Git CMD - show: Show various types of objects
- C#中Ref和out的使用区别
- 1069: [SCOI2007]最大土地面积|旋转卡壳
- 16-1平衡树源代码
- Gym 101128A :Promotions (Southwestern Europe Regional Contest )
- Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)...
- 每日编程-20170326
- R语言中,保留含有特定字符的元素
- 长虹CIRI语音智能电视技术原理简析
- Oracle:ODP.NET Managed 小试牛刀
- xheditor可视化富文本编辑器
- 复杂网络社区划分方法综述
- 城市道路智慧照明服务认证的流程及作用
- CSR8610 入门操作(BlueSuite 2.6.2和CSRXX_ROM_ConfigTool_3.0.64使用)
- 工行网银支付浏览器兼容问题小记
- ACM中国国家集训队论文集目录(1999-2009)
- Java中的parallelStream
- python什么是高阶函数_对于高阶函数的理解是什么?
- QTcpSocket 及 TCP粘包分析
热门文章
- c程序设计:编写一个程序,输入一个大写字母,输出其小写字母
- 每年14PB数据存储需求,海量交通安全数据如何安放?
- 快手于冰:咱客户端工程师,还可以往哪个方向纵深?
- 职称计算机证书A级,职称计算机考试A类和B类有什么区别?
- 按姓名拆分excel为单独文件,微信发给相应联系人
- kubernetes (k8s) arm64 docker 镜像源
- java spring boot 使用pinyin4j 根据中文拼音的首字母分组
- 孙溟㠭先生禅意篆刻——“道”
- 1月8日服务器例行维护公告,【维护】1月8日官方维护公告(正式服)
- 手握曹操出行,吉利为什么还要打造一个新的网约车平台?