How to store outputs of a function in a matrix?

37 views (last 30 days)
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);
  1 Comment
Rizwan Khan
Rizwan Khan on 6 Sep 2020
% For storing the values
Fvpa(i,j) = vpa(fqint);
%for finding the maximum value of each row of output Fvpa
max = max(Fvpa ,[], 2); % max will be a column vector in which each element is a maximum value of the corresponding row.

Sign in to comment.

Accepted Answer

Charles Rice
Charles Rice on 2 Oct 2019
Edited: Charles Rice on 16 Jul 2024
You need to move your assignment of w to above your preallocation of the Fvpa variable, or length(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);
  3 Comments
Federica Poli
Federica Poli on 5 Oct 2019
Moved: DGM on 17 Jul 2024
Do you know how to find the "w" value related to each maximum?
Charles Rice
Charles Rice on 7 Oct 2019
Moved: DGM on 17 Jul 2024
>> 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.
In your case, Gam is your row variable, and w is your column variable, so:
[Fvpa_max_columns, index_columns] = max(Fvpa);
w_max = w(index_columns)
[Fvpa_max_rows, index_rows] = max(Fvpa, [], 1);
Gam_max = Gam(index_rows)

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!