I think you should split the operation into 2 steps: 1) expression of basis
vectors in new frame and 2) expression of coordinates in new frame. This
way, if the user only wants to do one or the other, they are able to.

I think you should have the order for the complete re-expression being 1)
and then 2). I would separate the _basis vectors_ by frame, into n-tuples
of the measure numbers, then put those measure numbers in a (n x 1) Matrix,
and multiply the proper DCM by that measure number matrix, giving you
another Matrix of the measure numbers in the new frame. Some things will
cancel out, so I think it's better to do this step on all a frame's basis
vectors together.

Next, what Sachin posted for the coordinate transformation ([vector of A's
vars] = [Pos-vector of B wrt A] + DCM(A, B) * [vector of B's vars]) is
mostly correct - I would clarify that [Pos-vector of B wrt A] is:
Matrix([dot(p_bo_ao.express(A), bv) for bv in A.basis_vectors()]). Again,
this is why I would do the basis expression first, so you can do this
expression of the position vector without issue.

Does that help to clarify things?

-Gilbert




On Tue, Jul 30, 2013 at 12:34 PM, Sachin Joglekar
<srjoglekar...@gmail.com>wrote:

> Ya, I agree quite a bit of handling-the-symbols would be required. Maybe,
> we could cache the relationships (dicts) between coordinate variables of
> different frames?
> Then, when 'express' is called, just iterate through the atoms of the
> vector expression and note the systems whose variables we come across?
> About the validity, I had discussed this method with Gilbert in the past,
> but I guess they should confirm this before you go ahead.
>
>
> On Wed, Jul 31, 2013 at 12:14 AM, Sachin Joglekar <srjoglekar...@gmail.com
> > wrote:
>
>> You may want to use the method I used while hacking the old mechanics
>> module to do the kind of re-expression we want to achieve. say a vector v
>> from frame A to frame B
>> First, we need to calculate the coordinate variables of frame A in terms
>> of those of B.
>> We can do this using -
>> [vector of A's vars] = [Pos-vector of B wrt A] + DCM(A, B) * [vector of
>> B's vars]
>> In above equation, don't take the LHS as a 'vector field'. It's just a
>> column matrix with the respective symbols denoting coordinate variables of
>> A.
>> Comparing the entries in LHS and RHS will help you contrust a dict
>> mapping A.x, A.y and A.z in terms of B.x, B.y, B.z
>>
>> Use the sympy subs method on v to remove A.x, A.y and A.z from its
>> expression. Suppose we now get v1
>> Then just do
>> [final vector] = DCM(A, B) * [v1]
>>
>> The above will give the required re-expressed vector.
>>
>> For the above method to work, you *just* need to separate the vector into
>> components based on the basis _vectors_, not scalars. Since we are going to
>> 'subs' them, their occurences don't matter. And according to me, thats what
>> separate should do- just think of basis vectors. Then use the above algo on
>> each component thus found out to get the final result. You can try this
>> with an example and confirm the validity.
>>
>> @stefan, @gilbert, am I correct?
>>
>>
>> On Tue, Jul 30, 2013 at 11:46 PM, Prasoon Shukla <
>> prasoon92.i...@gmail.com> wrote:
>>
>>> @All: This is a cry for help.
>>>
>>> I am completely stumped at the *express* method. The implementation
>>> that I had before had a flaw that I hadn't noticed until now (until
>>> Gilbert's PR on by branch). Anyway, let me try to describe the situation.
>>>
>>> Initially, I had an separate method that would take a vector and return
>>> it separated by coordinate systems in dictionary form. To my chagrin, this
>>> kind of separation cannot always work. Consider two coordinate systems, c0
>>> and c1, both rectangular. Let us have a vector, v.
>>>
>>> v = c0.x * c1.e_y
>>> express
>>> Obviously, this cannot be separated into vectors separated by coordinate
>>> systems. This is the case I wasn't considering when I wrote the express
>>> method last. And that's why, I need to rewrite a new express method.
>>>
>>> I have been thinking of how to implement this but I'm getting nowhere. I
>>> do have one way, that I think might work and am currently writing the code
>>> for it. But, I'm not at all too sure of it.
>>>
>>> I think that by now, all three of you have a fair idea of the code.
>>> Please suggest an algorithm to accomplish this.
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "sympy" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/sympy/t-Je0beTIIU/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> sympy+unsubscr...@googlegroups.com.
>>> To post to this group, send email to sympy@googlegroups.com.
>>> Visit this group at http://groups.google.com/group/sympy.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>>
>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To post to this group, send email to sympy@googlegroups.com.
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to