2010-12-06 10 views
1

Ich habe zwei Sequenzen mit variablen Grenzen wieWie subtrahieren zwei Sums in Maple

> a:=Sum(x(i),i=n..m); 
> b:=Sum(x(i),i=n-1..m+1);

n und m beliebige natürliche Zahlen sind und offensichtlich m>n.
Ich möchte a von b subtrahieren und sehen, wie Maple den Ausdruck

> b-a; 
x(n-1)+x(m+1);

Ist es möglich, in Maple oder in einem anderen CAS zu

vereinfacht?

+0

Warum brauchen Sie das? –

+0

Ich brauche das, um solche Formeln für Skalarprodukte unter Verwendung der Methode unbestimmter Koeffizienten einzuführen, so dass der Finite-Differenzen-Operator selbstkonjugiert wird. I.e. die Form des Skalarprodukts ist prod (x, y) = Summe (x [i] * y [i] * h [i] * K [i], i = 1..N-1) wobei K [i] - sind unbestimmte Koeffizienten. Der Finite-Differenzen-Operator sieht aus wie Ax [i] = a [i] x [i-1] + b [i] * x [i] + c [i] · x [i + 1]. Was ich habe, ist Gleichung prod (Ax, y) -prod (x, Ay) = 0, die in allgemeiner Form wahr sein muss. – Mike

Antwort

3

Sie können dies tun, indem Sie ein temporäres Objekt verwenden und dann in zwei Stufen agieren.

a:=Sum(x(i),i=n..m): 
b:=Sum(x(i),i=n-1..m+1): 

temp := Sum(x(i),i=op(1,rhs(op(2,a)))..op(2,rhs(op(2,b)))); 
         m + 1  
         -----  
         \   
         )  
         / x(i) 
         -----  
         i = n  

value(combine(b-temp) + combine(temp-a)); 
        x(n - 1) + x(m + 1) 

Oder Sie könnten das in eine Prozedur einfügen.

combminus:=proc(s::specfunc(anything,Sum),t::specfunc(anything,Sum)) 
    local temp; 
    if op(1,s) = op(1,t) then 
     temp:=Sum(op(1,s),i=op(1,rhs(op(2,s)))..op(2,rhs(op(2,t)))); 
     value(combine(s-temp)+combine(temp-t)); 
    else 
     s-t; 
    end if; 
end proc: 

combminus(b, a); 
        x(n - 1) + x(m + 1) 
+0

Dieses Verfahren ist genau das, was ich brauche! Dein Ansatz gibt einen guten Einblick, wie man Sums benutzt, vielen Dank! – Mike