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的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
numpy判断数值类型、过滤出数值型数据的方法
Jun 09 Python
Python一行代码实现快速排序的方法
Apr 30 Python
Django框架orM与自定义SQL语句混合事务控制操作
Jun 27 Python
mac使用python识别图形验证码功能
Jan 10 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
python中实现栈的三种方法
Dec 19 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 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
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
php实现简单洗牌算法
2013/06/18 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
python中global用法实例分析
2015/04/30 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
Python输出指定字符串的方法
2020/02/06 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
一套软件测试笔试题
2014/07/25 面试题
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
竞聘上岗演讲稿范文
2014/01/10 职场文书
买房子个人收入证明
2014/01/16 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
美容院经理岗位职责
2014/04/03 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
广告业务员岗位职责
2015/02/13 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
如何在Python中妥善使用进度条详解
2022/04/05 Python
Java 死锁解决方案
2022/05/11 Java/Android