algorithm
intersection MATLAB, multiple roots
I am having problems determining this basic logic. Given 2 functions: y1 and y2, plotted on x in MATLAB. How do you determine the intersections using simple for loop and if else statement. These y1 and y2 has more than one intersections. I am pretty sure that I am missing something in the loop clc clear x = linspace(0,2); y1 = 2.*x + 1; y2 = exp(x); tol = 0.05; x_intercept = zeros(size(x)); y_intersect = zeros(size(x)); for i = 1:100 if abs(y1(i) - y2(i)) == tol y_intersect = y2(x(i)); x_intercept = x(i); end end plot(x,y1) hold on plot(x,y2) plot(x_intercept, y_intersect,'xr'); Could you please offer help? I am sorry if this seems to be a very easy question but I have searched and found no answer. All I found is using polyval/polyfit and the likes but those only show 1 intersection.
Try changing your for loop to: ctr=1; for i = 1:100 if abs(y1(i) - y2(i)) <= tol y_intersect(ctr) = y2(i); x_intercept(ctr) = x(i); ctr=ctr+1; end end
You can use the function solve to find the points of intersection of the two curves: clc clear % Define the symbolic variables syms x y vars=[x y] % Define the two eqautions equations=([2*x+1-y == 0,exp(x)-y == 0]) % Call SOLVE to find the intersection point [sol_x,sol_y]=solve(equations,vars,'Real', true) % Get the values of the x and y coordinates of the intersectiin points x_inters=double(sol_x) y_inters=double(sol_y) % Evaluate the two functions (only to plot them) x = linspace(0,2); y1 = 2.*x + 1; y2 = exp(x); plot(x,y1) hold on plot(x,y2) % Add the intersection points plot(x_inters,y_inters,'or','markerfacecolor','r') If you want / need to use for and if-else statements, you need to, first, modify the if condition in you code: if abs(y1(i) - y2(i)) <= tol then you have to increment the number of samples x in order to reduce the distance between them. Also you have to test different values for the threshold tol. This approach will identify several solutions, so you shouls also identify, among then, the ones for which the difference between the values of y1 and y2 is the lower. A possible implementation could be: clc clear % x = linspace(0,2); % Define the x samaples x=0:.001:2 y1 = 2.*x + 1; y2 = exp(x); % tol = 0.05; tol = 0.001; x_intercept = zeros(size(x)); % y_intersect = zeros(size(x)); y1_intersect = zeros(size(x)); y2_intersect = zeros(size(x)); % Initialize the counters cnt=0; once=0; % Initialize the minimun_difference min_diff=999; % for i = 1:100 % Loop over the xsamples for i = 1:length(x) % if abs(y1(i) - y2(i)) == tol y1_y2_diff=abs(y1(i) - y2(i)); if(y1_y2_diff <= tol) % If the difference is lower than the threshold, set the flag to % increment the number of solutions if(~once) cnt=cnt+1; once=1; end % Store the values for the minimum difference if(y1_y2_diff <= min_diff) min_diff=y1_y2_diff; y1_intersect(cnt) = y1(i); y2_intersect(cnt) = y2(i); x_intercept(cnt) = x(i); end else % Rese the flag min_diff=999; once=0; end end plot(x,y1) hold on plot(x,y2) % plot(x_intercept, y_intersect,'xr'); plot(x_intercept(1:cnt), y1_intersect(1:cnt),'xr'); plot(x_intercept(1:cnt), y2_intersect(1:cnt),'dr'); Hope this helps, Qapla'
Related Links
Compression of neighborhood graph
Post Correspondence Prob - Find correspondence while the indexes and number of words can differ
If Y is reducible to X in polynomial time, then how is it true that X is at least as hard as Y?
How to understand recursive Boundary conditions?
Find the shortest fence that encloses an area on a 2D grid
1D Memoization in Recursive solution of Longest Increasing Subsequence
Lua: Markov-chain algorithm error
Calculate tree node index
Greatest Common Divisor - Upper bound
All-pair shortest path for minimum spanning tree
interpret this algorithm of discrete mathematics and its applications, Kenneth H. Rosen
Path finding with theta* when the triangle inequality is not fulfilled
Mergesort stack (using only extra stacks, but with as many as needed)
About tarjan algorithm, why can't we take low[v] instead of disc[v] when considering the backward edge?
Max flow in unweighted graph
Time-complexity of while loop in big-O