Math Maxima:如何计算出一个有限和?

Math Maxima:如何计算出一个有限和?,math,symbolic-math,maxima,Math,Symbolic Math,Maxima,这个问题是关于最大输出的人性化表示 简言之,我该怎么做 b*d4 + b*d3 + b*d2 + b*d1 + a*sin(c4 + alpha) + a*sin(c3 + alpha) + a*sin(c2 + alpha) + a*sin(c1 + alpha) 像 b*sum_{i=1}^{4} d_i + a*sum_{j=1}^{4}sin(c_i + \alpha) 其中sum_{*}^{*}*是一个求和符号和一个带下标的表达式 或更深入的,如何在此处正确建模有限的项集 考虑一组

这个问题是关于最大输出的人性化表示

简言之,我该怎么做

b*d4 + b*d3 + b*d2 + b*d1 + a*sin(c4 + alpha) + a*sin(c3 + alpha) + a*sin(c2 + alpha) + a*sin(c1 + alpha)

b*sum_{i=1}^{4} d_i + a*sum_{j=1}^{4}sin(c_i + \alpha)
其中sum_{*}^{*}*是一个求和符号和一个带下标的表达式

或更深入的,如何在此处正确建模有限的项集

考虑一组有限的实体$x_i$(这里试着说tex),它们的编号从1到n,其中n是已知的。让函数$F$依赖于这些实体的几个特征$c_ji=c_j(x_i),j=1..k$(k-也已知),因此$F=F(c_11,…,c_kn)$

现在,当我尝试在Maxima中实现它并用它做一些事情时,它会产生各种类型的和和和积,其中编号的项表示为$c_1*a+c_2*a+c_3*a+d_1*b+d_2*b+d_3*b+d_4*b$,你可以在纸上写为$a*\sum_{I=1}{c_I+b*sum{I=1}{4}I}d

那么我怎样才能让Maxima做这种表达式收缩呢

更具体地说,下面是一个实际的代码示例: (最大输出标记为“>>>”)

总之,这里有三个问题:

  • 我如何从这篇文章顶部的表达式中算出一个和
  • 我怎样才能让Maxima知道我在说什么
  • 如何使Maxima在输出中保持事物的顺序

  • 提前谢谢。

    这里有一个方法可以实现我认为你想要的

    (%i1) n: 4 $
    (%i2) F(i) := a*sin(alpha + c[i]) + b*d[i];
    (%o2)                  F(i) := a sin(alpha + c ) + b d
                                                  i       i
    (%i3) 'sum(F(i), i,1,4);
                            4
                           ====
                           \
    (%o3)                   >    (a sin(c  + alpha) + b d )
                           /             i               i
                           ====
                           i = 1
    (%i4) declare (nounify(sum), linear);
    (%o4)                                done
    (%i5) 'sum(F(i), i,1,4);
                            4                         4
                           ====                      ====
                           \                         \
    (%o5)                a  >    sin(c  + alpha) + b  >    d
                           /          i              /      i
                           ====                      ====
                           i = 1                     i = 1
    (%i6)
    
    这里最重要的是,我已经将我们称之为“c sub I”和“d sub I”分别写成
    c[I]
    d[I]
    。这些是名为
    c
    d
    的索引变量,
    i
    是索引。没有必要实际存在名为
    c
    d
    的数组或列表,
    i
    可能有也可能没有特定的值

    我已经编写了
    F
    作为一个普通函数。我通过
    concat
    避免了变量名的构造,并避免了将这些名称替换为表达式。我想强调的是,这种行动几乎肯定不是最好的方式

    %i3
    中,请注意,我将求和写成了
    'sum(…)
    ,这使得它成为了一个所谓的名词表达式,这意味着它是以符号形式维护的,而不是经过计算的

    默认情况下,总和不被视为线性,因此在
    %i4
    中,我将总和声明为线性,以便
    %o5
    中的结果与预期一致


    Maxima没有办法将诸如
    a1+a2+a3这样的表达式收集回符号求和,但也许您不需要这样的运算。

    谢谢您的回答。顺便问一下,我如何计算实际值列表
    c_I
    d_I
    的总和?更棘手的是,当实际值仅为所有索引变量的子集所知时?比如,如果我们在
    1..4
    中有
    (a_i+b_i)^2
    之和,但我们只知道
    a[i]
    [4,5,6,7]
    中,而
    b[i]
    未知,那么预期结果将是
    126+sum(b_i^2)+8*b_1+…
    。不确定这是否可能也不是必需的(也许在这种情况下,我们人类应该介入并做这件事),但好奇Maxima是否提供了这样做的方法;总和((a[i]+b[i])^2,i,1,4)产生
    (b[4]+7)^2+(b[3]+6)^2+(b[2]+5)^2+(b[1]+4)^2
    。由此,
    展开(%)产生
    b[4]^2+14*b[4]+b[3]^2+12*b[3]+b[2]^2+10*b[2]+b[1]^2+8*b[1]+126
    。所以a有值和b没有值没有问题,尽管结果的形式有些混乱。一般来说,Maxima对某些变量有值而某些变量没有值的表达式感到满意。
    (%i1) n: 4 $
    (%i2) F(i) := a*sin(alpha + c[i]) + b*d[i];
    (%o2)                  F(i) := a sin(alpha + c ) + b d
                                                  i       i
    (%i3) 'sum(F(i), i,1,4);
                            4
                           ====
                           \
    (%o3)                   >    (a sin(c  + alpha) + b d )
                           /             i               i
                           ====
                           i = 1
    (%i4) declare (nounify(sum), linear);
    (%o4)                                done
    (%i5) 'sum(F(i), i,1,4);
                            4                         4
                           ====                      ====
                           \                         \
    (%o5)                a  >    sin(c  + alpha) + b  >    d
                           /          i              /      i
                           ====                      ====
                           i = 1                     i = 1
    (%i6)