Ask Your Question

Why Sage cannot pass a value of variable from one function to another nested function?

asked 2013-10-31 13:09:56 +0200

terces907 gravatar image

updated 2019-03-12 21:14:02 +0200

FrédéricC gravatar image

The first i ran this:

sage: f(x)=(2/n)*(sin(n*x)*(-1)^(n+1))
sage: sum(f, n, 1, 2) #using summation function
-sin(2*x) + 2*sin(x)

So, In this case the result was evaluated correctly.

But if i tried to combine the first line and the second line together:

sage: f(x,k) = sum((2/n)*(sin(n*x)*(-1)^(n+1)), n, 1, k)
#where n = 1,2,3 ... k
sage: f(x,2)
-2*sum((-1)^n*sin(n*x)/n, n, 1, 2)

The result wasn't finished!

Why sage cannot evaluate mathematical expression in this case?

Another tried to prove that Sage can pass its variable from left function to right function even though the right function was a nested function:

sage: f(x) = sin(arcsin(x)) 
sage: f(0.5)

Edit: (See the same question on SO.)

edit retag flag offensive close merge delete

2 Answers

Sort by » oldest newest most voted

answered 2013-10-31 13:24:50 +0200

kcrisman gravatar image

updated 2013-11-01 11:53:24 +0200

sage: n, k = var('n, k')
sage: f(x,k) = sum((2/n)*(sin(n*x)*(-1)^(n+1)), n, 1, k)
#where n = 1,2,3 ... k
sage: f
(x, k) |--> -2*sum((-1)^n*sin(n*x)/n, n, 1, k)

I'm not sure what you think is wrong here. The 2 and a factor of -1 were both factored out, that's all.

However, I do agree that this doesn't expand. What is happening is that we are sending the sum to Maxima

if algorithm == 'maxima':
    return maxima.sr_sum(expression,v,a,b)

and then ordinarily when it returns, it is still a Maxima object (which may be a bug?). But when we put it in the function, it becomes a Sage object - but we don't have a Sage "sum" object. So I think that is what would have to be fixed.

That this is possible is shown by the following Maxima example (which I put on the ticket):

(%i1) f: -2*'sum((-1)^n*sin(n*x)/n,n,1,2);
                               ====       n
                               \     (- 1)  sin(n x)
(%o1)                      - 2  >    ---------------
                               /            n
                               n = 1

(%i8) f, nouns;
                                 sin(2 x)
(%o8)                       - 2 (-------- - sin(x))
edit flag offensive delete link more


That mean i cannot define the function like that right? It will be very nice if i can define it similar to the second example. it will be consistent with the real equation on my paper.

terces907 gravatar imageterces907 ( 2013-10-31 13:58:54 +0200 )edit

I agree with kcrisman that at first sight the result seems to be ok and only be presented in a different form. But as the example sage: g(x)=(2/n)*(sin(n*x)*(-1)^(n+1)) sage: f(x,k) = sum((2/n)*(sin(n*x)*(-1)^(n+1)), n, 1, k) sage: (f(x,2)-sum(g, n, 1, 2)).full_simplify() doesn't return zero I would call this a bug.

twch gravatar imagetwch ( 2013-11-01 09:26:21 +0200 )edit

Well, I don't know about a bug, since deciding for an arbitrary expression whether it happens to be zero is very, very hard... but it is decidedly suboptimal, so I'll open a ticket for this issue.

kcrisman gravatar imagekcrisman ( 2013-11-01 11:31:32 +0200 )edit

This is now [Trac #15346](

kcrisman gravatar imagekcrisman ( 2013-11-01 11:52:47 +0200 )edit

answered 2013-11-01 09:36:13 +0200

twch gravatar image

You can avoid this problem if you don't use a symbolic function but define a python function:

sage: var('n')
sage: def g(x,k):
sage:    return sum((2/n)*(sin(n*x)*(-1)^(n+1)), n, 1, k)
sage: print g(x,2)
-sin(2*x) + 2*sin(x)
edit flag offensive delete link more


I like this! I tried this using lambdas but it didn't work correctly, but this is a good workaround.

kcrisman gravatar imagekcrisman ( 2013-11-01 11:31:00 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2013-10-31 13:09:56 +0200

Seen: 1,022 times

Last updated: Nov 01 '13