I think you are a bit confused about how matrix indexing works in Matlab.
If understood correctly, you have a variable TR_t
with which you want to store the value for time t
.
You then try to do the following:
TR_t = TR_{t-1} * exp(R_t);
I will try to explain in words what you are doing here:
Set scalar 'TR_t' as follows:
> Take cell matrix 'TR_' and take cell t-1
> Then multiply with exp(R_t)
There are multiple problems with this statement. First of all, the variable TR_
doesn't exist because you named it TR_t
. Second of all, you are trying to index this scalar as if it is a cell matrix.
Before proceeding, I suggest you carefully study the Matrix Indexing Article and try again.
But just to help you understand what is going on quicker, here is a rewritten version of your code with explanation so you can follow what I'm doing.
// Variables that should already contain values before the loop starts
//**************************************************************************************
// >NAME< >INITIALISATION EXAMPLE< >DIMENSION<
//**************************************************************************************
AA_LEVERAGE = ? //zeros(1,1); // Should be a scalar
ZCopy = ? //zeros(1, horizon); // (1 x horizon)
variances = ? //zeros(nTrials, nIndices); // (nTrials x nIndices)
AA_alpha = ? //zeros(nIndices, horizon); // (nIndices x horizon)
AA_alpha1 = ? //zeros(nIndices, horizon); // (nIndices x horizon)
AA_beta = ? //zeros(nIndices, horizon); // (nIndices x horizon)
AA_GARCH = ? //zeros(nIndices, horizon); // (nIndices x horizon)
AA_ARCH = ? //zeros(nIndices, horizon); // (nIndices x horizon)
Z = ? //zeros(nIndices, nTrials, horizon); // (nIndices x nTrials x horizon)
SAVE_R = zeros(nIndices, nTrials, horizon); // (nIndices x nTrials x horizon)
SAVE_h = zeros(nIndices, nTrials, horizon); // (nIndices x nTrials x horizon)
SAVE_TR = zeros(nIndices, nTrials, horizon); // (nIndices x nTrials x horizon)
//**************************************************************************************
// START OF PROGRAM
//**************************************************************************************
for i=1:1:nIndices // For i number of indices (increment 1)
for j=1:1:nTrials // For j number of trials (increment 1)
R = zeros(1,horizon); // Re-initialise empty matrix (1 x horizon)
h = zeros(1,horizon); // Re-initialise empty matrix (1 x horizon)
TR = zeros(1,horizon); // Re-initialise empty matrix (1 x horizon)
for t=2:1:horizon // For t number of horizons (increment 1) (start at 2)
// Assumes R(1,1) is known
R(1,t) = AA_alpha(i,:)+AA_beta(i,:)*R(1,t-1)+sqrt(h(1,t-1))*Z(i,j,t);
// Assumes ZCopy(1,1) is known
h(1,t) = AA_alpha1(i,:)+AA_GARCH(i,:)*variances(j,i)+AA_ARCH(i,:)*...
Z(i,j,t-1)+AA_LEVERAGE*ZCopy(1,t-1);
// Assumes TR(1,1) is known
TR(1,t) = TR(1,t-1)*exp(R(1,t));
end
// Save matrices R, h and TR before end of inner loop otherwise ..
// .. their information will be lost
// For example, you can store their values as follows:
SAVE_R(i,j,:) = R(1,:);
SAVE_h(i,j,:) = h(1,:);
SAVE_TR(i,j,:) = TR(1,:);
end
end
// If all variables initialised correctly, should produce output
// Written for StackOverflow question: http://stackoverflow.com/questions/30789390/
I hope that helps with your understanding of how Matlab works. If you want help with your code in general, consider posting your code on Code Review Stack Exchange to get constructive criticism and suggestions for making your code better and cleaner.