Im trying to find the intersection points of a plot and a refline#
The reflines are the straight horizontal lines in the figure
I have attached the figures
Cant seem to figure out the code for it
Thanks in advance

 채택된 답변

Star Strider
Star Strider 2014년 6월 30일

0 개 추천

It would be easier if you defined both of your functions in each plot with the same X-data. Then you could use the much more efficient code in How to change axis of graph and interpolate data.
This works for today’s plots (I tested it on all of them):
% GET INFORMATON FROM FIGURE:
openfig('Figure(7).fig');
h1c = get(gca, 'Children');
Xdc = get(h1c, 'XData');
Ydc = get(h1c, 'YData');
maxlen = max(cell2mat(cellfun(@max, cellfun(@size, Xdc, 'Uni',0),'Uni',0)))
Xd2 = cell2mat(Xdc(2));
Yd2 = cell2mat(Ydc(2));
Xd = Xd2;
Yd1 = cell2mat(Ydc(1));
Yd = [Yd1(1)*ones(size(Xd2)); Yd2];
% CALCULATIONS:
Ydn = diff(Yd, [], 1); % Subtract line from curve to create zero-crossings
Zx = circshift(Ydn, [0 1]) .* Ydn; % Use circshift to detect them
Zxi = find(Zx < 0); % Their indices
for k1 = 1:length(Zxi) % Use interp1(Y,X,0) to get line intercepts as Xzx
Xzx(k1) = interp1([Ydn(Zxi(k1)-1) Ydn(Zxi(k1))], [Xd(1,Zxi(k1)-1) Xd(1,Zxi(k1))], 0);
end
% PLOT ZERO-CROSSINGS ON FIGURE TO CHECK:
hold on
plot(Xzx, repmat(Yd(1,1),1,length(Xzx)), '*r')
hold off

댓글 수: 8

Vaultec
Vaultec 2014년 7월 1일
just a quick question what does the maxlen = max(cell2mat(cellfun(@max, cellfun(@size, Xdc, 'Uni',0),'Uni',0))) that line do?
Star Strider
Star Strider 2014년 7월 1일
편집: Star Strider 2014년 7월 1일
That line finds the maximum of the lengths of the 'XData' vectors. I initially used it to determine the argument to the ones function that creates a vector of y values for the constant line to use in the call to interp1. The values are in cell arrays, explaining the nested calls to cellfun.
Thanks!
Vaultec
Vaultec 2014년 7월 2일
편집: Vaultec 2014년 7월 2일
How would i go about if I wanted to have the intersection points be placed as a matrix/ or find the values of the intersection points?
The x-coordinates of the intersections are in the Xzx vector. (That is the same as for the code in your earlier question as well. I used essentially the same code for both.) The y-values of the intersections are the value of the constant line. If you want a matrix of the x and y coordinates of the intersections, create it as:
XYintx = [Xzx; repmat(Yd(1,1),1,length(Xzx))];
The x values are in the first row, the y values in the second. Call it whatever you like. (The rows of the matrix are the arguments of the plot function in this and the code I provided for your earlier Question.)
Vaultec
Vaultec 2014년 7월 2일
Ok thank you very much
My pleasure!
Edwin
Edwin 2015년 2월 24일
Hi,
This is a very great thread! Thank you for your elucidation on finding intersections on the current gca. I've been trying to understand the code better but I've seem to run into a bit of an issue. IDK if this is the correct analysis but this code seems to not work if there are an odd number of intersection points. Whenever there are even number of intersection points, it does seem to work. I thought a remedy to this would be to try to add an arbitrary line to increase the number of intersections to an even number but the added line seems to create another error.
In essence, to the original problem; whenever there are an odd number of intersections, I get the following error:
Attempted to access Ydn(0); index must be a positive integer or logical.
This seems to arise because Zxi has a value of '1' in its array. Again, I'm still trying to figure out exactly how the code works to find the intersection. But Any ideas or suggestions would be greatly appreciated. Thank you for your help!
Cheers
Star Strider
Star Strider 2015년 3월 22일
The problem is not the code, but that you are attempting to reference ‘Ydn(0)’. Zero is not a positive integer. Arrays in MATLAB are only allowed to be positive integers: (1, 2, ...).

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Axis Labels에 대해 자세히 알아보기

태그

질문:

2014년 6월 30일

댓글:

2015년 3월 22일

Community Treasure Hunt

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

Start Hunting!

Translated by