How to store outputs of a function in a matrix?
37 views (last 30 days)
Show older comments
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
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.
Accepted Answer
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.
- Gam = linspace(2,20,19);
- w = 0.01:0.01:0.99;
- Fvpa = zeros(length(Gam),length(w)); %Matrix where I want to store outputs
- for i=1:length(Gam)
- 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(i, j) = vpa(fqint); %This must be the outputs of each integration that I want then to store
- end
- end
- display(Fvpa);
3 Comments
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)
More Answers (0)
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!