Search code examples
matlabseriessymbolic-math

Summation series using matlab


When i write this in matlab

syms x;
f=x^3-cos(x);
g=diff(f)

it gives out put as

g =

3*x^2+sin(x)

Now I want to generate summation series as
http://upload.wikimedia.org/math/e/1/c/e1c5e8954e1e68099d77ac15ffa765a7.png

I google and found "symsum" command but it doesn't do my required task, when i write the following commands

syms k
symsum(k^2, 0, 10)
symsum(1/k^2,1,Inf)

it gives the out put as

ans = 385

ans = pi^2/6

Can you guys guide me how can I genereate the series which produce output as
http://upload.wikimedia.org/math/e/1/c/e1c5e8954e1e68099d77ac15ffa765a7.png

so that when I give command diff(Sk); it should produce result as or something like that enter image description here

For example in Mathematica I can do it as

SummationSeries with subscript

Your assistance will be surely of great help.


Solution

  • I have looked the help of the symsum function and you have a really good example, try this:

    syms x;
    syms k real;
    symsum(x^k/sym('k!'), k, 0, inf)
    

    This commands evaluate the series enter image description here, and actually evaluates to enter image description here. As you can see you have to specify the term of the series with its dependence of 'k'. Then in the symsum command you have to specify that you want to sum over 'k' from 0 to inf.

    So for example, you could do the following:

    syms x;
    syms k real;
    ak = (-1)^k*x^(2*k+1)/sym('(2*k+1)!');
    sum_ak = symsum(ak, k, 0, inf);     % gives back sin(x)
    dak = diff(ak,x);
    sum_dak = symsum(dak, k, 0, inf);   % should give back cos(x), but does not
    A5 = symsum(ak, k, 0, 5);           % add only the first values of the series
    DA5 = symsum(dak, k, 0, 5);         % add the derivated terms of the series
    

    You can declare multiple symbolic variables uk and add them up:

    syms x;
    syms k real;
    n = 5;
    for i = 0:n
        eval(['syms u',num2str(i),' real;']);
    end
    
    A = cell(1,n);
    for i=1:n
        A{i} = u0;
        for j=1:i
            eval(['A{i} = A{i} + u',num2str(j),';']);
        end
    end
    A{3} % check the value of A{i}
    

    Hope this helps,