网络编程
位置:首页>> 网络编程>> Python编程>> Python+NumPy绘制常见曲线的方法详解

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

作者:PursuitingPeak  发布时间:2022-01-11 06:14:43 

标签: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()

运行结果:

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

二、计算斐波那契数列

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

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()

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

四、锯齿波和三角波

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

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绘制常见曲线的方法详解

来源:https://www.cnblogs.com/codingchen/p/16356156.html

0
投稿

猜你喜欢

  • 目的临床数据的记录时间和对应标签(逗号后面的数字)记录在txt文件里,要把标签转换为3类标签,并且计算出每个标签的分别持续时间,然后绘制成柱
  • 开发需求python 3.7+pygame 1.9+演示项目地址https://github.com/Mr-han11/PythonSupe
  • 本文详细介绍了array_slice函数的详细用法以及一些常用的array_slice实例程序,分享给大家供大家参考。具体分析如下:arra
  • 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
  • 本文实例讲述了Python包,__init__.py功能与用法。分享给大家供大家参考,具体如下:包:为了组织好模块,将多个模块组合为一个包,
  • argparse是python标准库里面用来处理命令行参数的库命令行参数分为位置参数和选项参数:位置参数就是程序根据该参数出现的位置来确定的
  • 这个程序将记数器的数字放在ACCESS数据库中,当然你也能用你希望其它的ODBC数据源.这个程序从URL中读取记数信息.如下:< IM
  • 翻看自己以前写的程序,发现写过一个爬取盘多多百度云资源的东西,完全是当时想看变形金刚才自己写的,而且当时第一次接触python大概写了有2天
  • 本文以简单示例分析了python中关键字is与 ==的区别,供大家参考一下。首先说明一下Python学习中几个相关的小知识点。Python中
  • 这篇文章主要是把ASP代码变成组件,开发者不仅是加快了ASP的速度,而且也能保护加密自己的代码,编译asp代码为dll组件我想这个是最好的保
  • HTTP状态码        摘要说明成功2××  
  • 见下表:序号保留字序号保留字序号保留字1ADD80ESCAPE159OR2ABSOLUTE81EXCEPT160ORDER3ACTION82
  • 前言前面已经讲述了如何获取股票的k线数据,今天我们来分析一下股票的资金流入情况,股票的上涨和下跌都是由资金推动的,这其中的北上资金就是一个风
  • 一、引言这个五一假期自驾回老家乡下,家里没装宽带,用手机热点方式访问网络。这次回去感觉4G信号没有以前好,通过百度查找小说最新更新并打开小说
  • 内容摘要:在像网站首页这样的资源比较集中的页面中,那些栏目最经常被用户点击?居左居右对广告的点击率的影响是什么?“一切用数字说话”:以上问题
  • 最常见的XML数据类型有:Element, Attribute,Comment, Text.     &nbs
  • 现在Web页面的交互方式越来越多样化,其中拖放页面元素也是一种很常见的操作。在这类操作当中有两个主要问题需要解决,一个是事件的注册方式,一般
  • CSS命名规范一.文件命名规范全局样式:global.css;框架布局:layout.css;字体样式:font.css;链接样式:link
  • 这篇文章主要介绍了简单了解为什么python函数后有多个括号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
  • 最近临时工作要生成xml报名,通过MQ接口发送。简单小程序。自增长拼成xml报文Test_001.py# encoding=utf-8imp
手机版 网络编程 asp之家 www.aspxhome.com