On 16 April 2013 20:16, Prasoon Shukla <prasoon92.i...@gmail.com> wrote:
>
>
> On Saturday, April 13, 2013 2:40:52 AM UTC+5:30, brombo wrote:
>>
>> On 04/12/2013 03:53 PM, Prasoon Shukla wrote:
>> > So, after spending a couple of days writing the proposal, I've
>> > uploaded on to the wiki.
>> >
>> >
>> > https://github.com/sympy/sympy/wiki/GSoC-2013-Application-Prasoon-Shukla:-Vector-Calculus-Module
>> >
>> > @All community members: Please give it a read. This is the first draft
>> > of the proposal so it's bound to be rough-ish. Please point out things
>> > that you don't like or would like to see improved. Also, please
>> > suggest any additions that you'd like to see.
>> >
>> > Thank you.
>> >
>> > --
>> > 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+un...@googlegroups.com.
>> > To post to this group, send email to sy...@googlegroups.com.
>> > Visit this group at http://groups.google.com/group/sympy?hl=en-US.
>> > For more options, visit https://groups.google.com/groups/opt_out.
>> >
>> >
>> Analogous to term pythonic code I would use sympythonic code and make
>> the following suggestions -
>>
>> Start by defining you basis vectors as noncommutative symbols -
>>
>> (e1,e2,e3) = symbols('e_1 e_2 e_3',commutative=False)
>>
>> Then if a1, a2, and a3 are commutative sympy expressions (symbols) any
>> vector a is -
>>
>> a = a1*e1+a2*e2+a3*e3
>>
>> Then you automatically get vector addition, subtraction, and scalar
>> multiplication (if c, b1, b2, and b3 are scalars)
>>
>> b = b1*e1+b2*e2+b3*e3
>>
>> and
>>
>> a+b = (a1+b1)*e1+(a2+b2)*e2+(a3+b3)*e3
>>
>> a-b = (a1-b1)*e1+(a2-b2)*e2+(a3-b3)*e3
>>
>> c*a = c*a1*e1+c*a2*e2+c*a3*e3
>>
>> Then if you define dictionaries for the dot and cross products, dot
>> product
>>
>> dot_dict =
>> {e1**2:1,e1*e2:0,e1*e3:0,e2*e1:0,e2**2:1,e2*e3:0,e3*e1:0,e3*e2:0,e3**2:1}
>>
>> then -
>>
>> dot(a,b) = (a*b).subs(dot_dict)
>>
>> cross product
>>
>> cross_dict =
>>
>> {e1**2:0,e1*e2:e3,e1*e3:-e2,e2*e1:-e3,e2**2:0,e2*e3:e1,e3*e1:e2,e3*e2:-e1,e3**2:0}
>>
>> cross(a,b) = (a*b).subs(cross_dict)
>>
>>
>> Like wise for coordinate transformations -
>>
>> Let the bases be e1,e2,e3 ang g1,g2,g3 be related by g1 = f1(e1,e2,e3),
>> g1 = f2(e1,e2,e3), g1 = f2(e1,e2,e3)
>> where f1, f2, and f3 could also be functions of the coordinates then
>>
>> g_to_e_dict = {g1:f1,g2:f2,g3:f3}
>>
>> a = a1*g1+a2*g2+a3*g3
>>
>> a_in_terms_of_e = a.subs(g_to_e_dict)
>>
>> etc.
>
>
>
> First, I thank you for the suggestion sir.
>
> Certainly, this methods will work. But in our case, a Vector object is not
> merely a sum of c*e like terms. Indeed, my whole project hinges on the
> segregation of the two elements required to represent a vector : The
> coordinate system providing a way to represent points in space and also
> providing bases and other relevant relations, and, the vector object that
> will hold the components of a vector field. Also, this project is based on a
> component based approach to vectors. Therefore, even though this method,
> namely, substituting from a dictionary, works, still it seems at this point
> that I will need something different.
>
> Also we will need to implement the vector calculus operations (div, curl),
> which wouldn't work in such a manner. What I think is that we should
> implement a procedure that will take care of both the dot, cross products
> and the div, curl. (Similar to what happens when we use the del operator).
> But perhaps that is a long shot. And also, this operation needs to work on
> individual components; the method you provide, however elegant it might be,
> still works on the vector as a whole. So, IMO, we should probably take this
> problem on with a different approach. But that's just what I think.
>
>> Make sure this generalizes to the Jacobian Matrix for functions R^n ->
>> R^M.
>
> I have made some changes under the Gradient heading. I hope that takes care
> of the Jacobian matrix. Hessian is on hold for a bit, according to what
> Stefan said. But if I have some time towards the end, then certainly I shall
> try to implement the Hessian matrix as well.

You will need a smart way to represent dual vectors and scalar
products to represent Hessians. Even if some of us consider Hessians
less important, dual vectors and scalar products should be very high
on your list (and btw Hessians become trivial when you have the
aforementioned objects).

>
> @Stefan : A couple of days back, I asked on this thread who might be the
> mentor for this project, should it be accepted. From our interactions on
> this thread, I gather that you have a pretty strong mathematical knowledge
> as concerns my proposal. Also, I feel that you can be a very good guide;
> both for Python related things, and, the project implementation in general.
> You also seem to understand my level of mathematical and programming
> competence fairly well. So, if my project idea does get accepted, I was
> hoping that you would be willing to mentor for me. Would that be alright?
>
> I understand that this is a pretty big request but I believe that you'd be a
> very good mentor and hence, I just had to ask.

It depends on a lot of things (and no body knows how many slots will
be provided by Google), but indeed this is one of the projects in
which I might have enough math/compsci background to volunteer to
mentor (if accepted, etc, etc).

-- 
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?hl=en-US.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to