python/Matplotlib绘制复变函数图像教程


Posted in Python onNovember 21, 2019

今天发现sympy依赖的库mpmath里也有很多数学函数,其中也有在复平面绘制二维图的函数cplot,具体例子如下

from mpmath import *

def f1(z):
 return z

def f2(z):
 return z**3

def f3(z):
 return (z**4-1)**(1/4)

def f4(z):
 return 1/z

def f5(z):
 return atan(z)

def f6(z):
 return sqrt(z)

cplot(f1)
cplot(f2)
cplot(f3)
cplot(f4)
cplot(f5)
cplot(f6)

python/Matplotlib绘制复变函数图像教程

参照matlab绘制复变函数的例子,使用python实现绘制复变函数图像,网上还没搜到相关的文章,在这里分享出来供大家学习。

'''
参照matlab绘制复变函数的例子,创建函数cplxgrid,cplxmap,cplxroot
'''
# 1.导入相关库
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import *

# 2.创建函数
def cplxgrid(m):
 '''Return polar coordinate complex grid.

 Parameters
 ----------
 m: int

 Returns
 ----------
 z: ndarray,with shape (m+1)-by-(2*(m+1))
 '''
 m = m
 r = np.arange(0,m).reshape(m,1) / m
 theta = np.pi * np.arange(-m,m) / m
 z = r * np.exp(1j * theta)

 return z

def cplxroot(n=3,m=20):
 '''
 cplxroot(n): renders the Riemann surface for the n-th root
 cplxroot(): renders the Riemann surface for the cube root.
 cplxroot(n,m): uses an m-by-m grid. Default m = 20.

 Use polar coordinates, (r,theta).
 Use polar coordinates, (r,theta).

 Parameters
 ----------
 n: n-th root
 m: int

 Returns
 ----------
 None: Plot the Riemann surface
 '''
 m = m+1
 r = np.arange(0,m).reshape(m,1) / m
 theta = np.pi * np.arange(-n * m, n * m) / m
 z = r * np.exp(1j * theta)
 s = r * (1/n) * np.exp(1j * theta / n)
 fig = plt.figure()
 ax = fig.add_subplot(111,projection='3d')
 # ax.plot_surface(np.real(z),np.imag(z),np.real(s),color = np.imag(s))
 ax.plot_surface(np.real(z),np.imag(z),np.real(s),cmap = plt.cm.hsv)
 ax.set_xlim((-1,1))
 ax.set_ylim((-1,1))
 ax.set_xlabel('Real')
 ax.set_ylabel('Imag')
 ax.set_xticks([])
 ax.set_yticks([])
 ax.set_zticks([])
 ax.set_autoscalez_on(True)#z轴自动缩放 
 ax.grid('on')
 plt.show()

def cplxmap(z,cfun):
 '''
 Plot a function of a complex variable.

 Parameters
 ----------
 z: complex plane
 cfun: complex function to plot

 Returns
 ----------
 None: Plot the surface of complex function
 '''
 blue = 0.2
 x = np.real(z)
 y = np.imag(z)
 u = np.real(cfun)
 v = np.imag(cfun)
 M = np.max(np.max(u))#复变函数实部最大值
 m = np.min(np.min(u))#复变函数实部最大值
 s = np.ones(z.shape)
 fig = plt.figure()
 ax = fig.add_subplot(111,projection='3d')
 # 投影部分用线框图
 surf1 = ax.plot_wireframe(x,y,m*s,cmap=plt.cm.hsv)
 surf2 = ax.plot_surface(x,y,u,cmap=plt.cm.hsv)

 #绘制复变函数1/z时会出错,ValueError: Axis limits cannot be NaN or Inf
 # ax.set_zlim(m, M) 
 ax.set_xlim((-1,1))
 ax.set_ylim((-1,1))
 ax.set_xlabel('Real')
 ax.set_ylabel('Imag')
 ax.set_xticks([])
 ax.set_yticks([])
 ax.set_zticks([])
 ax.set_autoscalez_on(True)#z轴自动缩放

 ax.grid('on')
 plt.show()

def _test_cplxmap():
 '''测试cplxmap函数'''
 z = cplxgrid(30)
 w1 = z
 w2 = z**3
 w3 = (z**4-1)**(1/4)
 w4 = 1/z
 w5 = np.arctan(2*z)
 w6 = np.sqrt(z)
 w = [w1,w2,w3,w4,w5,w6]
 for i in w:
 cplxmap(z,i)

def _test_cplxroot():
 '''测试cplxroot函数'''
 cplxroot(n=2)
 cplxroot(n=3)
 cplxroot(n=4)
 cplxroot(n=5)

if __name__ == '__main__':
 _test_cplxmap()
 _test_cplxroot()

python/Matplotlib绘制复变函数图像教程

python/Matplotlib绘制复变函数图像教程

以上这篇python/Matplotlib绘制复变函数图像教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现图片批量剪切示例
Mar 25 Python
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
Python如何实现文本转语音
Aug 08 Python
python实现随机漫步算法
Aug 27 Python
对python csv模块配置分隔符和引用符详解
Dec 12 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
python实现微信自动回复机器人功能
Jul 11 Python
基于python二叉树的构造和打印例子
Aug 09 Python
Python 文件数据读写的具体实现
Jan 24 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
python使用torch随机初始化参数
Mar 22 Python
Python 复平面绘图实例
Nov 21 #Python
Python3并发写文件与Python对比
Nov 20 #Python
python实现高斯(Gauss)迭代法的例子
Nov 20 #Python
python、Matlab求定积分的实现
Nov 20 #Python
python 求定积分和不定积分示例
Nov 20 #Python
python 计算积分图和haar特征的实例代码
Nov 20 #Python
Python 函数绘图及函数图像微分与积分
Nov 20 #Python
You might like
一个php作的文本留言本的例子(六)
2006/10/09 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
jquery.validate分组验证代码
2011/03/17 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
简单谈谈Python中函数的可变参数
2016/09/02 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
Django实现发送邮件功能
2019/07/18 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
python 调用Google翻译接口的方法
2020/12/09 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
介绍信的格式
2015/01/30 职场文书
原告代理词范文
2015/05/25 职场文书
领导新年致辞2016
2015/07/29 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS