Finding average value of multiple Y values for a single x value

43 ビュー (過去 30 日間)
Ross Hanna
Ross Hanna 2018 年 2 月 27 日
コメント済み: Ross Hanna 2018 年 2 月 27 日
Hi all
I am doing some work with suspension dampers and trying to model them. To do this i have put a damper on a suspension dynamometer to measure the displacement, velocity and force against time.
When plotting Velocity against force you end up with a hysteresis loop, which i need to find the average values for each velocity. What i mean by this is that for every x value, there are multiple corresponding y values. I need to find the average of those multiple y values, to give me a single line (or two lines if you prefer, one for the positive y values, one for the negative.
For example,
x = 0.582 & y = [2 7 5 13 4] average of y at x = 0.582 is 6.2.
I have also attached pictures to visually illustrate what i am trying to achieve.
Many Thanks Ross
  3 件のコメント
David Fletcher
David Fletcher 2018 年 2 月 27 日
編集済み: David Fletcher 2018 年 2 月 27 日
If you have a matrix where each column represents the x value and each row is the Y value then applying the mean function to that matrix will give you the columnwise mean of the Y values for each X value. Though using a matrix assumes each x value is associated with the same number of Y values
Ross Hanna
Ross Hanna 2018 年 2 月 27 日
please find attached the matfile. what i'm trying to do at the moment is plot time vs velocity, curve fit it, then try to extract what time values correspond to nicely, monotonically spaced velocity values and then using interpolation, find the force value.
however i have hit a brick wall with how to extract a y value from x values, given a curve fit.

サインインしてコメントする。

回答 (2 件)

KL
KL 2018 年 2 月 27 日
編集済み: KL 2018 年 2 月 27 日
A lot depend on how you have stored your data. I can think of something with table. You could either sort your data into a table or work with tables right from the beginning.
x = 0.582;
y = [2 7 5 13 4];
%now create table
T = table(x, [y, -y],'v',{'x','y'})
%add new columns calculating mean
T.y_mean_p = mean(T.y(T.x==0.582&T.y>=0));
T.y_mean_n = mean(T.y(T.x==0.582&T.y<=0))
T =
x y y_mean_p y_mean_n
_____ _____________ ________ ________
0.582 [1x10 double] 6.2 -6.2
keep in mind, comparing x==some_floating_point_value could be problematic. Do it within some tolerance.

Daniel Bridges
Daniel Bridges 2018 年 2 月 27 日
編集済み: Daniel Bridges 2018 年 2 月 27 日
Sounds to me that what you want to do is have vectors of data x and y, same length.
Then -- sorry, talking off the top of my head so specific commands or syntax may be wrong, but to give you an idea -- something like
indices = find(x==givenvalue);
to index only those portions of y that correspond to your given value for x,
result = mean(y(indices))
Of course you'll need to repeat x values in the x vector for each of the multiple y(x) values.

カテゴリ

Help Center および File ExchangeView and Analyze Simulation Results についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by