Python+NumPy绘制常见曲线的方法详解

 更新时间:2022年06月11日 08:41:59   作者:PursuitingPeak  
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。本文将利用NumPy库绘制利萨茹曲线、计算斐波那契数列、方波和锯齿波和三角波,需要的可以参考一下

在NumPy中,所有的标准三角函数如sin、cos、tan等均有对应的通用函数。

一、利萨茹曲线

(Lissajous curve)利萨茹曲线是一种很有趣的使用三角函数的方式(示波器上显示出利萨茹曲线)。利萨茹曲线由以下参数方程定义:

x = A sin(at + n/2)

y = B sin(bt)

利萨茹曲线的参数包括 A 、 B 、 a 和 b 。为简单起见,我们令 A 和 B 均为1,设置的参数为 a=9 , b=8

import numpy as np
import matplotlib.pyplot as plt

A=B=1
a=9
b=8

t = np.linspace(-np.pi, np.pi, 201)  #使用linspace函数初始化变量t
x = np.sin(a * t + np.pi/2)  # sin 函数和NumPy常量 pi 计算变量 x 
y = np.sin(b * t)  # sin函数计算变量y
plt.plot(x, y)
plt.show()

运行结果:

二、计算斐波那契数列

斐波那契数列的递推关系可以用矩阵来表示。斐波那契数列的计算等价于矩阵的连乘。可用两种方法计算了斐波那契数列

1)黄金比例计算方法,使用 rint 函数对浮点数取整但不改变浮点数类型

1,1,2,3,5,8,13,21,34,55,89,……

#   斐波那契数,用黄金分割公式或通常所说的比奈公式,加上取整函数
n = np.arange(1, 9)
sqrt5 = np.sqrt(5)
phi = (1 + sqrt5)/2 #利用根号5计算黄金比例,或者直接用phi=1+0.618 
print("比例:",phi)
print('\n')
fibonacci = np.rint((phi**n - (-1/phi)**n)/sqrt5)  #用rint()函数对浮点数取整但不改变浮点数类型
print("Fibonacci", fibonacci)

2)利用矩阵进行计算:用 matrix 函数创建矩阵

# 斐波那契数,用矩阵来表示斐波那契数列的递推关系
F = np.matrix([[1, 1], [1, 0]])
print ("8th Fibonacci:", (F ** 10)[0, 0])

运行结果:

比例: 1.618033988749895

Fibonacci [ 1.  1.  2.  3.  5.  8. 13. 21.]
8th Fibonacci: 89

三、方波

方波可以近似表示为多个正弦波的叠加。任意一个方波信号都可以用无穷傅里叶级数来表示。

需要累加很多项级数,且级数越多结果越精确,这里取 k=99(可以分别设置为9,50,1000等进行测试观察生成效果) 以保证足够的精度。绘制方波的步骤如下。

1) 初始化 t 和 k 开始,并将函数值初始化为

m = np.linspace(-np.pi, np.pi, 201) #从 -pi 到 pi 上均匀分布的 201 个点
k = np.arange(1,99)   # k=99 以保证足够的精度,如图中的9 20 99显示的波形
k = 2 * k - 1
f = np.zeros_like(m)

2)使用 sin()求正弦函数,用sum()数计算各项级数:

for i in range(len(m)):  #使用 sin 和 sum 函数进行计算
    f[i] = np.sum(np.sin(k * m[i])/k)
f = (4 / np.pi) * f

3)绘制波形

plt.plot(t, f)
plt.show()

四、锯齿波和三角波

锯齿波和三角波也是常见的波形。和方波类似,也可以将它们表示成无穷傅里叶级数。对锯齿波取绝对值即可得到三角波。锯齿波的无穷级数表达式如下:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(-np.pi, np.pi, 201)
k = np.arange(1, 99)
f = np.zeros_like(t)
for i in range(len(t)):
    f[i] = np.sum(np.sin(2 * np.pi * k * t[i])/k)

f = (-2 / np.pi) * f
plt.plot(t, f, lw=1.0)
plt.plot(t, np.abs(f), lw=2.0)
plt.show()

运行结果:

以上就是Python+NumPy绘制常见曲线的方法详解的详细内容,更多关于Python NumPy绘制曲线的资料请关注脚本之家其它相关文章!

相关文章

  • Python使用matplotlib绘制随机漫步图

    Python使用matplotlib绘制随机漫步图

    这篇文章主要为大家详细介绍了使用Python生成随机漫步数据,使用matplotlib绘制随机漫步图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • pandas实现to_sql将DataFrame保存到数据库中

    pandas实现to_sql将DataFrame保存到数据库中

    这篇文章主要介绍了pandas实现to_sql将DataFrame保存到数据库中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Django项目如何配置Memcached和Redis缓存?选择哪个更有优势?

    Django项目如何配置Memcached和Redis缓存?选择哪个更有优势?

    这篇文章主要介绍了Django项目如何配置Memcached和Redis缓存,帮助大家更好的理解和学习使用django框架,感兴趣的朋友可以了解下
    2021-04-04
  • python数据预处理之将类别数据转换为数值的方法

    python数据预处理之将类别数据转换为数值的方法

    下面小编就为大家带来一篇python数据预处理之将类别数据转换为数值的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Python利用Turtle绘制哆啦A梦和小猪佩奇

    Python利用Turtle绘制哆啦A梦和小猪佩奇

    turtle库是python的基础绘图库,经常被用来介绍编程知识的方法库,是标准库之一,利用turtle可以制作很多复杂的绘图。本文将为大家介绍通过turtle库绘制制哆啦A梦和小猪佩奇,感兴趣的小伙伴可以学习一下
    2022-04-04
  • python神经网络特征金字塔FPN原理

    python神经网络特征金字塔FPN原理

    这篇文章主要为大家介绍了python神经网络特征金字塔FPN原理的解释,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python数学建模学习模拟退火算法整数规划问题示例解析

    Python数学建模学习模拟退火算法整数规划问题示例解析

    整数规划问题在工业、经济、国防、医疗等各行各业应用十分广泛,是指规划中的变量(全部或部分)限制为整数,属于离散优化问题Discrete Optimization
    2021-10-10
  • Python+OpenCV读写视频的方法详解

    Python+OpenCV读写视频的方法详解

    这篇文章主要为大家详细介绍了Python+OpenCV进行读写视频操作的示例代码,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2022-08-08
  • python版本单链表实现代码

    python版本单链表实现代码

    这篇文章主要为大家详细介绍了python版本单链表实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 非常全面的Python常见基础面试题及答案

    非常全面的Python常见基础面试题及答案

    Python是目前编程领域最受欢迎的语言,Python可用于许多领域,Web应用程序开发,自动化,数学建模,大数据应用程序等等,这篇文章主要给大家介绍了关于Python常见基础面试题及答案的相关资料,需要的朋友可以参考下
    2021-09-09

最新评论