On Monday, September 8, 2014 6:48:44 PM UTC-7, Chris Thron wrote:
>
> This works beautifully, thanks.
>
> I have another small issue: I can't do substitutions in equality
> expressions with terms in the free algebra. For instance, Sage tells me
> "Not iterable"
>
>
> var('c, pi, c, mu_0,epsilon_0,epsilon,mu,q,Q,e')
> F.<curl,div,grad,d_t,d_x,d_y,d_z,J,I,K,P,p,E,V,Phi,D,B,A,H,M,m,rho,sigma,C,R,Z,L>
>
> =
> FreeAlgebra(SR,27,'curl,div,grad,d_t,d_x,d_y,d_z,J,I,K,P,p,E,V,Phi,D,B,A,H,M,m,rho,sigma,C,R,Z,L')
>
> eqCGS = curl*H - (1/c)*d_t*D == 4*pi/c*K
> ### CGS expression on this line ###
>
Do check what you get back. At this point, eqCGS is bound to "False",
because you've asked sage if two elements of F are equal that are not. The
fact that "==" on SR does not always return a boolean is a big concession
to calculus students that makes SR fit rather poorly with the rest of
Python. Other sage structures (including FreeAlgebra) don't follow this
exceptional behaviour. Imagine a programming language in which "2 != 3"
does not provide an immediate boolean ... with SR you have that:
sage: SR(2) != SR(3)
2 != 3
sage: F(2) != F(3)
True
Your options are keeping track of LHS and RHS yourself or to take the
difference of them.
sage: eqCGS = curl*H - (1/c)*d_t*D - 4*pi/c*K
eq =eqCGS* (1/2)*mu_0^(-1/2)*pi^(-1/2)
> ### Multiplicative factor on this line ###
>
It would be nice if this would fail as a result, but Python specifies that
"False" is essentially equivalent to 0, so after this, eq is bound to 0.
> assume(mu_0>0,epsilon_0>0,pi>0,c>0,e>0)
> eq = sum(b.subs(c == mu_0^(-1/2)*epsilon_0^(-1/2))*F(a) for a,b in eq)
>
Note that False * ( (1/2)*mu_0^(-1/2)*pi^(-1/2) ), which evaluates as 0*(
(1/2)*mu_0^(-1/2)*pi^(-1/2) ) doesn't involve any free algebra elements, so
you're just getting an element of SR:
sage: parent(eq)
Symbolic Ring
It doesn't necessarily have all the properties that elements of F have. As
a work-around you could simply make sure that you have an element of F:
sage: eq = sum(b.subs(c == mu_0^(-1/2)*epsilon_0^(-1/2))*F(a) for a,b in
F(eq))
(which results in 0 of course, due to the earlier problems)
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.