微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sympy - 对抽象组件的区分

如何解决sympy - 对抽象组件的区分

多亏了 this answer,我正在 sympy 中进行区分,我快完成了,但还没有完成。

我有以下变体代码

  1. 来自答案
x = IndexedBase('x')
alpha,beta,gamma = symbols('alpha beta gamma',integer=True)
r = sqrt(x[alpha]**2 + x[beta]**2 + x[gamma]**2)
T0 = 1/r
i,j,k,l = symbols('i j k l')
T1 = diff(T0,x[i])
T1.subs(sqrt(x[alpha]**2 + x[beta]**2 + x[gamma]**2),'r')
  1. 使用矢量类
V = CoordSys3D('V')
v = x[alpha]*R.i + x[beta]*R.j + x[gamma]*R.k
r = v.magnitude()
T0 = 1/r
T1 = diff(T0,'r')

两者都给出以下答案:

然而,这有很多不需要的 delta 函数,只有在微分到更高阶后才会在数量上相乘。

这里,alpha beta gamma 只是向量的笛卡尔分量,r 是它的长度。 知道,当然,这些 delta 函数永远不能同时为 1,我想实现这个结果:

,其中 i 是一些笛卡尔分量。

这可能吗?

谢谢!

解决方法

成功做到了!

这是代码示例:

x = IndexedBase('x')
alpha,beta,gamma,delta = symbols('alpha beta gamma delta',cls=Idx,range=3)
i = Idx('i',3)
x_i = x[i]
r = sqrt(Sum(x_i**2,i))
T0 = 1/r
T1 = diff(T0,x[alpha])
T1.simplify().subs(sqrt(Sum(x_i**2,i).doit()),'r')

输出: -x[alpha]/r**3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。