How to set up a repeating series of terms

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 Comments

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
Elapsed time is 0.005837 seconds.
% 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
Elapsed time is 0.004077 seconds.
% vectorized instead (using implicit array expansion)
tic
xt3 = [ones(t-h+1,1) Lt.^(1:p).*yt];
toc
Elapsed time is 0.002683 seconds.
% show that results match
immse(xt,xt2)
ans = 0
immse(xt,xt3)
ans = 0
Thank you very much.
I have a similar question with a different bit of code.
for k = 1:p
yhat(t-T0+1,:) = [1, y(t), y(t-k)]*betahat + uhat(end)*psi'
end
I can't quite get the 3rd solution working there, this is my code but it gives an incorrect dimensions error when trying to multiply the matrices
yhat(t-T0+1,:) = [1, y(t), y(t-(1:p))]*betahat + uhat(end)*psi'
I don't know what size any of these are, nor what the goal is.

Sign in to comment.

Answers (1)

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

Categories

Find more on Mathematics in Help Center and File Exchange

Asked:

on 1 Nov 2021

Answered:

on 6 Nov 2021

Community Treasure Hunt

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

Start Hunting!