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 调用VC++的动态链接库(DLL)
Sep 06 Python
Python处理文本文件中控制字符的方法
Feb 07 Python
python递归查询菜单并转换成json实例
Mar 27 Python
python保存数据到本地文件的方法
Jun 23 Python
Python基础之函数的定义与使用示例
Mar 23 Python
基于python的ini配置文件操作工具类
Apr 24 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
Python3 JSON编码解码方法详解
Sep 06 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
Python爬虫回测股票的实例讲解
Jan 22 Python
OpenCV 图像梯度的实现方法
Jul 25 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的5个入手程序
2006/11/23 PHP
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
Python压缩和解压缩zip文件
2015/02/14 Python
Python中的面向对象编程详解(上)
2015/04/13 Python
Python中的Matplotlib模块入门教程
2015/04/15 Python
Python玩转Excel的读写改实例
2019/02/22 Python
python对象与json相互转换的方法
2019/05/07 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
python 字符串常用方法汇总详解
2019/09/16 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
python如何查看安装了的模块
2020/06/23 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
面试通知短信
2015/04/20 职场文书
python中opencv实现图片文本倾斜校正
2021/06/11 Python
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python