我现在正在学习 SymPy,我想知道是否有一种方法可以区分函数及其一般形式的变量之一。
考虑这个例子:
有一个向量,我们将其分量写为 x_1、x_2、x_3。
该向量的长度 r 将为 r = sqrt(x_1^2 + x_2^2 + x_3^2)。
我想区分这个向量与 x_i,其中我没有指定 i,它应该给出类似 x_i/r^3 的值。
在 SymPy 中可以做到这一点吗?
抱歉缺少方程渲染..
你可以这样做IndexedBase
。结果以 Kronecker delta 函数形式给出,该函数在替换后进行简化:
In [3]: x = IndexedBase('x')
In [4]: r = sqrt(x[1]**2 + x[2]**2 + x[3]**2)
In [5]: r
Out[5]:
_______________________
╱ 2 2 2
╲╱ x[1] + x[2] + x[3]
In [6]: i = Symbol('i')
In [7]: r.diff(x[i])
Out[7]:
δ ⋅x[1] + δ ⋅x[2] + δ ⋅x[3]
1,i 2,i 3,i
─────────────────────────────────
_______________________
╱ 2 2 2
╲╱ x[1] + x[2] + x[3]
In [8]: r.diff(x[i]).subs(i, 2)
Out[8]:
x[2]
──────────────────────────
_______________________
╱ 2 2 2
╲╱ x[1] + x[2] + x[3]
您还可以对符号维度的向量执行此操作:
In [9]: j = Symbol('j')
In [9]: N = Symbol('N')
In [10]: r = sqrt(Sum(x[i]**2, (i, 1, N)))
In [10]: r
Out[10]:
_____________
╱ N
╱ ___
╱ ╲
╱ ╲ 2
╱ ╱ x[i]
╱ ╱
╱ ‾‾‾
╲╱ i = 1
In [11]: r.diff(x[j])
Out[11]:
N
___
╲
╲ 2⋅δ ⋅x[i]
╱ i,j
╱
‾‾‾
i = 1
────────────────────────
_____________
╱ N
╱ ___
╱ ╲
╱ ╲ 2
2⋅ ╱ ╱ x[i]
╱ ╱
╱ ‾‾‾
╲╱ i = 1
In [12]: r.diff(x[j]).subs(N, 3).subs(j, 2)
Out[12]:
3
___
╲
╲ 2⋅δ ⋅x[i]
╱ 2,i
╱
‾‾‾
i = 1
────────────────────────
_____________
╱ 3
╱ ___
╱ ╲
╱ ╲ 2
2⋅ ╱ ╱ x[i]
╱ ╱
╱ ‾‾‾
╲╱ i = 1
In [13]: r.diff(x[j]).subs(N, 3).subs(j, 2).doit()
Out[13]:
x[2]
──────────────────────────
_______________________
╱ 2 2 2
╲╱ x[1] + x[2] + x[3]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)