Python科学计算:Sympy3
创始人
2025-05-30 15:46:59

昨天考试,就没有带电脑,所以就没有去写,惊天就来看一看Sympy绘图:

matplotlib这个库,你要往里面传入的是列表,或是Numpy数组等,但是Sympy他生成的表达式实际上是没有办法传入到matplotlib里的,但是,之前我们的学习中,sympy这个库有个函数lambdify,它可以将表达式转换为数组,这样的话我们就可以绘图了:

图1

图一是我之前第一篇关于sympy的博客中截的图,大家可以看到,利用sympy.lambdify函数,就可以计算出一个根据cosdiff计算而得到的数组,这样的数组明显就是我们所想要的,就可以传入pyplot模块里面进行绘制了,但是,Sympy就自己没想到什么解决办法吗?答案是有的Sympy.plot,别看都是plot,但是事实上他和matplotlib模板中的plot的语法格式压根就不一样,所以,今天我们来看看Sympy绘图

首先,先把sympy和绘图模块导入:

import sympy as sy
import sympy.plotting as syp

先看一个书上的简单例子:

import sympy as sy
import sympy.plotting as syp
x,y=sy.symbols("x y")
syp.plot(sy.sin(x),x,x-x**3/6,x-x**3/6+x**5/120,(x,-4,4),title='sin(x) and its first Taylor approximate')

图2:sin(x)的泰勒展开的前三项

我觉得这个图做的还可以吧,但是书上说很不理想,咱也不知道人家要的理想到底是个什么状态

对于隐式定义的二维曲线,Matplotlib模块不需要任何修改就可以处理,Sympy则是提供了一个特殊函数syp.plot_paramrtric()函数来处理:

举一个简单的例子:

xc=sy.cos(u)+sy.cos(7*u)/2+sy.cos(17*u)/3
yc=sy.sin(u)+sy.sin(7*u)/2+sy.sin(17*u)/3
fig2=syp.plot_parametric(xc,yc,(u,0,2*sy.pi))

图三,绘制结果

看上去还不错,我试试看能不能调颜色:不知道怎么调。。。

sympy绘图包含了matplotib中没有的功能,就是绘制平面中隐式定义的一条或者多条曲线的能力,跟着书上的来几个练一练,就知道怎么回事情了:

  1. 椭圆:

这里用的函数中,输入的值是我们要绘制的方程(没等号啊),然后是自变量的取值范围:

syp.plot_implicit(x**2+x*y+y**2-1,(x,-1.5,1.5),(y,-1.5,1.5))

我找到调节颜色的方法嘞:line_color=“color”

这里我设置成了红色:

图4:椭圆

既然有了椭圆,我想画个规则一点的椭圆:

syp.plot_implicit(x**2/16+y**2/4-1,(x,-5,5),(y,-5,5),line_color="red")

图5:椭圆

就是,现在还不知道线条的粗细怎么去调节。。。

h,z=sy.symbols("h,z",real=True)
z=x+sy.I*y
w=sy.cos(z**2).expand(complex=True)
wa=sy.Abs(w).expand(complex=True)
syp.plot_implicit(wa**2-1,line_color='r')

图6

我去,竟然还能画交集:

x**2+y**2<4和xy>1的交集:

syp.plot_implicit(sy.And(x**2+y**2<4,x*y>1),(x,0,2),(y,0,2),line_color='red')

图7:交集

那那再试一个交集:

syp.plot_implicit(sy.And(y>1/x,y

图8交集

也可可以画等高线:

syp.plot_contour((x**2+y**2,(x,-3,3),(y,-3,3)),(x*y,(x,-10,10),(y,-10,10)),surface_color='red')
syp.plot_contour(sy.cos(2*u)*(3+sy.sin(u)+sy.cos(v)),(u,-10,10),(v,-10,10),surface_color="red")

上面的两个各是一张图,,但是,我看源码的时候surface_color是有这个声明的,但是我没有找到该怎么搞这个,所以,就放下了:

图9

图10

注意,图10是后面三维图片的中一个函数的二维展示。

还可以绘制三维的:

绘制一个圆锥曲线看看;

syp.plot3d_parametric_line(u*sy.cos(4*u),u*sy.sin(4*u),u,(u,0,10))

图11

在不同的矩形网格上绘制之叠加图:

syp.plot3d((x**2+y**2,(x,-3,3),(y,-3,3)),(x*y,(x,-5,5),(y,-5,5)))

图12:叠加图片

3维度的是可以自由旋转的,这里就展示一个我觉得看起来比较直观的面就行了

最后,来一个参数化曲面:

syp.plot3d_parametric_surface(sy.cos(2*u)*(3+sy.sin(u)+sy.cos(v)),sy.sin(2*u)*(3+sy.sin(u)+sy.cos(v)),2*sy.cos(u)+sy.sin(v),(u,-10,10),(v,-10,10))

图13

但是,如果你直接用syp.plot3d去画这个函数,得到的是这个样子的:

图14

别说,要是他能像matploylib那像调节colormap,我觉得他的绘图效果也会非常不错的。

好了,Sympy的学习就到这里了,还是多看文档吧,毕竟,你自己敲代码的时候,就会发现,自动补全的提示,比你知道的要多得多。

相关内容

热门资讯

广州首富,要减持140亿小米股... 雷军的好兄弟、小米的 二当家林斌, 提前一年预告式“跑路”。这是好事,还是坏事?很多人不知道的是,林...
零跑汽车回应一汽37亿入股:一... 新京报贝壳财经讯(记者林子)12月29日上午,对于一汽入股零跑汽车,零跑科技副总裁李腾飞在媒体发布会...
人民币汇率走强,中国经济稳健坚... 本文来源:时代周报 作者:迟雨12月以来,人民币持续走强。25日,离岸人民币兑美元日内升破7.0关口...
30分钟成交超15亿,国投白银... 12月29日,连续两日跌停的国投白银LOF,复牌再次触及跌停,随后快速反弹转涨,最高涨超9%。数据显...
经济大省开始给专科生发钱,什么... 文丨西部君真金白银“抢人”,这次对象终于轮到专科生了。最近一段时间,浙江多个城市更新了人才补贴政策。...