【问题标题】:sympy - differentiation over an abstract componentsympy - 对抽象组件的区分
【发布时间】:2021-06-30 20:47:59
【问题描述】:

感谢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. 使用 Vector 类
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, x[i])
T1.subs(sqrt(x[alpha]**2 + x[beta]**2 + x[gamma]**2), 'r')

两者都给出以下答案:

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

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

这可能吗?

谢谢!

【问题讨论】:

  • 可能是使用 Indexed 和 IndexedBase 的一种方式

标签: python sympy abstraction differentiation


【解决方案1】:

成功了!

这是代码示例:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多