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
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
浅谈python字符串方法的简单使用
Jul 18 Python
python实现装饰器、描述符
Feb 28 Python
Python解析并读取PDF文件内容的方法
May 08 Python
Python3对称加密算法AES、DES3实例详解
Dec 06 Python
Pandas中Series和DataFrame的索引实现
Jun 27 Python
安装python及pycharm的教程图解
Oct 10 Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 Python
Python descriptor(描述符)的实现
Nov 15 Python
pip install命令安装扩展库整理
Mar 02 Python
图文详解matlab原始处理图像几何变换
Jul 09 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学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
使用JS动态显示文本
2017/09/09 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
Python类的动态修改的实例方法
2017/03/24 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
python 获取url中的参数列表实例
2018/12/18 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
教师年终个人自我评价
2013/10/04 职场文书
中专毕业生自我鉴定
2013/11/21 职场文书
一年级学生期末评语
2014/04/21 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
工伤调解协议书
2016/03/21 职场文书
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android