代码之家  ›  专栏  ›  技术社区  ›  Smile_SafeLY

如何在列表中振荡数字?

  •  2
  • Smile_SafeLY  · 技术社区  · 7 年前

    问题:对于下面提供的列表,我如何使这些振荡,使第一个数字或表达式是+下一个是-是+之后的一个,等等(如果存在振荡,则不使用专门的振荡函数)。

    我目前得到的输出如下所示:

        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 回复  |  直到 7 年前
        1
  •  2
  •   Picaud Vincent    7 年前

    一个不需要额外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
  •  1
  •   Chris Degnen Akila Dilan Md    7 年前
    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}

        3
  •  1
  •   agentp    7 年前
    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