Filter löschen
Filter löschen

Generating a vector with a pattern?

4 Ansichten (letzte 30 Tage)
aadi
aadi am 4 Feb. 2011
How do I generate the following vector efficiently for large lengths?
A=[1^1 2^2 3^3 4^4 5^5 6^6]

Akzeptierte Antwort

Vieniava
Vieniava am 4 Feb. 2011
check this out:
A=[1:6].^[1:6];
  1 Kommentar
Andrew Newell
Andrew Newell am 4 Feb. 2011
Stylistically better is
A = (1:6).^(1:6);
because brackets are used to construct arrays and 1:6 already is an array.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

the cyclist
the cyclist am 4 Feb. 2011
>> v = 1:6;
>> A = v.^v;
Stylistically even better? ;-)
  3 Kommentare
Walter Roberson
Walter Roberson am 4 Feb. 2011
Now how would we do tetration, v^^v?
http://en.wikipedia.org/wiki/Tetration
Walter Roberson
Walter Roberson am 4 Feb. 2011
Nevermind; 4^4^4^4 is the largest that fits within realmax.

Melden Sie sich an, um zu kommentieren.


Jan
Jan am 4 Feb. 2011
This job overflows fast for large lengths and computing 200^200 is a waste of time.
EDITED: With Matt Fig's further improvements:
function x = XpowerX(n)
v = 1:min(n,143);
x = inf(1,n);
x(v) = v.^v;
This much faster than the direct 1:n approach:
tic; for i = 1:15000; y = XpowerX(i); end; toc
% 1.8 sec
tic; for i = 1:15000; v = 1:i; y = v.^v; end; toc
% 60 sec
  2 Kommentare
Matt Fig
Matt Fig am 4 Feb. 2011
How about:
v = 1:min(n,143);
x = inf(1,n);
x(v) = v.^v;
Jan
Jan am 4 Feb. 2011
@Matt: Some percent faster. I insert it.

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by