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

12 vues (au cours des 30 derniers jours)
Bill Tubbs
Bill Tubbs le 17 Août 2020
Modifié(e) : Steven Lord le 17 Août 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?

Réponse acceptée

Bill Tubbs
Bill Tubbs le 17 Août 2020
Here is the correct answer I think. Element-wise operation:
0.8.^(3:-1:1)

Plus de réponses (2)

Steven Lord
Steven Lord le 17 Août 2020
Modifié(e) : Steven Lord le 17 Août 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 le 17 Août 2020
Modifié(e) : Bill Tubbs le 17 Août 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.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Produits


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by