How to implement a formula involving several elements of the same vector?

18 vues (au cours des 30 derniers jours)
FW
FW le 23 Sep 2019
Commenté : Shubham Gupta le 23 Sep 2019
Suppose we have two row vectors
Time = [ 1 2 3 4 5 6 7 8 9 10];
width= [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]; % width of peaks
There is a formula for peak resolution = (t2-t1)/(2*(w2+w1)), where t2 is element of Time(1,2) and t1 is element of Time(1,1). Similarly, w1 and w2 correspond to elements width(1,1) and width(1,2) respectively. With that one should be able to generate a row vector with 9 elements instead of individually calculating those nine values. In such cases how should we implement a formula involving several elements of the same vector?
Could someone also point out an intermediate level reference which discusses the sytax for operating on several elements of the same row or column vector to produce another vector of different dimension such as in this case? Thanks.

Réponse acceptée

Shubham Gupta
Shubham Gupta le 23 Sep 2019
Modifié(e) : Shubham Gupta le 23 Sep 2019
There are several way to do this, but most basic would be to use 'for' loop to get the feeling of how Matrix indexing works:
PeakResolution = zeros(1,length(Time)-1)
for i = 1:length(Time)-1
PeakResolution(i) = (Time(i+1)-Time(i))/(2*(width(i+1)+width(i)));
end
Once you get the feel of it, you can use functions or inline indexing to make your work easy. For e.g. to calculate difference between consecutive elements can be achieved using 'diff'. So, numerators for peak resolution can be written as:
PeakResolution_num = diff(Time); % diff function
% or
PeakResolution_num = Time(2:end)-Time(1:end-1); % inline indexing
and to take mean of consecutive numbers you can use movmean (only for matlab version above 2016a), so denominators become :
PeakResolution_den = movmean(width,[0,1])*2; % movmean function
PeakResolution_den(end) = [];
% or
PeakResolution_den = (width(2:end) + width(1:end-1)) % inline indexing
Now, you can simply use division to calculate PeakResolution:
PeakResolution = PeakResolution_num./(2*PeakResolution_den);
I hope it helps !
  5 commentaires
FW
FW le 23 Sep 2019
Thanks. If we parse the notation i = 1:2:length(width)-1, it means index value of width vector starting from 1, with a step size of 2, and ending at length(width)-1.
This means indices corresponding to 1, 3, 5, 7, (10-1) = 1,3, 5, 7, 9.
Is this correct?
width= [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]; % Bolded and normal text as pairs to be averaged.
Shubham Gupta
Shubham Gupta le 23 Sep 2019
Yes, this should work as you have mentioned !

Connectez-vous pour commenter.

Plus de réponses (1)

madhan ravi
madhan ravi le 23 Sep 2019
Modifié(e) : madhan ravi le 23 Sep 2019
peak_resolution = (Time(2:end)-Time(1:end-1))./...
(2*(Width(2:end)+Width(1:end-1))) % if understood correctly
doc colon
doc end

Produits


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by