打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python – 如何以快速数学方式输入公式来绘制矢量场?

如果我在matplotlib中绘制矢量场,我通常会明确地为每个组件写下公式,以避免出现问题,例如形状和广播.然而,在稍微复杂的公式中,代码变得混乱,写入和读取.

考虑以下示例,我想绘制由此公式定义的矢量字段:

是否有任何方便的方法来输入更符合向量操作的数学公式,如下面的我(不工作)伪代码?

# Run with ipython3 notebook%matplotlib inlinefrom pylab import *## The following works, but the mathematical formula is a complete mess to reddef B_dipole(m, a, x,y):    return (3*(x - a[0])*(m[0]*(x - a[0])   m[1]*(y-a[1]))/((x - a[0])**2   (y-a[1])**2)**(5/2.0) -m[0]/((x - a[0])**2   (y-a[1])**2)**(3/2.0),3*(y - a[1])*(m[0]*(x - a[0])   m[1]*(y-a[1]))/((x - a[0])**2   (y-a[1])**2)**(5/2.0) -m[1]/((x - a[0])**2   (y-a[1])**2)**(3/2.0))## I want something like (but doesn't work)#def B_dipole(m, a, x,y):#    r = array([x,y])#    rs = r - a ## shifted r#    mrs = dot(m,rs) ## dot product of m and rs#    RS = dot(rs,rs)**(0.5) ## euclidian norm of rs#    ret = 3*mrs*rs/RS**5 - m/RS**3 ## vector/array to return#    return retx0, x1=-10,10y0, y1=-10,10X=linspace(x0,x1,55)Y=linspace(y0,y1,55)X,Y=meshgrid(X, Y)m = [1,2]a = [3,4]Bx,By = B_dipole(m,a,X,Y)fig = figure(figsize=(10,10))ax = fig.add_subplot(1, 1, 1)ax.streamplot(X, Y, Bx, By,color='black',linewidth=1,density=2)#ax.quiver(X,Y,Bx,By,color='black',minshaft=2)show()

输出:

编辑:
我的非工作代码的错误消息:

---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-2-43b4694cc590> in <module>()     26 a = [3,4]     27 ---> 28 Bx,By = B_dipole(m,a,X,Y)     29      30 fig = figure(figsize=(10,10))<ipython-input-2-43b4694cc590> in B_dipole(m, a, x, y)     10 def B_dipole(m, a, x,y):     11     r = array([x,y])---> 12     rs = r - a ## shifted r     13     mrs = dot(m,rs) ## dot product of m and rs     14     RS = dot(rs,rs)**0.5 ## euclidian norm of rsValueError: operands could not be broadcast together with shapes (2,55,55) (2,) 

如果我不移动r错误消息:

--ValueError                                Traceback (most recent call last)<ipython-input-4-e0a352fa4178> in <module>()     23 a = [3,4]     24 ---> 25 Bx,By = B_dipole(m,a,X,Y)     26      27 fig = figure(figsize=(10,10))<ipython-input-4-e0a352fa4178> in B_dipole(m, a, x, y)      8     r = array([x,y])      9     rs = r# - a ## not shifted r---> 10     mrs = dot(m,rs) ## dot product of m and rs     11     RS = dot(rs,rs)**0.5 ## euclidian norm of rs     12     ret = 3*mrs*rs/RS**5 - m/RS**3 ## vector/array to returnValueError: shapes (2,) and (2,55,55) not aligned: 2 (dim 0) != 55 (dim 1)

解决方法:

我用简单的CAS简化了你的表达

--- Emacs Calculator Mode ---    3 (m0*(x - a0)   m1*(y - a1)) (x - a0)               m0                  3 (m0*(x - a0)   m1*(y - a1)) (y - a1)               m14:  -------------------------------------- - --------------------------   i*(-------------------------------------- - --------------------------)                   2           2 2.5                  2           2 1.5                     2           2 2.5                  2           2 1.5          ((x - a0)    (y - a1) )            ((x - a0)    (y - a1) )               ((x - a0)    (y - a1) )            ((x - a0)    (y - a1) )3:  [X = x - a0, Y = y - a1]    3 X*(X m0   Y m1)        m0           3 Y*(X m0   Y m1)        m12:  ----------------- - ------------   i*(----------------- - ------------)        2    2 2.5        2    2 1.5          2    2 2.5        2    2 1.5      (X    Y )         (X    Y )           (X    Y )         (X    Y )    3 X*(X m0   Y m1)   m0       3 Y*(X m0   Y m1)   m11:  ----------------- - ---   i*(----------------- - ---)            5.           3.              5.           3.           R            R               R            R

我将该字段的两个组成部分表示为复数的实部和虚部.

从最后一个表达开始,可能是写

x, y = np.meshgrid(...)X, Y = x-a[0], y-a[1]R = np.sqrt(X*X Y*Y)H = X*m[0] Y*m[1]Fx = 3*X*H/R**5-m[0]/R**3Fy = 3*Y*H/R**5-m[1]/R**3
来源:https://www.icode9.com/content-1-288351.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
S71200 -1500通过 ARRAY[] 计算两个矢量标积的示例
宝马工程师--分段斜极结构对同步电机振动噪音的影响研究
Python骚操作!数据分析应用案例分享
tf.py_func
多种天线及其辐射方向图(四)
65.矢积计算公式来源
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服