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实现列表删除重复元素的三种常用方法分析
Nov 24 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
想学python 这5本书籍你必看!
Dec 11 Python
python3实现多线程聊天室
Dec 12 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
python logging模块书写日志以及日志分割详解
Jul 22 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
Django中template for如何使用方法
Jan 31 Python
10个顶级Python实用库推荐
Mar 04 Python
Python中np.random.randint()参数详解及用法实例
Sep 23 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 高效率写法 推荐
2010/02/21 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
gulp解决跨域的配置文件问题
2017/06/08 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
Vuex提升学习篇
2018/01/11 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
浅谈python连续赋值可能引发的错误
2018/11/10 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
安装python及pycharm的教程图解
2019/10/10 Python
详解rem 适配布局
2018/10/31 HTML / CSS
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
Ajax主要包含了哪些技术
2014/06/12 面试题
面试后感谢信
2014/02/01 职场文书
体育课外活动总结
2014/07/08 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
javascript函数式编程基础
2021/09/15 Javascript