如何在列表中振荡数字?

时间:2017-11-15 13:02:03

标签: list wolfram-mathematica

问题:如何使这些振荡成为第一个数字或表达式+下一个是 - 后面的那个是+依此类推等等下面提供的列表(不使用特殊的振荡功能)如果一个人甚至存在)。

我目前正在获得输出,如下所示:

    x + x^3/6 + x^5/120 + x^7/5040 + x^9/362880  
1. {1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69,
73, 77, 81, 85, 89}

预期产出:

x - x^3/6 + x^5/120 - x^7/5040 + x^9/362880  
2. {1, -5, 9, -13, 17, -21, 25, -29, 33, -37, 41, -45, 49, -53, 57, -61, 65, -69, 73, -77, 81, -85, 89}

Sum[x^j/Factorial[j], {j, 1, 9, 2}];
myOsc = Table[i, {i, 1, 89, 4}];

3 个答案:

答案 0 :(得分:1)

Sum[If[OddQ[(j - 1)/2], -x^j, x^j]/Factorial[j], {j, 1, 9, 2}]
  

x - x ^ 3/6 + x ^ 5/120 - x ^ 7/5040 + x ^ 9/362880

myOsc = Table[If[OddQ[(i - 1)/4], -i, i], {i, 1, 89, 4}]
  

{1,-5,9,-13,17,-21,25,-29,33,-37,41,-45,49,-53,57,-61,65,-69,73 ,-77,81,-85,89}

答案 1 :(得分:1)

一项小改进,不需要额外的s变量:

MapIndexed[(-1)^(1 + #2[[1]])*#1 &, x + x^3/6 + x^5/120 + x^7/5040 + x^9/362880]
  

x - x ^ 3/6 + x ^ 5/120 - x ^ 7/5040 + x ^ 9/362880

答案 2 :(得分:0)

s = -1; Map[(s *= -1) # &, x + x^3/6 + x^5/120 + x^7/5040 + x^9/362880]
  

x - x ^ 3/6 + x ^ 5/120 - x ^ 7/5040 + x ^ 9/362880

注意事项mathematica将首先以规范的顺序表达您的表达。因此,例如,如果你像这样键入它:

s = -1; Map[(s *= -1) # &,x^3/6 + x  + x^5/120 + x^7/5040 + x^9/362880]

你得到相同的结果

  

x - x ^ 3/6 + x ^ 5/120 - x ^ 7/5040 + x ^ 9/362880