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读取环境变量的方法和自定义类分享
Nov 22 Python
Python2.x中文乱码问题解决方法
Jun 02 Python
python学习必备知识汇总
Sep 08 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
查看django执行的sql语句及消耗时间的两种方法
May 29 Python
多个应用共存的Django配置方法
May 30 Python
利用python如何处理百万条数据(适用java新手)
Jun 06 Python
Python单元测试unittest的具体使用示例
Dec 17 Python
python批量识别图片指定区域文字内容
Apr 30 Python
wxPython窗体拆分布局基础组件
Nov 19 Python
Tensorflow实现在训练好的模型上进行测试
Jan 20 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 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二维数组排序方法(array_multisort usort)
2013/12/25 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
[06:09]辉夜杯主赛事开幕式
2015/12/25 DOTA
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
2019/08/30 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
scrapy-splash简单使用详解
2021/02/21 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
儿媳婚宴答谢词
2014/01/14 职场文书
安全标准化实施方案
2014/02/20 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
行政司机岗位职责
2015/04/10 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
小程序实现筛子抽奖
2021/05/26 Javascript
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS