Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

How to find the x value from cumsum

Asked by K on 21 Dec 2012

Hi, I plotted a cumulative sum in Matlab. Is there any where for me to get the value of x from the plot(value of y is known)?

0 Comments

K

Tags

Products

No products are associated with this question.

4 Answers

Answer by Image Analyst on 21 Dec 2012
Accepted answer

K:

x never equals 7000. Not sure which bar graph you were looking at but none of them have an x value of 7000. Now if you want the x value where y first exceeds 7000, then you can look at the last few lines I tacked on to the bottom of their example (which is the top several lines):

clear
clc;
workspace;  % Make sure the workspace panel is showing.
format longg;
format compact;
fontSize = 20;
x = -2.9:0.1:2.9;
y = randn(10000,1);
figure(1)
hist(y,x);
xlabel('x', 'FontSize', fontSize);
ylabel('y', 'FontSize', fontSize);
title('Histogram', 'FontSize', fontSize);
% Calculate number of elements in each bin
n_elements = histc(y,x);
% Calculate the cumulative sum of these elements using cumsum
c_elements = cumsum(n_elements)
% Plot the cumulative distribution like a histogram using bar:
figure(2)
bar(x,c_elements,'BarWidth',1);
grid on;
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
% Find out x when c_elements = 7000
% first find the index.
x7000Index = find(c_elements >= 7000, 1, 'first')
% Then find the x value for that index.
x7000 = x(x7000Index);
message = sprintf('The cumulative sum first exceeds 7000\nat an x value of %.1f', x7000);
uiwait(msgbox(message));

1 Comment

K on 21 Dec 2012

Thank you very much. Yes, I made some error in my writing. I want the x value where y first exceeds 7000. Thank you again for your help.

Image Analyst
Answer by Jan Simon on 21 Dec 2012

It depends on what you exactly want...

Actually the X-values are trivial:

data = rand(1, 100);
y = cumsum(data);
lineH = plot(y);
% Now the X-values are:
x = 1:numel(y);
% You can obtain them explicitly:
x2 = get(lineH, 'XData');

0 Comments

Jan Simon
Answer by Azzi Abdelmalek on 21 Dec 2012
x=1:10
y=cumsum(x)
% for y=15
x0=x(find(y==15))

1 Comment

K on 21 Dec 2012

Thank you for your reply. Actualy I did the cumsum from this example: http://www.mathworks.co.uk/help/matlab/ref/histc.html

Based on the bar graph, I need to find the y value when x=7000

I tried your solution. But it give different value.

Azzi Abdelmalek
Answer by K on 21 Dec 2012

Thank you for your reply. Actualy I did the cumsum from this example: http://www.mathworks.co.uk/help/matlab/ref/histc.html

According to the bar graph, I need to find the y value when x=7000.

0 Comments

K

Contact us