我需要计算一个向量场的旋度,并用matplotlib绘制它。我正在寻找的一个简单示例可以放在下面这样:
如何在matplotlib库的quiver3d_demo.py中计算并绘制向量场的旋度?
发布于 2016-09-18 22:49:09
要计算向量函数的旋度,您还可以使用numdifftools进行自动数值微分,而无需通过符号微分绕道而行。Numdifftools不提供curl()函数,但它确实计算一个或多个变量的向量值函数的雅可比矩阵,这提供了向量场的所有分量相对于所有变量的导数;这就是计算旋度所需的全部。
import import scipy as sp
import numdifftools as nd
def h(x):
return sp.array([3*x[0]**2,4*x[1]*x[2]**3, 2*x[0]])
def curl(f,x):
jac = nd.Jacobian(f)(x)
return sp.array([jac[2,1]-jac[1,2],jac[0,2]-jac[2,0],jac[1,0]-jac[0,1]])
x = sp.array([1,2,3)]
curl(h,x)这将返回x处的curl的值:array([-216., -2., 0.])绘图如上所述。
发布于 2020-09-23 02:53:00
这是一个基于Octave / Matlab implementation的Python代码,
import numpy as np
def curl(x,y,z,u,v,w):
dx = x[0,:,0]
dy = y[:,0,0]
dz = z[0,0,:]
dummy, dFx_dy, dFx_dz = np.gradient (u, dx, dy, dz, axis=[1,0,2])
dFy_dx, dummy, dFy_dz = np.gradient (v, dx, dy, dz, axis=[1,0,2])
dFz_dx, dFz_dy, dummy = np.gradient (w, dx, dy, dz, axis=[1,0,2])
rot_x = dFz_dy - dFy_dz
rot_y = dFx_dz - dFz_dx
rot_z = dFy_dx - dFx_dy
l = np.sqrt(np.power(u,2.0) + np.power(v,2.0) + np.power(w,2.0));
m1 = np.multiply(rot_x,u)
m2 = np.multiply(rot_y,v)
m3 = np.multiply(rot_z,w)
tmp1 = (m1 + m2 + m3)
tmp2 = np.multiply(l,2.0)
av = np.divide(tmp1, tmp2)
return rot_x, rot_y, rot_z, avhttps://stackoverflow.com/questions/30378676
复制相似问题