# HP Forums

Full Version: subscripts in CAS?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
In Maxima, you can use subscripts, such as
Code:
`sum(a[k]*x^k, k, 0, 5);`
which results in
Code:
`a*x^5+a*x^4+a*x^3+a*x^2+a*x+a`

or more general
Code:
`sum(a[k]*x^k, k, 0, n);`
where n is a function parameter and a[n] are unspecified constants.

Is there a way to use subscripts in a similar manner on the Prime?
(12-12-2016 06:40 PM)Wes Loewer Wrote: [ -> ]In Maxima, you can use subscripts, such as
Code:
`sum(a[k]*x^k, k, 0, 5);`
which results in
Code:
`a*x^5+a*x^4+a*x^3+a*x^2+a*x+a`

or more general
Code:
`sum(a[k]*x^k, k, 0, n);`
where n is a function parameter and a[n] are unspecified constants.

Is there a way to use subscripts in a similar manner on the Prime?

The exact command on the prime returns a similar looking polynomial except the notation at(a,k-1) is used in place of a[k] for display. This allows you to later store a vector/list into the variable a and the polynomial will be modified accordingly (on the display). You can, instead, use a(k) which will then be displayed as a(k) on the screen. In this case, a is implicitly considered a function.

sum(a(k)*x^k, k, 0, n);
examples of use on CAS MODE, n>0

0: with Σ cmd
purge(a);
Σ(a[k]*x^k,k,1,3) -> x*a+x^2*a+x^3*a // with [] at(a, k-1) == a
Σ(a(k)*x^k,k,1,3) -> x*a(1)+x^2*a(2)+x^3*a(3) // with ()
a:=MAKELIST(x,x,1,3); -> {1,2,3}
Σ(a(k)*x^k,k,1,3) -> x+2*x^2+3*x^3

1: with SUM cmd
purge(a);
sum(a[k]*x^k,k,1,3); -> x*a+x^2*a+x^3*a // with []
sum(a(k)*x^k,k,1,3); -> x*a(1)+x^2*a(2)+x^3*a(3) // with ()
a:=MAKELIST(x,x,1,3); -> {1,2,3}
sum(a(k)*x^k,k,1,3) -> x+2*x^2+3*x^3

2: with SEQ cmd
purge(a);
seq(a(k)*x^k,k,1,3); -> [x*a(1),x^2*a(2),x^3*a(3)]
a:=MAKELIST(x,x,1,3); -> {1,2,3}
seq(a(k)*x^k,k,1,3); ->[x,2*x^2,3*x^3]
ΣLIST( seq(a(k)*x^k, k,1,3)) -> x+2*x^2+3*x^3

---

I would like to see the notation using the character ↓ To differentiate it from other operations with parenthesis (evaluation) and so that pretty-print can decode more easily

seq(a↓(k)*x^k,k,1,5); ->
[x*a↓(1),x^2*a↓(2),x^3*a↓(3),x^4*a↓(4),x^5*↓a(5)]
What I had in mind was the ability to treat a[k] as you would any other identifier, such as solve([a+a+a=1,a^2+a=2, a-a=3],[a,a,a])

Perhaps it would be better to just show the application I was working on. The following is a function I wrote for Maxima which calculates the coefficients used for the various polynomial integration rules: Trapezoid Rule (n=1), Simpson's Rule (n=2), Simpson's 3/8 Rule (n=3), etc.

Notice how eqs and coefs are lists of equations and coefficients which are determined at run time. In particular, the linsolve() function uses the coefs list as the list of variables to solve for.

Code:
``` NewtonCotesWeights(n):= block ( [a, coefs, eqs, sol, k, i, ret],     p(x,n):=sum(a[k]*x^k, k, 1, n)+a,     coefs(n):=makelist(a[k],k,0,n),     eqs(n):=makelist(y[k]=p(k*h,n),k,0,n),     sol:linsolve(eqs(n),coefs(n)),     for i: 0 thru n do       b[i]:=rhs(sol[i+1]),     ret:factor(integrate(sum(b[k]*x^k, k, 1, n)+b,x,0,n*h)),     for i: 0 thru n do       kill(b[i]),     ret     ); NewtonCotesWeights(3); (3*(y+3*y+3*y+y)*h)/8```

I've not been able to figure out how to do this on the Prime. It boils down to being able to treat a subscripted identifier as it would any other identifier.
Replacing makelist by seq seems to work:
Code:
``` p(x,n):=sum(a[k]*x^k, k, 1, n)+a; coefs(n):=seq(a[k],k,0,n); eqs(n):=seq(y[k]=p(k*h,n),k,0,n); sol:=linsolve(eqs(n),coefs(n)); ...```
If you teach Lagrange polynomial interpolation before teaching Newton-Cotes methods, you can enter :
Code:
``` n:=2;  p:=lagrange(seq(k*h,k,0,n),seq(y[k],k,0,n)); factor(int(p,x,0,n*h)/n)```
(12-15-2016 07:45 AM)parisse Wrote: [ -> ]Replacing makelist by seq seems to work:

Thanks. That's just what I was missing.
Using brackets [], should index to zero and And parentheses in 1.

{a,b,c}(1)
-> a

{a,b,c}
-> a

but
{a,b,c} -> "Index outside range ..."

{a,b,c}(1) or {a,b,c} -> a
So you have two things that do the same thing. for what?

Starting at zero, we avoid rewriting the expressions
sum(a[k]*x^k, k, 0, 5) -> sum(a[k]*x^k, k, 1, 6)
Reference URL's
• HP Forums: https://www.hpmuseum.org/forum/index.php
• :