How to store outputs of a function in a matrix?
37 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Federica Poli
el 2 de Oct. de 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);
1 comentario
Rizwan Khan
el 6 de Sept. de 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.
Respuesta aceptada
Charles Rice
el 2 de Oct. de 2019
Editada: Charles Rice
el 16 de Jul. de 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 comentarios
Charles Rice
el 7 de Oct. de 2019
Movida: DGM
el 17 de Jul. de 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)
Más respuestas (0)
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!