Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: How to reprensent the result in vector form?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg51697] Re: [mg51657] Re: How to reprensent the result in vector form?
  • From: DrBob <drbob at bigfoot.com>
  • Date: Fri, 29 Oct 2004 03:39:51 -0400 (EDT)
  • References: <cl9t1d$7m0$1@smc.vnet.net> <200410230422.AAA26310@smc.vnet.net> <clndek$o4s$1@smc.vnet.net> <200410280343.XAA09777@smc.vnet.net>
  • Reply-to: drbob at bigfoot.com
  • Sender: owner-wri-mathgroup at wolfram.com

Here's a more general rule:

crossrule4 = Flatten[Outer[
         {Sign[#3 #5]a3_ b2_ - Sign[#2 #6]a2_ b3_,
               Sign[#1 #6]a1_ b3_ - Sign[#3 #4]a3_ b1_,
               Sign[#2 #4]a2_ b1_ - Sign[#1 #5]a1_ b2_} ->
             myCross[{#4 b1, #5 b2, #6 b3}, {#1 a1, #2 a2, #3 a3}] &,
         Sequence @@ Array[{-1, 0, 1} &, {6}]], 5];

Cross[{0,u2,-u3},{v1,-v2,-v3}]/.crossrule2
Cross[{0,u2,-u3},{v1,-v2,-v3}]/.crossrule4

{-u3 v2-u2 v3,-u3 v1,-u2 v1}

myCross[{0,-u2,u3},{-v1,v2,v3}]

But uniqueness still escapes us:

Cross[{0,0,-u3},{0,-v2,-v3}]/.crossrule4

myCross[{0,-u3 v2,0},{0,-a2,1}]

Bobby

On Wed, 27 Oct 2004 23:43:55 -0400 (EDT), Steve Luttrell <steve_usenet at _removemefirst_luttrell.org.uk> wrote:

> I fully agree with you that my suggestion was not a general solution. I had
> in mind the sort of piecemeal replacement(s) you sometimes have to do at the
> end of a derivation to coax the result into the form you want. I usually
> concoct these on the fly and store them as rules.
>
> A quick (and very dirty!) fix to the problem of matching to ALL possible
> sign combinations is
>
> crossrule2=
>   Flatten[Table[{Sign[ai3 bi2]a3_ b2_ -Sign[ai2 bi3]a2_ b3_,
>           Sign[ai1 bi3]a1_ b3_ -Sign[ai3 bi1]a3_ b1_,
>           Sign[ai2 bi1]a2_ b1_ -Sign[ai1 bi2]a1_ b2_}->
>         myCross[{bi1 b1,bi2 b2,bi3 b3},{ai1 a1,ai2 a2,ai3 a3}],{ai1,-1,1,
>         2},{ai2,-1,1,2},{ai3,-1,1,2},{bi1,-1,1,2},{bi2,-1,1,2},{bi3,-1,1,2}],
>     5];
>
> Now your 3 counterexamples behave thus:
>
> Cross[{-u1,u2,u3},{v1,v2,v3}]/.crossrule2
>
> myCross[{u1,-u2,-u3},{-v1,-v2,-v3}]
>
> Cross[{u1,-u2,u3},{v1,v2,v3}]/.crossrule2
>
> myCross[{-u1,u2,-u3},{-v1,-v2,-v3}]
>
> Cross[{u1,u2,-u3},{v1,v2,v3}]/.crossrule2
>
> myCross[{-u1,-u2,u3},{-v1,-v2,-v3}]
>
> I agree with your final two remarks about the non-uniqueness of the
> representation. However, I think the original question was to do with
> spotting a particular type of pattern in the algebra, and then rewriting it
> in a more compact and familiar notation. Because this sort of
> pseudo-inversion is non-unique I tend to make up the replacement rules on an
> ad hoc basis as I said earlier.
>
> Steve Luttrell
>
> "DrBob" <drbob at bigfoot.com> wrote in message
> news:clndek$o4s$1 at smc.vnet.net...
>> This won't always work, however.
>>
>> crossrule = {a3_ b2_ - a2_ b3_, a1_ b3_ - a3_ b1_,
>>   a2_ b1_ - a1_ b2_} -> myCross[{b1, b2, b3}, {a1, a2, a3}];
>>
>> Cross[{u1, u2, u3}, {v1, v2, v3}] /. crossrule
>> myCross[{u1,u2,u3},{v1,v2,v3}]
>>
>> Fine so far, but these should return cross products too:
>>
>> Cross[{-u1,u2,u3},{v1,v2,v3}]/.crossrule
>> {-u3 v2+u2 v3,u3 v1+u1 v3,-u2 v1-u1 v2}
>>
>> Cross[{u1,-u2,u3},{v1,v2,v3}]/.crossrule
>> {-u3 v2-u2 v3,u3 v1-u1 v3,u2 v1+u1 v2}
>>
>> Cross[{u1,u2,-u3},{v1,v2,v3}]/.crossrule
>> {u3 v2+u2 v3,-u3 v1-u1 v3,-u2 v1+u1 v2}
>>
>> Besides this problem there are other issues, such as:
>>
>> (1) EVERY vector is the cross product of two vectors,
>>
>> and
>>
>> (2) The vectors are never unique.
>>
>> Good luck!!
>>
>> Bobby
>>
>> On Sat, 23 Oct 2004 00:22:49 -0400 (EDT), Steve Luttrell
>> <steve_usenet at _removemefirst_luttrell.org.uk> wrote:
>>
>>> You can use a replacement rule to convert your expression into the
>>> compact
>>> form that you want:
>>>
>>> Define the replacement rule.
>>>
>>> crossrule = {a3_ b2_ -a2_ b3_,a1_ b3_ -a3_ b1_,a2_ b1_ -a1_ b2_} ->
>>> myCross[{b1,b2,b3},{a1,a2,a3}];
>>>
>>> Apply the rule to your expression.
>>>
>>> result = {-u3 v2 + u2 v3, u3 v1 - u1 v3, -u2 v1 + u1 v2}/.crossrule
>>>
>>> which gives the output
>>>
>>> myCross[{u1,u2,u3},{v1,v2,v3}]
>>>
>>> You could make the notation more compact by doing this
>>>
>>> result /. {{u1,u2,u3} -> u,{v1,v2,v3} -> v}
>>>
>>> which gives the output
>>>
>>> myCross[u,v]
>>>
>>> Another (related but more sophisticated) method is to use the
>>> Utilities`Notation` package to implement the reformatting of your output
>>> automatically. This includes a way of defining infix operators so that
>>> you
>>> can get an output that looks like u x v rather than myCross[u,v]
>>>
>>> Steve Luttrell
>>>
>>> "melon" <sweetmelon at gmail.com> wrote in message
>>> news:cl9t1d$7m0$1 at smc.vnet.net...
>>>> I used mathmetica5 to solve a vector equation. Mathmetica expands the
>>>> result into sub-variable form. But I want to get the vector form. How
>>>> to do that?
>>>>
>>>> ex:
>>>> Solution:
>>>> {-u3 v2 + u2 v3, u3 v1 - u1 v3, -u2 v1 + u1 v2}
>>>> I want mathematica give me {u cross v}
>>>>
>>>> p,s,  Could you add me into the forum? Thank you very much. Regards.
>>>>
>>>> ShenLei
>>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>> --
>> DrBob at bigfoot.com
>> www.eclecticdreams.net
>>
>
>
>
>
>



-- 
DrBob at bigfoot.com
www.eclecticdreams.net


  • Prev by Date: Re: Re: How to reprensent the result in vector form?
  • Next by Date: Re: Re: Fitting question
  • Previous by thread: Re: Re: How to reprensent the result in vector form?
  • Next by thread: FindMinimum