# How to store outputs of a function in a matrix?

12 views (last 30 days)
Federica Poli on 2 Oct 2019
Answered: Charles Rice on 7 Oct 2019
I need help in storing outputs of a repeated integration in a matrix and then find the max value for each row i (Gam).
Gam = linspace(2,20,19);
Fvpa = zeros(length(Gam),length(w)); %Matrix where I want to store outputs
for i=1:length(Gam)
w = 0.01:0.01:0.99;
for j=1:length(w)
syms q %new variable that I want to use in integration
assume (-0.99<= q <=0.99);
ff=@(q) gamma((v+1)/2)/(gamma(0.5)*gamma(v/2))*(h/v)^0.5*(1+h/v*(q-x_T*beta_OLS).^2).^[-((v+1)/2)];
fq1=@(q) w(j) .* exp(q) + (1-w(j)) .* exp(i_T);
fq2 =@(q) fq1(q).^(1-Gam(i))/(1-Gam(i));
fq3 =@(q) ff(q).* fq2(q);%final function that I want to integrate over q
fqint = int(fq3, q, -0.99, 0.99);
Fvpa=vpa(fqint); %This must be the outputs of each integration that I want then to store
end
end
display(Fvpa);

Charles Rice on 2 Oct 2019
You need to move your assignment of w to above your preallocation of the Fvpa variable, or lenght(w) is meaningless. In your loop, you are assigning the output of vpa(fqint) to a single variable called Fvpa. See line 14 below for the array assignment. If you need the max value for each row, you can just run max(Fvpa, [], 2) to operate on each row. By default, max() returns a row vector containing the max of each column. See help below.
>> help max
max Maximum elements of an array.
M = max(X) is the largest element in the vector X. If X is a matrix, M
is a row vector containing the maximum element from each column.
...
M = max(X,[],DIM) or [M,I] = max(X,[],DIM) operates along the
dimension DIM.
1. Gam = linspace(2,20,19);
2. w = 0.01:0.01:0.99;
3. Fvpa = zeros(length(Gam),length(w)); %Matrix where I want to store outputs
4. for i=1:length(Gam)
5. for j=1:length(w)
6. syms q %new variable that I want to use in integration
7. assume (-0.99<= q <=0.99);
8. ff=@(q) gamma((v+1)/2)/(gamma(0.5)*gamma(v/2))*(h/v)^0.5*(1+h/v*(q-x_T*beta_OLS).^2).^[-((v+1)/2)];
9. fq1=@(q) w(j) .* exp(q) + (1-w(j)) .* exp(i_T);
10. fq2 =@(q) fq1(q).^(1-Gam(i))/(1-Gam(i));
11. fq3 =@(q) ff(q).* fq2(q);%final function that I want to integrate over q
12. fqint = int(fq3, q, -0.99, 0.99);
13. Fvpa(i, j) = vpa(fqint); %This must be the outputs of each integration that I want then to store
14. end
15. end
16. display(Fvpa);

#### 1 Comment

Federica Poli on 5 Oct 2019
Thank you very much. It was really helpful

Federica Poli on 5 Oct 2019
Do you know how to find the "w" value related to each maximum?

Charles Rice on 7 Oct 2019
>> help max
M = max(X) is the largest element in the vector X. If X is a matrix, M
is a row vector containing the maximum element from each column. For
N-D arrays, max(X) operates along the first non-singleton dimension.
[M,I] = max(X) also returns the indices into operating dimension
corresponding to the maximum values. If X contains more than one
element with the maximum value, then the index of the first one
is returned.