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中使用正则表达式的连接符示例代码
Oct 10 Python
Python面向对象之反射/自省机制实例分析
Aug 24 Python
Python Numpy库安装与基本操作示例
Jan 08 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
详解python播放音频的三种方法
Sep 23 Python
Python编译为二进制so可执行文件实例
Dec 23 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
python中selenium库的基本使用详解
Jul 31 Python
python基础学习之递归函数知识总结
May 26 Python
python开发人人对战的五子棋小游戏
May 02 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
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
CSS和Javascript简单复习资料
2010/06/29 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
深入理解vue Render函数
2017/07/19 Javascript
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Python之父谈Python的未来形式
2016/07/01 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
python字符串循环左移
2019/03/08 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
Python语言进阶知识点总结
2019/05/28 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
python将unicode和str互相转化的实现
2020/05/11 Python
诚信考试承诺书
2014/03/27 职场文书
初中家长寄语
2014/04/02 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
工作态度怎么写
2015/06/25 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
公司档案管理制度
2015/08/05 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
《比的意义》教学反思
2016/02/18 职场文书