matrix of vectors - super slow
- To: mathgroup at smc.vnet.net
- Subject: [mg88038] matrix of vectors - super slow
- From: baaarnes at gmail.com
- Date: Tue, 22 Apr 2008 06:30:10 -0400 (EDT)
I have an matrix of vectors where each element has to go through various transformations, that is each element has to be multiplied by a few different matrices. Is there a more efficient way of doing that from what I am currently doing? n = 128*1; m = 128*1; R = 1; BeamIn = Table[( { {Sqrt[2]/2}, {Sqrt[2]/2} } ), {i, n}, {j, m}]; PBeam = Table[0, {i, n}, {j, m}]; SBeam = Table[0, {i, n}, {j, m}]; PInt = Table[0, {i, n}, {j, m}]; SInt = Table[0, {i, n}, {j, m}]; HalfWave[\[Theta]_] = ( { {Cos[-\[Theta]], Sin[-\[Theta]]}, {-Sin[-\[Theta]], Cos[-\[Theta]]} } ).( { {1, 0}, {0, Exp[-I \[Pi]]} } ).( { {Cos[\[Theta]], Sin[\[Theta]]}, {-Sin[\[Theta]], Cos[\[Theta]]} } ); QuarterWave[\[Theta]_] = ( { {Cos[-\[Theta]], Sin[-\[Theta]]}, {-Sin[-\[Theta]], Cos[-\[Theta]]} } ).( { {1, 0}, {0, Exp[-I \[Pi]/2]} } ).( { {Cos[\[Theta]], Sin[\[Theta]]}, {-Sin[\[Theta]], Cos[\[Theta]]} } ); PPol = ( { {1, 0}, {0, 0} } ); SPol = ( { {0, 0}, {0, 1} } ); LaserRod[TT_, \[Theta]_, Q_] = ( { {Cos[-\[Theta]], Sin[-\[Theta]]}, {-Sin[-\[Theta]], Cos[-\[Theta]]} } ).( { {Exp[-I *2.8 *TT^2*Q], 0}, {0, Exp[I *0.4 *TT^2* Q]} } ).( { {Cos[\[Theta]], Sin[\[Theta]]}, {-Sin[\[Theta]], Cos[\[Theta]]} } ); For[i = 1, i <= n, i++, For[j = 1, j <= m, j++, x = R ((2 i - n) - 1); y = R ((2 j - m) - 1); r = Sqrt[x^2 + y^2]; \[Theta] = ArcTan[y/x]; PBeam[[i, j]] = PPol.LaserRod[r, \[Theta], 1*10^-3].QuarterWave[\[Pi]/ 2].LaserRod[r, \[Theta], 1*10^-3].PPol.BeamIn[[i, j]]; SBeam[[i, j]] = SPol.LaserRod[r, \[Theta], 1*10^-3].QuarterWave[\[Pi]/ 2].LaserRod[r, \[Theta], 1*10^-3].PPol.BeamIn[[i, j]]; PInt[[i, j]] = Norm[PBeam[[i, j]][[1, 1]]]^2; SInt[[i, j]] = Norm[SBeam[[i, j]][[2, 1]]]^2; ]; ]; ListDensityPlot[PInt] ListDensityPlot[SInt] Cheers