MATLAB Answers

Raise a scalar to a descending series of powers in an array

4 views (last 30 days)
Bill Tubbs
Bill Tubbs on 17 Aug 2020
Edited: Steven Lord on 17 Aug 2020
I'm trying to compute a series of powers of a scalar.
This seems to work but the result is not what I expected:
0.8^1:3
ans =
0.8000 1.8000 2.8000
I expected:
ans =
0.8000 0.6400 0.5120
(It looks like it is returning 0.8:3)
This therfore doesn't work either:
0.8^3:-1:1
ans =
1×0 empty double row vector
Neither does this
0.8^(3:-1:1)
Error using ^ (line 51)
Incorrect dimensions for raising a matrix to a power. Check that the matrix is square and the power is a scalar. To perform elementwise matrix powers, use '.^'.
Neither of these work
0.8^[3 2 1]
0.8^[1 2 3]
Error using ^ (line 51)
Incorrect dimensions for raising a matrix to a power. Check that the matrix is square and the power is a scalar. To perform elementwise matrix powers, use '.^'.
So, how do I compute the scalar to the power of a series of descending values?

Accepted Answer

Bill Tubbs
Bill Tubbs on 17 Aug 2020
Here is the correct answer I think. Element-wise operation:
0.8.^(3:-1:1)

More Answers (2)

Steven Lord
Steven Lord on 17 Aug 2020
Edited: Steven Lord on 17 Aug 2020
Your 0.8^1:3 example doesn't do what you think it does.
>> x1 = 0.8^1:3
>> x2 = [0.8^1 0.8^2 0.8^3]
x1 =
0.8 1.8 2.8
x2 =
0.8 0.64 0.512
The power operations in MATLAB are at operator precedence level 2 and 3, while the colon operator is at level 7. So your expression (which I used to define x1 above) is the equivalent of:
(0.8^1):3
What you want is to wrap the colon expression in parentheses. But if you try making that change alone you receive an error (line breaks added to avoid scroll bars.)
>> x3 = 0.8^(1:3)
Error using ^ (line 51)
Incorrect dimensions for raising a matrix to a power.
Check that the matrix is square and the power is a scalar.
To perform elementwise matrix powers, use '.^'.
So since you want to perform elementwise matrix powers, use the .^ operator instead of the ^ operator.
>> x4 = 0.8.^(1:3)
x4 will match x2.

Bill Tubbs
Bill Tubbs on 17 Aug 2020
Edited: Bill Tubbs on 17 Aug 2020
I found this solution:
power(0.8,3:-1:1)
ans =
0.5120 0.6400 0.8000
But still surprised if it can't be done with the ^ operator.

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!