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

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

python中怎么画曲线(绘制二元函数曲面)(1)

为了达到目的,我们需要一个二维的结果数组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()真正地把图表显示出来。执行结果如下:

python中怎么画曲线(绘制二元函数曲面)(2)

下述代码将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包的使用。上述程序执行结果如下:

python中怎么画曲线(绘制二元函数曲面)(3)

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

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

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

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

python中怎么画曲线(绘制二元函数曲面)(4)

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

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

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

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

python中怎么画曲线(绘制二元函数曲面)(5)

  • 2022年怎么抓住崩盘时的机遇(滚蛋吧2022太伤心了)
  • 2024-06-29滚蛋吧2022太伤心了即将结束的2022年,对每个人来说都是一次灾难,一次历练,也是一次升华因为疫情封控,多少人无法回家,多少人无法工作,多少人囊中羞涩所有的灾难都一起来了,疫情政策放开后的阳,阳遍了大江南北,阳遍了城市和。
  • 元宵志愿服务送真情(志愿沂蒙灯笼元宵承文明)
  • 2024-06-29志愿沂蒙灯笼元宵承文明猜灯谜、赏花灯、吃元宵、庆团圆……伴随着各式各样精彩纷呈的新时代文明实践活动今年的元宵节过得比往年要更有范!元宵市慈善总会平安志愿服务团2月13日,临沂市慈善总会平安志愿服务团在元宵节来临之际,开展“。
  • 描写关于保尔亲情的句子:写给上高中的孩子
  • 2024-06-29描写关于保尔亲情的句子:写给上高中的孩子记得上初二时,我在一篇课文中认识了保尔,他在烈士墓前发人深省的心理独白深深地震撼了我,“人最宝贵的是生命,生命对于每个人来说只有一次人的一生应当这样度过:……”从此,我被这位钢铁战士的钢铁精神彻底折服。
  • 这65个既褒又贬的成语有哪些(这65个既褒又贬的成语)
  • 2024-06-29这65个既褒又贬的成语您的孩子有积累成语的习惯吗?在我从事教育事业的十几年来,我发现至少有90%的孩子,没有积累成语的习惯!所以在做关于考核成语的选择题时,总是胡乱的ABCD乱选有一类成语,在试卷中经常出现同时具有两种不相。
  • 弱电工程中分光器:智能化弱电工程PON网络中分光器知识大全
  • 2024-06-29弱电工程中分光器:智能化弱电工程PON网络中分光器知识大全前言:分光器是组建PON网络的一个组件,是一个连接OLT和ONU的无源设备,它的功能是分发下行数据,并集中上行数据分光器带有一个上行光接口,若干下行光接口从上行光接口过来的光信号被分配到所有的下行光接。
  • 适合约会的粉色调(就先了解她喜欢的颜色)
  • 2024-06-29就先了解她喜欢的颜色生活是多姿多彩的,不同的人看天空的颜色都是不一样的有的人眼睛看到的一切都是五颜色的,而有的人看到的则是暗淡无光从对颜色的喜爱上,我们也可以观察出一个人的性格和心理现代社会把白色服装视为高品位的审美象征。
  • 奥迪a3租车价格(共享汽车终于来了)
  • 2024-06-29共享汽车终于来了如果要说现在生活中最火热的词汇,“共享”必定算是其中之一了,共享单车、共享充电宝、以及现在饱受争议的共享汽车共享汽车的使用方式大致上和共享单车类似,都是通过手机APP来操作,方便快捷如果未来共享汽车在。
  • 猫咪用爪子挠痒是什么原因(猫咪过度挠痒的五个原因)
  • 2024-06-29猫咪过度挠痒的五个原因喜欢猫咪可以关注下“老胡说猫”,分享养猫知识、救助故事、种草猫物,带你走进猫的世界!猫咪和人一样,当身上痒痒的时候,就会伸手(爪子)去挠正常情况下,猫咪只会偶尔在梳理毛发的时候挠挠,若是猫咪出现异常频。
  • 田园土豆泥的做法(田园土豆泥怎么做)
  • 2024-06-29田园土豆泥怎么做土豆洗净,带皮上锅蒸20分钟准备好配料,木耳,胡萝卜,瘦肉,玉米粒胡萝卜,木耳,瘦肉,都切成丁然后依次放入玉米粒,胡萝卜丁,木耳丁翻炒大概三分钟,要加点水加少许酱油,大概两平勺的盐加入土豆,压成泥,要。
  • 成吉思汗之死真实原因(一代天骄成吉思汗的死因大概有五种)
  • 2024-06-29一代天骄成吉思汗的死因大概有五种关于成吉思汗的死因,大概有五种,多与西夏有关其中最正统的,也为更多人的知道的,就是《元史》中采信的“坠马说”1.坠马蒙古人撰编的《元朝秘史》(卷十四)记载,“成吉思既住过冬,欲征唐兀从新整点军马,至狗。