### 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)
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'```

Encrypt Message

code
soft
python
ios
c
html
jquery
cloud
mobile