From: <jpi...@us...> - 2011-11-20 23:06:06
|
Revision: 9154 http://octave.svn.sourceforge.net/octave/?rev=9154&view=rev Author: jpicarbajal Date: 2011-11-20 23:05:59 +0000 (Sun, 20 Nov 2011) Log Message: ----------- quaternion_oo. power and mpower Modified Paths: -------------- trunk/octave-forge/extra/quaternion_oo/inst/@quaternion/mpower.m trunk/octave-forge/extra/quaternion_oo/inst/@quaternion/power.m Modified: trunk/octave-forge/extra/quaternion_oo/inst/@quaternion/mpower.m =================================================================== --- trunk/octave-forge/extra/quaternion_oo/inst/@quaternion/mpower.m 2011-11-20 21:40:10 UTC (rev 9153) +++ trunk/octave-forge/extra/quaternion_oo/inst/@quaternion/mpower.m 2011-11-20 23:05:59 UTC (rev 9154) @@ -22,12 +22,28 @@ function a = mpower (a, b) - if (b == -1 && isa (a, "quaternion") && isscalar (a.w)) - a = inv (a); + if isa (a, "quaternion") + + if isscalar (a.w) # power takes care of checking type of b + a = a .^ b; + elseif + if fix(b) == b # only integers are poorly implemented + [n m] = size (a.w); + w = ones (n,m); + x = zeros (n,m); + q = quaternnion(w,x,x,x); + while b-- + q *= a; + end + a = q; + else + error ("quaternion:devel", ... + "quaternion: power: implemented for scalar quaternions only"); + end + end else - error ("quaternion: mpower: case not implemeted"); - endif - + error ("quaternion:invalidArgument", "base must be a quaternion."); + end ## TODO: - q1 ^ q2 ## - arrays Modified: trunk/octave-forge/extra/quaternion_oo/inst/@quaternion/power.m =================================================================== --- trunk/octave-forge/extra/quaternion_oo/inst/@quaternion/power.m 2011-11-20 21:40:10 UTC (rev 9153) +++ trunk/octave-forge/extra/quaternion_oo/inst/@quaternion/power.m 2011-11-20 23:05:59 UTC (rev 9154) @@ -23,11 +23,11 @@ ## Version: 0.3 function a = power (a, b) - + if (isa (b, "quaternion")) # exponent is a quaternion a = exp (log (a) .* b); # a could be real, but log doesn't care elseif (! isreal (b)) - error ("quaternion: power: invalid exponent"); + error ("quaternion:invalidArgument", "quaternion: power: invalid exponent"); elseif (b == -1) # special case for ldivide and rdivide norm2 = norm2 (a); # a is quaternion because b is not, a.w = a.w ./ norm2; # otherwise octave wouldn't call This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |