How to set up a repeating series of terms
Mostra commenti meno recenti
Hi all
For the below code, I'm trying to set up a series where instead of just the most recent value of k, it increases the size of the matrix every time it runs, so it would be Xt = [ones(t-h+1,1), Lt*yt, Lt^2*yt, ... Lt^k*yt]
for k = 1:p
Xt = [ones(t-h+1,1), Lt^k*yt];
end
I know this code will only use the most recent value of k, so how would I be able to create it the way I described before? I'm pretty new to coding in general so apologies if this is a silly question.
3 Commenti
You could do it with a loop, but it's unnecessary and generally slower.
Lt = 2;
t = 100;
h = 5;
p = 50;
yt = rand(t-h+1,1);
% using a loop without preallocation
tic
xt = ones(t-h+1,1);
for k = 1:p
xt = [xt Lt^k*yt];
end
toc
% using a loop with preallocation
tic
xt2 = ones(t-h+1,p+1);
for k = 1:p
xt2(:,k+1) = Lt^k*yt;
end
toc
% vectorized instead (using implicit array expansion)
tic
xt3 = [ones(t-h+1,1) Lt.^(1:p).*yt];
toc
% show that results match
immse(xt,xt2)
immse(xt,xt3)
Bethany Bloomfield
il 1 Nov 2021
DGM
il 1 Nov 2021
I don't know what size any of these are, nor what the goal is.
Risposte (1)
Prateek Rai
il 6 Nov 2021
To my understanding, you want to set up a repeating series of terms so that,
Xt = [ones(t-h+1,1), Lt*yt, Lt^2*yt, ... Lt^k*yt].
Here is a possible workaround:
cat = [];
for k = 1 : p
cat = [cat, Lt^k*yt];
Xt = [ones(t-h+1,1), cat];
end
Categorie
Scopri di più su Mathematics in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!