Processing math: 100%
Ask Your Question
1

Working with sums/products of lists

asked 6 years ago

galio gravatar image

I need to work symbolically with expressions such as this

L(x;a,b)=ni=1abxa1i(1xai)b1

where x would be a random sample of size n.

I don't know of any way to express the indexing of the sample x by each element...

The closest I got was defining the variables n and i and representing x as a function

var('a','b','x','n','i')
assume(x>0,a>0,b>0,i>0,n>0)
X = function('X',nargs=1)
L = product(a*b*X(i)^(a-1)*(1-X(i)^a)^(b-1), i, 1, n)

But this seems to inmediately assume that X(i)=i and L is represented as:

(1)nanbnX(0)X(1)X(2)X(3)X(4)X(5)X(6)X(7)X(8)X(9)ni=1(X(i)a+1)bni=1X(i)aX(n1)X(n2)X(n3)X(n4)X(n5)X(n6)X(n7)X(n8)X(n9)X(n)ni=1X(i)a1ni=1X(i10)

I don't know how to deal with this expression, and it seems to me like it should be straight forward.

In case it's meaningful, after defining the expression, I will be differentiating it with respect to both a and b.

Preview: (hide)

Comments

Very strange behavior. It seems to have something to do with the minus signs in the exponents. A workaround is to change variables: a to a+1 and b to b+1 (and hence a>=0, b>=0): L = product((a+1)*(b+1)*X(i)^a*(1-X(i)^(a+1))^b, i, 1, n) works fine.

rburing gravatar imagerburing ( 6 years ago )

Why do you think it's assuming that X(i)=i? I see no indication of that. It is doing some ill-advised simplification (by the looks of it, an invalid one--Bug report?), apparently triggered by the b1 exponent. So if you're willing to shift b, you can use

L = product(a*b*X(i)^(a-1)*(1-X(i)^a)^(b-1), i, 1, n)

However, you'll quickly find that sage currently doesn't know how to differentiate symbolic products, so you might want to do this yourself via a logarithmic derivative.

nbruin gravatar imagenbruin ( 6 years ago )

That is very strange... However you found an issue with my code. a and b should be greater than or equal to 0, not strictly greater. In that case the result remains the same.

galio gravatar imagegalio ( 6 years ago )

@nbruin I thought it assumed X(i)=i from the expansion to (1)n...X(0)X(1)... but now that I see it again, it might have come to mind from some other tests I run (but can't replicate now). The next thing I'll do is take the logarithm of L, so differentiating shouldn't be a problem so long as it understands the product will turn into a sum (not sure it will since log of the product simply puts a log around the whole expression even when simplified). Perhaps you could expand on an answer? Thanks

galio gravatar imagegalio ( 6 years ago )

1 Answer

Sort by » oldest newest most voted
0

answered 6 years ago

tmonteil gravatar image

I am not sure to understand your request, but if it is OK to work with n fixed, does the following help you ?

sage: n = 3
....: var('a','b')
....: assume(a>0,b>0)
....: X = [SR.var('X_{}'.format(i)) for i in range(n)]
....: L = prod(a*b*X[i]^(a-1)*(1-X[i]^a)^(b-1) for i in range(n))

sage: L
X_0^(a - 1)*(-X_0^a + 1)^(b - 1)*X_1^(a - 1)*(-X_1^a + 1)^(b - 1)*X_2^(a - 1)*(-X_2^a + 1)^(b - 1)*a^3*b^3

sage: L.diff(a)
-X_0^(a - 1)*X_0^a*(-X_0^a + 1)^(b - 2)*X_1^(a - 1)*(-X_1^a + 1)^(b - 1)*X_2^(a - 1)*(-X_2^a + 1)^(b - 1)*a^3*(b - 1)*b^3*log(X_0) - X_0^(a - 1)*(-X_0^a + 1)^(b - 1)*X_1^(a - 1)*X_1^a*(-X_1^a + 1)^(b - 2)*X_2^(a - 1)*(-X_2^a + 1)^(b - 1)*a^3*(b - 1)*b^3*log(X_1) - X_0^(a - 1)*(-X_0^a + 1)^(b - 1)*X_1^(a - 1)*(-X_1^a + 1)^(b - 1)*X_2^(a - 1)*X_2^a*(-X_2^a + 1)^(b - 2)*a^3*(b - 1)*b^3*log(X_2) + X_0^(a - 1)*(-X_0^a + 1)^(b - 1)*X_1^(a - 1)*(-X_1^a + 1)^(b - 1)*X_2^(a - 1)*(-X_2^a + 1)^(b - 1)*a^3*b^3*log(X_0) + X_0^(a - 1)*(-X_0^a + 1)^(b - 1)*X_1^(a - 1)*(-X_1^a + 1)^(b - 1)*X_2^(a - 1)*(-X_2^a + 1)^(b - 1)*a^3*b^3*log(X_1) + X_0^(a - 1)*(-X_0^a + 1)^(b - 1)*X_1^(a - 1)*(-X_1^a + 1)^(b - 1)*X_2^(a - 1)*(-X_2^a + 1)^(b - 1)*a^3*b^3*log(X_2) + 3*X_0^(a - 1)*(-X_0^a + 1)^(b - 1)*X_1^(a - 1)*(-X_1^a + 1)^(b - 1)*X_2^(a - 1)*(-X_2^a + 1)^(b - 1)*a^2*b^3
Preview: (hide)
link

Comments

1

No, x has variable length, so that's not really a possibility. It shouldn't be that hard to generalize this case. And even if it doesn't go straight to my problem I'd have guessed there should be a way to work with variable-length variables... Perhaps I'm thinking too much like a programmer.

galio gravatar imagegalio ( 6 years ago )

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

Stats

Asked: 6 years ago

Seen: 770 times

Last updated: Jan 06 '19