python中怎么画曲线(绘制二元函数曲面)
python中怎么画曲线(绘制二元函数曲面)
2024-11-22 07:49:49  作者:九妄罪人  网址:https://m.xinb2b.cn/sport/zcm317870.html

我们将演示如何借助于ufunc的广播运算计算下述二元函数的在一个xy平面上的值并将其绘制成3D曲面。其中,x和y的取值范围均为[-2, 2]。


为了达到目的,我们需要一个二维的结果数组z,其元素的下标对应参数x,y的取值,其元素的值则为上述函数的函数值。这可以通过广播计算来得到。

知识产权协议

允许以教育/培训为目的向学生或受众进行免费引用,展示或者讲述,无须取得作者同意。

不允许以电子/纸质出版为目的进行摘抄或改编。

np.ogrid是个特殊对象,通过切片下标来生成用于广播运算的数组。先看下述程序:

#ogrid.pyx,y = np.ogrid[0:3:4j,0:4:5j]print("x=\n",x)print("y=\n",y)print("x.shape=",x.shape)print("y.shape=",y.shape)

执行结果:

x= [[0.] [1.] [2.] [3.]]y= [[0. 1. 2. 3. 4.]]x.shape= (4, 1)y.shape= (1, 5)

0:3:4j这种切片语法类似于np.linspace(0,3,4),它表示生成从0到3的包含4个元素的等差数列。这里的j并不表示复数的虚部,它只是一种语法格式。由于广播的需要,x的形状被设置为(4,1)。同理,由于广播需要,y的形状被设置成了(1,5)。这样,通过ogrid生成的x和y数组符合广播运算的规则,可以进行广播运算。

下述代码将x = [-2, 2],y = [-2, 2]的函数值矩阵以平面图形式绘制。

#func2d.pyimport numpy as npfrom matplotlib import pyplot as pltfrom matplotlib import cmy,x = np.ogrid[-2:2:200j,-2:2:200j]z = x * np.exp(-x**2-y**2)extent = [np.min(x),np.max(x),np.min(y),np.max(y)]plt.imshow(z,extent=extent,cmap=cm.gray)plt.colorbar()plt.show()

根据ogrid的输出,y,x分别是形状为(200,1)和(1,200)的数组。z = x * np.exp(-x**2-y**2)的执行过程中将发生广播,结果数组z将会是一个形状为(200,200)的二维数组,元素值为对应x,y的函数值。如果将z视为一个图像,那么其横向x取值范围对应[-2, 2],纵向y取值范围取应[-2, 2]。

extent = [np.min(x),np.max(x),np.min(y),np.max(y)]将x及y的取值范围放入一个列表。plt.imshow()函数将二维数组z作为图像显示,extent参数指明了横纵坐标的范围,cmap则指定了颜色映射对象,该颜色映射对象负责把z中的元素值转换成像素点的颜色。plt.colorbar()则“聪明”通过颜色条显示z中的函数值与颜色之间的对应关系。plt.show()真正地把图表显示出来。执行结果如下:


下述代码将x = [-2, 2],y = [-2, 2]的函数值矩阵以3D图形式绘制。

#func3d.pyimport numpy as npimport mpl_toolkits.mplot3dfrom matplotlib import pyplot as pltfrom matplotlib import cmx,y = np.mgrid[-2:2:20j,-2:2:20j]z = x * np.exp(- x**2 - y**2)fig = plt.figure(figsize=(8,6))ax = fig.gca(projection='3d')ax.plot_surface(x,y,z,cmap=cm.ocean)plt.show()

ax是表示一个子图,由于ax.plot_surface()函数要求x,y,z三个数组都必须是相同形状的二维数组,所以上述代码中没有使用ogrid来生成广播数组,而是使用了mgrid。mgrid的功能与ogrid相近,区别在于其返回的是已经进行了形状扩充的数组。也就是说,上述通过mgrid生成出来的x,y数组的形状已经是(20,20)。读者可以自行打印x,y的值出来观察mgrid对象的用法。读者如果对matplotlib相关代码感到疑惑,请先略过,本书后续部分将解读matplotlib包的使用。上述程序执行结果如下:


本案例节选自作者编写的教材及配套实验指导书。

《C 编程基础及应用》(高等教育出版社,出版过程中)

《Python编程基础及应用》,高等教育出版社

《Python编程基础及应用实验教程》,高等教育出版社


高校教师同行如果期望索取样书,教学支持资料,加群,请私信作者,联系时请提供学校及个人姓名为盼,各高校在读学生勿扰为谢。

青少年读者们如果期望系统性地学习Python及C/C 程序设计语言,欢迎尝试下述今日头条(西瓜)免费视频课程。

C/C 从入门到放弃(重庆大学现场版)

Python编程基础及应用(重庆大学现场版)


  • 吃肉很爽的感觉(舔到极致方为艺术)
  • 2024-11-22舔到极致方为艺术舔狗,网络流行词,意思是指对方对自己没有好感,还一再地放下尊严地用热脸去贴冷屁股的人毫无尊严和底线地去跪舔他人的人,形容在两性关系中明知道对方不喜欢自己,还坚持不懈地丧失尊严和底线的去迎合对方可以说是。
  • 忆江南渔歌子词牌(忆江南词牌四首)
  • 2024-11-22忆江南词牌四首忆江南.醉秋(词林正韵)作者杨琨红枫舞,银杏映金黄曲水流觞邀雅客,秋风吹画送词章痴笑醉斜阳忆江南.紅柿(新韵)作者杨琨红灯挂,摇曳舞青天雀立枝头争日暖,风吹彤叶怨天寒霜打柿酣甜忆江南落红(词林正韵)作。
  • 为什么阿里宝卡uc不免流(可与腾讯王卡一战)
  • 2024-11-22可与腾讯王卡一战面对竞争越发激烈的互联网套餐卡,各大互联网公司为了流量之争,早已是“杀红了眼”继腾讯王卡宣布QQ浏览器全系免流之后,阿里旗下的阿里宝卡也紧随其后的宣布UC浏览器免流近日,阿里宝卡官方宣布支持UC浏览器。
  • 上海滩三巨头哪个善始善终 上海滩上的金童玉女们
  • 2024-11-22上海滩三巨头哪个善始善终 上海滩上的金童玉女们原创垂髫魔都小哨兵SH在本号最近一系列的访谈中,葡萄科技是唯一一家面向儿童的企业虽说还处于发展上升期,估值也还没有到独角兽水平,但就像儿童代表了希望与未来,葡萄科技有着无限的可能,它是上海滩上快速成长。
  • 飞行员怎么能开上歼20(歼-20飞行员我要飞得更高)
  • 2024-11-22歼-20飞行员我要飞得更高90后飞行员许银辉,十年前毕业于空军航空大学十年来,他飞过教练机、二代战机、三代战机2021年,他第一次驾驶国产新一代隐身战机歼-20翱翔祖国的蓝天许银辉说:“十年来,我的‘战鹰’不断在变,但初心和使。
  • 张嘉译刘敏涛对你的爱很美结局(对你的爱很美首播)
  • 2024-11-22对你的爱很美首播7月13日晚间,电视剧《对你的爱很美》在湖南卫视首播该剧由张嘉益、刘敏涛、沙溢和宋丹丹等多位实力派演员主演,所以备受观众期待不过,两集追剧过后,我的个人看法是,这部电视剧在剧本层面上可以用“真差”来形。
  • 食盐的功效与作用(食盐有什么功效作用)
  • 2024-11-22食盐有什么功效作用盐是非常常见的调味品,可以在早晨起床后喝一杯淡盐水,帮助清理肠胃,清降胃火,增强人体免疫力,有排毒的功效盐还可以帮助杀菌、消毒,可以早晚用盐水漱口,预防蛀牙,也可以用来缓解口腔溃疡和咽喉肿痛盐是咸味的。
  • 小学教育知识分享文案(教育传承播报知识屋)
  • 2024-11-22教育传承播报知识屋《教育传承播报》知识屋识字篇*关于“尧”《说文解字》未收录“尧”,参考“尭”字:“尭,高也从垚在兀上,高远也”“尧”字的篆、隶、楷、行、草“尧”字的篆、隶、楷、行、草“尭(尧)”,会意字,兀者,高而上。
  • 合肥滨湖新区新房限价 滨湖2.4万
  • 2024-11-22合肥滨湖新区新房限价 滨湖2.4万滨湖金融后台板块纯新盘高速尚阖院价格曝光,总价约390万,首开倒计时!NO.1|壹单价2.6万/㎡起,高速尚阖院价格曝光省府板块中铁璟和院暂无首开消息,金融板块高速尚阖院“按不住”了,首开越来越近网上。
  • 湖南卫视2023年电视剧偶像剧(部热剧片单来了)
  • 2024-11-22部热剧片单来了今天给大家推荐的是湖南卫视或芒果台2023年热剧片单,类型丰富多样,当红明星与老戏骨云集,有你想看的吗?你最期待谁?有当红明星王鹤棣、白露、李现、张晚意、杨洋、吴磊、周雨彤、赵今麦等,也有老戏骨刘亦菲。
  • 李连杰年轻时最新消息(李连杰晒年轻旧照)
  • 2024-11-22李连杰晒年轻旧照2月22日,李连杰在自己的社交平台网络上晒出了自己年轻时的旧照,并表示这是自己年轻时训练的时候从图中可以看到年轻时候的李连杰完全是一名小鲜肉,他穿着宽大的训练服外套,手里拿着训练的武器,眼睛看着前方似。
  • 漯河人的知识大全 漯河人的苦恼是读召
  • 2024-11-22漯河人的知识大全 漯河人的苦恼是读召前几天,北京的某家媒体,需要给我快递书籍,打过来电话,核实我的快递地址信息是否变更她说:“你的地址是河南省漯(lěi)河市召(zhāo)陵区·······”等她说完,我说:“对不起,我需要纠正一下您的。