【问题标题】:Can I do this kind of simplification in symbol computation?我可以在符号计算中做这种简化吗?
【发布时间】:2015-06-01 00:03:57
【问题描述】:

我可以使用 SymPy 或其他软件来简化这样一个系列的总和吗?

我可以简化这些系列的总和{i}

summation(i, (i, 1, n))

不知道如何处理带下标的系列{a_i}

a_1, a_2, a_3, a_4 = symbols("a_1 a_2 a_3 a_4")

说,我有一个方程式a_1 + a_2 + ... + a_100 - x = 0。答案将是: x = a_1 + a_2 + ... + a_100。 它太长了。我想用其他一些符号i 和函数summation 来缩短它,比如x = summation(a_i, (i, 1, 100 ))

代码Sum(Indexed("x", i), (i, 1, 4)).doit() 将得到结果x[1] + x[2] + x[3] + x[4]。但是,我想扭转这个过程。我想要代码somefunction(x[1]+x[2]+x[3]+x[4]) 得到结果Sum(Index("x", i), (i, 1, 4))

【问题讨论】:

  • 你的问题是检测你输入了一个系列,输出了封闭的形式表达式吗?我的数学术语可能不正确。但我认为在这种情况下,下面的答案并不能回答你的问题。
  • 是的,我只是想让表达式更短。
  • docs.sympy.org/0.7.1/modules/simplify/simplify.html 答案可能在那里。我自己从来没有这样做过。
  • 不清楚你在问什么。如果你展示你尝试过的东西,它可能有助于澄清问题。
  • 可能重复:stackoverflow.com/questions/26402387/…。 (我认为你通过标记一堆其他语言来混淆这个问题,顺便说一句)

标签: python sympy


【解决方案1】:

你可以通过反射来做到这一点:

local = locals()
sum(local['a_' + i] for i in range(1, n + 1))

【讨论】:

  • TypeError: 无法连接 'str' 和 'Symbol' 对象?
  • 我试试你的答案。 sum(local['a_' + i] for i in range(1, n + 1))。 TypeError: 不是数字。您回答使用什么模块?我不能让它工作。
  • @FangquanShi,这只是香草蟒。正如其他人所说,不清楚你在问什么。你能编辑你的问题并解释你从哪里得到a_1, a_2, ..., a_n符号,它们代表什么,以及你想用它们做什么?
【解决方案2】:

mathemetica 解决方案(主要是为了说明这是多么痛苦)

 pp[list_] /; Length@Union[Head /@ list] > 1 :=
      Total[ pp /@ GatherBy[list, Head] ]
 pp[list_] /; 
     Length@list > 1 && (Sort[Flatten[List @@ # & /@ list ]] == 
         (rg = Range[list[[1, 1]], list[[-1, 1]]])) :=
           sum[Head[list[[1]]][i], {i, rg[[1]], rg[[2]]}]
 pp[list_] := Plus @@ list


 (a[1] + a[2] + q[3] + 2)/(b[1] + b[2] + c[3] + b[3] + c[4]) /. 
       x_Plus :> (pp@(List @@ x))

注意sum 上的小写s(这不是一个已定义的函数),因为数学会在您使用它时自动展开Sum。我们可以恢复原件

 %/. sum->Sum

 (2 + a[1] + a[2] + q[3])/(b[1] + b[2] + c[3] + c[4])

【讨论】:

  • 谢谢。相当复杂。
猜你喜欢
  • 2012-10-05
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多