∇（ナブラ）を使って内積 ∇・b の計算をしたいのですが、ここからどうすればうまくいくのでしょうか。３を出力したいです。

```

    import numpy as np
    x = Symbol('x')
    y = Symbol('y')
    z = Symbol('z')
    
    del_x = np.gradient(,dx)
    del_y = np.gradient(,dy)
    del_z = np.gradient(,dz)
    nabra = np.array([del_x,del_y,del_z])
    b = np.array([x,y,z])
    np.inner(nabla,b)
    
```
CC BY-SA 4.0
2020-04-22T13:49:50.087
65869
2020-04-23T11:48:50.330
2020-04-23T02:12:26.653
19110
39563
question
python numpy sympy
ナブラの内積を計算したいです
まず、SymPy と NumPy の違いをご理解ください。SymPy はシンボリック計算のためのライブラリで、NumPy は数値計算のためのライブラリです。

その上で、SymPy にはベクトル場を表すための関数が用意されています。このドキュメントをご覧ください：[Scalar and Vector Field
Functionality](https://docs.sympy.org/latest/modules/vector/fields.html)

サンプルプログラムです：

```

    >>> from sympy.vector import CoordSys3D, Del, divergence
    >>> # 座標系を決めます
    ... C = CoordSys3D('C')
    >>> # ナブラは Del() として定義されています
    ... nabla = Del()
    >>> # C.i, C.j, C.k が標準的な基底、C.x, C.y, C.z がベクトル場の仮引数です
    ... b = C.x * C.i + C.y * C.j + C.z * C.k
    >>> # 内積は dot です
    ... nabla.dot(b)
    Derivative(C.x, C.x) + Derivative(C.y, C.y) + Derivative(C.z, C.z)
    >>> # 微分計算をしてもらうためには doit() を使います
    ... nabla.dot(b).doit()
    3
    >>> # ナブラとの内積は divergence としても定義されています
    ... divergence(b).doit()
    3
    
```
CC BY-SA 4.0
2020-04-23T11:48:50.330
65894
2020-04-23T11:48:50.330
19110
65869
answer