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获取单个程序CPU使用情况趋势图
Mar 10 Python
Python实现Tab自动补全和历史命令管理的方法
Mar 12 Python
python简单实现基于SSL的IRC bot实例
Jun 15 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
pycharm 将python文件打包为exe格式的方法
Jan 16 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
Python和Go语言的区别总结
Feb 20 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 Python
Python3使用tesserocr识别字母数字验证码的实现
Jan 29 Python
python删除csv文件的行列
Apr 06 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
smarty实例教程
2006/11/19 PHP
PHP如何得到当前页和上一页的地址?
2006/11/27 PHP
php格式化工具Beautify PHP小小BUG
2008/04/24 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
PHP以及MYSQL日期比较方法
2012/11/29 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
js 表格隔行颜色
2009/12/02 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
行政部主管岗位职责
2013/12/28 职场文书
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
社区国庆节活动方案
2014/02/05 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
美丽人生观后感
2015/06/03 职场文书
2016入党心得体会范文
2016/01/06 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle