# strange power .^ operator behaviour

3 views (last 30 days)
Michal Kvasnicka on 21 Feb 2020
Edited: Michal Kvasnicka on 21 Feb 2020
Take a look on this FEX.
For vectors of length greater than >~100 elements it is more efficient to use multiple x.^2 than x.^n, where n is an integer n>=3. The performance can be ~x10-x100 better depends on the vector length and power.
Looks like that MATLAB has not optimally implemented operator '.^'. Any comments regarding this strange behaviour of ".^" operator???
Michal Kvasnicka on 21 Feb 2020
@Adam I did not edit any of my comment here in a way of changing its meaning. I just edit them to fix typos and so on.
Please, try to be constructive!

Steven Lord on 21 Feb 2020
Performance is one key metric of whether a function is "effective". If you wanted a power function that was as performant as possible, we could implement the built-in equivalent of this:
fastestPower = @(x, n) [];
Obviously that's taking things to an absurd extreme. It should go without saying but I'll say it anyway, we wouldn't do that. As one of the people who would be asked to review such a proposal that would be an OMDB (Over My Dead Body) situation. [And I can imagine how Cleve would react if someone seriously proposed that!]
But that does illustrate a serious point, that performance is not the only key metric of whether a function is "effective". Accuracy is another key metric for a function. [The absurd example above maximizes performance while minimizing accuracy.] Balancing performance and accuracy and several other key metrics across the whole spectrum of input arguments (including taking into consideration how common each use case for a function is) is a multiobjective optimization problem.
If you know of a faster algorithm that we should consider, submit it as an enhancement request through Technical Support. It may be one we have already considered and rejected for various reasons (better performance but unacceptable loss of accuracy, for example, or it only performs better in extremely specific and uncommon cases for another example.) It may be something that we evaluate (or re-evaluate) and adopt.
##### 1 CommentShowHide None
Michal Kvasnicka on 21 Feb 2020
You are definitely right. Speed performance is not only metric under consideration.
But: 1. Above mentioned method (fast power on FEX) produce results with acceptable accuracy and significantly faster in a specific case of integer power and double class arrays. 2. Of course, I do not know how will be the method perform for any other types of input arrays (complex,.. ). 3. Moreover I am not sure, that this method is the optimal solution for specific case of integer power.
What I want to say is the fact, that Matlab developers should seriously reconsider this specific case, which is very common(!!!). I mean integer value of B and single or double class of array A (A.^B).

Michal Kvasnicka on 21 Feb 2020
Edited: Michal Kvasnicka on 21 Feb 2020
Very interesting description of the integer power problem:
http://szhorvat.net/pelican/fast-computation-of-powers.html

R2019b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by