How do you find the intersection points of two functions?

64 ビュー (過去 30 日間)
Dan Teep
Dan Teep 2013 年 11 月 7 日
コメント済み: Elina Nikolopoulou 2021 年 12 月 28 日
My problem tells me to plot and then find and print the points of intersection for x=[2:7]. I already sought help and they explained that I should use 'find' and then the '==' to find where the output match. Sounded simple enough but I'm getting "Empty Matrix: 1-by-0" as the answer. Any one know what I'm doing wrong or a better way?
Also, any idea how I'd then go about using a "for - while" loop to find every intersection? I'm taking it one problem at a time though.
Here's my script so far:
% clear all windows and variables
clc
% Declare an array for the values of x
x=[2:7];
% Input the given functions
f1=@(x) 90.*exp(-x);
f2=@(x) 3*sin(2*pi*x);
% Graph the functions in the same window
fplot(f1,[2,7],'b')
hold on
fplot(f2,[2,7],'r')
grid on
title('Finding Intersections of Functions')
xlabel('Input Values (x)')
ylabel('Ouput Values (f)')
% Find the first intersection
f1a=90.*exp(-x);
f2a=3*sin(2*pi*x);
find(f1a==f2a)
  2 件のコメント
ankit kumar
ankit kumar 2018 年 4 月 5 日
is there anyway i can give a txt file including x and y axis value and can find how many times a curve is crossing through a threshold and also to note down the x values.
Elina Nikolopoulou
Elina Nikolopoulou 2021 年 12 月 28 日
How do i keep the Y and the X coordinates of the intersections in separate arrays (one for the X and one for the Y coordinates) ???

サインインしてコメントする。

回答 (3 件)

Andrei Bobrov
Andrei Bobrov 2013 年 11 月 7 日
編集済み: Andrei Bobrov 2013 年 11 月 7 日
EDIT
f1=@(x) 90.*exp(-x);
f2=@(x) 3*sin(2*pi*x);
f = @(x)f1(x)-f2(x);
xx = 2:.1:7;
t = f(xx) > 0;
i0 = find(diff(t(:))~=0);
i0 = [i0(:)';i0(:)'+1];
n = size(i0,2);
xout = zeros(n,1);
for jj = 1:n
xout(jj) = fzero(f,xx(i0(:,jj)));
end
  2 件のコメント
Mathijs Frenken
Mathijs Frenken 2018 年 11 月 27 日
Thank you for your answer. However, you realize you are not the only one that reads your code right? It's actually unreadable.
Jaden Delgado
Jaden Delgado 2020 年 2 月 11 日
lmao

サインインしてコメントする。


Alexander Efremov
Alexander Efremov 2013 年 11 月 7 日
編集済み: Alexander Efremov 2013 年 11 月 7 日
There is a fancy contribution on "File Exchange" which appeared in the Pick of the week. This should help.
  1 件のコメント
Elina Nikolopoulou
Elina Nikolopoulou 2021 年 12 月 28 日
"intersections" does not work in the version i use :(

サインインしてコメントする。


Syed Riza
Syed Riza 2016 年 7 月 31 日
編集済み: Walter Roberson 2016 年 7 月 31 日
Hello Dan Teep; you can find your answer in this modified code
% Declare an array for the values of x
x=linspace(2,7,1200);
% Input the given functions
f1=@(x) 90.*exp(-x);
f2=@(x) 3*sin(2*pi*x);
% Graph the functions in the same window
fplot(f1,[2,7],'b')
hold on
fplot(f2,[2,7],'r')
grid on
title('Finding Intersections of Functions')
xlabel('Input Values (x)')
ylabel('Ouput Values (f)')
% Find the x-cordinates of intersecting points
f1a=90.*exp(-x);
f2a=3*sin(2*pi*x);
Intersections=find(abs(f1a-f2a)<=(0.05));
X_Values=x(Intersections)
  2 件のコメント
Maya Priveetra
Maya Priveetra 2017 年 3 月 9 日
Hi can I know why you (abs(fla-f2a)<=(0.05))
Like what does it do especially the 0.05
Adeel Yousuf
Adeel Yousuf 2019 年 2 月 13 日
He has used a tolerance value of 0.05 as the dataset contains floating point values. We can keep tolerance as small as it seems suitable (like: 1e-4). It's meant to "detect" the closeness of 2 floating point values. Moreover in simple words, we need to make MATLAB determine if 60.2745 is the same as 60.274 or not? So for that we can use threshold/tolerance of 0.001.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by