IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【Python】ODE绘制Phase Line及函数图像 -> 正文阅读

[人工智能]【Python】ODE绘制Phase Line及函数图像

一、问题描述

根据常微分方程,绘制Phase Line以及不同初始值条件下的函数图像。代码本身并不复杂,但是重点是记录一下做的过程中学习到的几个有用的函数。

二、示例

以下是一个人口模型的常微分方程:
N ′ = N ( r ? a ( N ? b ) 2 ) N' = N(r-a(N-b)^{2}) N=N(r?a(N?b)2)
根据 N ′ = 0 N'=0 N=0可以轻松解得三个fixed points: N ? = 0 , b ? r a , b + r a N^{*}=0, b-\sqrt{\frac{r}{a}}, b+\sqrt{\frac{r}{a}} N?=0,b?ar? ?,b+ar? ?。以下是 N ′ N' N的函数图像以及Phase Line

x = np.linspace(0, 4.5, 50)
y = x*(1-(x-3)**2)

# add range for y
plt.ylim(-6, 3)
plt.plot(x, y, label='N\'')

# add vertical and horizontal lines
plt.axhline(y=0, linewidth=1, ls='--', color='black')
plt.vlines(x=0, ymin=-6, ymax=0, ls='--', linewidth=1, color='black')
plt.vlines(x=2, ymin=-6, ymax=0, ls='--', linewidth=1, color='black')
plt.vlines(x=4, ymin=-6, ymax=0, ls='--', linewidth=1, color='black')

# add arrow for phase line
plt.arrow(1.8, 0, -1.4, 0, width=0.06, color='red')
plt.arrow(2.2, 0, 1.4, 0, width=0.06, color='red')
plt.arrow(4.5, 0, -0.2, 0, width=0.06, color='red')

# add plot title
plt.title('Plot of N\' ' )

# add important ticks for x and y axies
plt.yticks([0])
plt.xticks([0, 2, 4], ['0',r'$b-\sqrt{r/a}$', r'$b+\sqrt{r/a}$'])

plt.legend()
plt.savefig('N.jpeg')

在这里插入图片描述
以及不同初始值下的函数图像:

plt.xlim(0, 4)

x = np.linspace(0, 4, 100)
y1 = 1.8/(1+e**(-0.4*(x-1)))
y2 = -1.5/(1+e**(-0.3*(x-2)))+3.9
y3 = math.e**(-x)+4
y4 = math.e**(-1.5*(x+0.5))
y5 = -math.e**(-1.5*(x+0.5))+3.9
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
plt.plot(x, y4)
plt.plot(x, y5)

plt.axhline(y=0, linewidth=1, ls='--', color='black')
plt.axhline(y=2, linewidth=1, ls='--', color='black')
plt.axhline(y=4, linewidth=1, ls='--', color='black')

plt.yticks([0, 2, 4], ['0', r'$b-\sqrt{r/a}$', r'$b+\sqrt{r/a}$'])
plt.xticks([],[])


plt.title(r'$N(t)$ with different initial condition')
plt.savefig('N.jpeg')

在这里插入图片描述

三、重要函数

  1. plt.xlm() & plt.ylm()
    这两个函数是为图添加x和y的显示范围,我之所以用到这个函数是因为,当我想要画图上所显示的虚线时发现,我是没有办法从图上一点画到最底部的,比如:
x = np.linspace(-1, 1, 10)
y = -x
plt.plot(x, y)
plt.plot([0, 0], [0, -1], ls='--')
plt.savefig('example.jpeg')

在这里插入图片描述
但是,如果我为y加上一个范围,就会解决这一问题

plt.ylim(-1, 1)
x = np.linspace(-1, 1, 10)
y = -x
plt.plot(x, y)
plt.plot([0, 0], [0, -1], ls='--')
plt.savefig('example.jpeg')

在这里插入图片描述

  1. plt.axhline()&plt.axvline()&plt.hlines()&plt.vlines()
    这四个函数都是方便画出水平和竖直方向的直线,ax是画单条线,另外两个可以在一个函数里画多条线。

  2. plt.xticks()&plt.yticks()
    如我示例里两张图一样,有的时候我不想显示横纵坐标上的数字刻度,想要自己定义显示的关键刻度。这个函数里有两个参数,第一个为关键刻度所对应的数字刻度,第二个为显示的关键刻度的文字。如果两个参数都为空就代表不显示刻度。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:02:58  更:2022-04-01 00:03:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 2:04:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码