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()函数已经能完成简单的功能,但

  1. r_squart的值仍然可能需要我们自己进行调整。
  2. 像素值间间隙过大将导致图像粗糙
  3. 为了提高效率我们可能需要讨论将计算过程矩阵化。

这几个问题我们在迭代函数的讨论中完善。

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计算出一只微生物(一)相关推荐

  1. 【数学】用C语言实现函数的定积分—— 把 “定积分定义计算出的值” 和 “牛顿-莱布尼兹公式计算出的值” 两者进行误差比较

    因为考研数学看到定积分的定义以及"牛顿-莱布尼兹公式" 突然心血来潮,想用C语言把它们实现出来并对比. 1.用 "定积分定义" 计算得出数值 以及 " ...

  2. 你不是不擅长数学,你只是打开方式不对

    乘法表对于我们每个人来说都不陌生,毕竟它的存在感太强:在全世界无数的教室.书房里都可以见到它的踪影. 标准乘法表 这幅图片的准确性虽然无可指摘,可惜这个表格却不够精巧,它只是排列着一堆看起来毫无关联的 ...

  3. 2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题一python代码实现(更新完毕)

    2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 思路及代码实现(持续更新完毕) 更新信息 2022-11-24 10:00 更新问题1和问题2 思路 2022-11-24 23:20 更新问 ...

  4. python做数学计算器_从零开始学习PYTHON3讲义(二)把Python当做计算器

    <从零开始PYTHON3>第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3.Windows则从开始菜单中去寻找ID ...

  5. python画-如何用Python画各种著名数学图案 | 附图+代码

    原标题:如何用Python画各种著名数学图案 | 附图+代码 用Python绘制著名的数学图片或动画,展示数学中的算法魅力. Mandelbrot 集 代码:46 lines (34 sloc) 1. ...

  6. Python找出列表中出现次数最多的元素三种方式

    通过三种方式给大家介绍,具体详情如下所示: 方式一: 原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典中的key,如果不存在的话,将元素作为key,值为列表中 ...

  7. python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)...

    模型拟合一般来说有这么三种: 切比雪夫近似准则 极小化绝对偏差之和 最小二乘准则 这几个原则各有各的适用范围.其中最小二乘准则是比较容易计算的.接下来我将简要的介绍最小二乘准则以及举例说明如何用pyt ...

  8. python中的content方法_content最新:python计算Content-MD5并获取文件的Content-MD5值方式_爱安网 LoveAn.com...

    关于"content"的最新内容 聚合阅读 这篇文章主要介绍了python计算Content-MD5并获取文件的Content-MD5值方式,具有很好的参考价值,希望对大家有所帮助 ...

  9. 5种方式将机器学习带到Java、Python以及Go等编程语言

    5种方式将机器学习带到Java.Python以及Go等编程语言 机器学习目前炙手可热,本文搜集了Java.Python以及go等编程语言中常见且实用的开源机器学习工具,对机器学习感兴趣的开发者或者准备 ...

最新文章

  1. VC++ 6.0的小花招
  2. Git CMD - show: Show various types of objects
  3. C#中Ref和out的使用区别
  4. 1069: [SCOI2007]最大土地面积|旋转卡壳
  5. 16-1平衡树源代码
  6. Gym 101128A :Promotions (Southwestern Europe Regional Contest )
  7. Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)...
  8. 每日编程-20170326
  9. R语言中,保留含有特定字符的元素
  10. 长虹CIRI语音智能电视技术原理简析
  11. Oracle:ODP.NET Managed 小试牛刀
  12. xheditor可视化富文本编辑器
  13. 复杂网络社区划分方法综述
  14. 城市道路智慧照明服务认证的流程及作用
  15. CSR8610 入门操作(BlueSuite 2.6.2和CSRXX_ROM_ConfigTool_3.0.64使用)
  16. 工行网银支付浏览器兼容问题小记
  17. ACM中国国家集训队论文集目录(1999-2009)
  18. Java中的parallelStream
  19. python什么是高阶函数_对于高阶函数的理解是什么?
  20. QTcpSocket 及 TCP粘包分析

热门文章

  1. c程序设计:编写一个程序,输入一个大写字母,输出其小写字母
  2. 每年14PB数据存储需求,海量交通安全数据如何安放?
  3. 快手于冰:咱客户端工程师,还可以往哪个方向纵深?
  4. 职称计算机证书A级,职称计算机考试A类和B类有什么区别?
  5. 按姓名拆分excel为单独文件,微信发给相应联系人
  6. kubernetes (k8s) arm64 docker 镜像源
  7. java spring boot 使用pinyin4j 根据中文拼音的首字母分组
  8. 孙溟㠭先生禅意篆刻——“道”
  9. 1月8日服务器例行维护公告,【维护】1月8日官方维护公告(正式服)
  10. 手握曹操出行,吉利为什么还要打造一个新的网约车平台?