# How do I plot the intersections of two functions???

8 views (last 30 days)

Show older comments

Mark Dillon
on 30 Jul 2015

Commented: Star Strider
on 30 Jul 2015

I have been tasked with plotting two functions and having to find where the two intersect. I also have to use a for or while loop to automatically find all of the intersections in the given domain. And print the results of those intersections.

This is what I have worked out so far, but I cannot figure out how to show the intersections.

if true

% code

%%Find all of the intersections of two functions in the domain of x

% Variable 3 ≤ x ≤ 8

% Functions

F1 = @(x) 90.*exp(-x) - 1;

F2 = @(x) sin(2.*pi.*x);

fplot(F1,[3,8]);

grid on;

hold on;

fplot(F2,[3,8]);

end

[EDIT] Here are a couple hints I have been given:

Hint 1: How do you make an anonymous function that takes one variable (x) and returns zero when the two functions intersect?

Hint 2: You need to call fzero a bunch of times with a reasonable set of guesses, enough to make sure that you actually get all of the intersections. Each time you calculate a new intersection, compare it to ALL of the intersections that you have already calculated. If the difference between the new intersection and any of the old ones is very small (<0.00006), do not add it to your list and just move on to calculating the next one. Don’t forget to check that the intersection is in the given domain.

##### 0 Comments

### Accepted Answer

Star Strider
on 30 Jul 2015

One possibility:

F1 = @(x) 90.*exp(-x) - 1;

F2 = @(x) sin(2.*pi.*x);

x = linspace(3, 8, 500); % Domain ‘x’

fcndif = @(x) F1(x) - F2(x); % Function Differences

zx = fcndif(x) .* circshift(fcndif(x), [0 -1]); % Detect Zero-Crossings

gues = find(zx <= 0); % Find Indices Of Zero Crossings

for k1 = 1:length(gues)

intsct(k1) = fzero(fcndif, x(gues(k1))); % Find ‘x’ at Zero Crossings

end

figure(1)

plot(x, F1(x), x, F2(x))

hold on

plot(intsct, F1(intsct), 'bp')

hold off

grid

##### 1 Comment

Star Strider
on 30 Jul 2015

Improved version:

F1 = @(x) 90.*exp(-x) - 1;

F2 = @(x) sin(2.*pi.*x);

x = linspace(3, 8, 150); % Domain ‘x’

fcndif = @(x) F1(x) - F2(x); % Function Differences

zx = fcndif(x) .* circshift(fcndif(x), [0 -2]); % Detect Zero-Crossings

gues = find(zx <= 0); % Find Indices Of Zero Crossings

for k1 = 1:length(gues)

intsct(k1) = fzero(fcndif, x(gues(k1))); % Find ‘x’ at Zero Crossings

end

intsct = unique(round(intsct*10^6)./10^6);

figure(1)

plot(x, F1(x), x, F2(x))

hold on

plot(intsct, F1(intsct), 'bp')

hold off

grid

### More Answers (1)

Jon
on 30 Jul 2015

I don't know if there's a built-in code for finding intersections from function objects, but you could use the intersections.m function from the FEX.

rng = 3:.05:8;

f1 = F1(rng);

f2 = F2(rng);

[xints,yints,~,~] = intersections(rng,f1,rng,f2,1);

hold on

plot(xints,yints,'r*')

will result in the following image:

##### 2 Comments

Jon
on 30 Jul 2015

Edited: Jon
on 30 Jul 2015

### See Also

### Categories

### Products

### Community Treasure Hunt

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

Start Hunting!