Intersections between two discretised functions

조회 수: 6 (최근 30일)
EDOARDO GIOVANNI
EDOARDO GIOVANNI 2023년 12월 8일
댓글: Dyuman Joshi 2023년 12월 11일
Hi Everybody, I have the following problem:
I have two vectors:
  • v1 = list of values representing a discretised non monotonic function
  • v2 = list of values representing a constant and horizontal line
v1 has no analytical model. It's just a vector containing the values a function assumes in a given interval.
To make everything clearer, let's consider the following case:
  • v1 = list of 100 values representing a parabola: y= x^2, with x=linspace(-5, +5, 100)
  • v2 = ones(1,100)
f = @(x) x.^2;
values = linspace(-5, 5, 100);
v1 = f(values);
v2 = ones(1,100);
Clearly, the intersection points are two, for x1=-1 and x2=+1.
Now let's forget about the fact that we had the analytical expression for v1 and let's just consider the vector itself.
How can I implement this on Matalb for a generical vector v1 which is not monotonic and is supposed to have two intersection points with v2? I tried doing something with interp1 but couldn't figure it out.
Thanks a lot to whoever will help me!
  댓글 수: 1
Walter Roberson
Walter Roberson 2023년 12월 8일
If you look in the File Exchange you will find at least 4 contributions for finding curve intersections.

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

채택된 답변

Dyuman Joshi
Dyuman Joshi 2023년 12월 8일
You can use FEX submissions for this, I have run these two submissions below - InterX, intersections as example -
You can also find many answers on this forum, which utilize interp1 to get intersection points of two curves.
x = linspace(-5, 5);
v1 = x.^2;
v2 = ones(size(x));
P1 = InterX([x;v1],[x;v2])
P1 = 2×2
-0.9988 0.9988 1.0000 1.0000
[x0, y0] = intersections(x, v1, x, v2)
x0 = 2×1
-0.9988 0.9988
y0 = 2×1
1 1
  댓글 수: 2
EDOARDO GIOVANNI
EDOARDO GIOVANNI 2023년 12월 10일
I didn't know of the existance of these submissions, thank you Dyuman.
Dyuman Joshi
Dyuman Joshi 2023년 12월 11일
You're Welcome!

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

추가 답변 (1개)

Matt J
Matt J 2023년 12월 8일
편집: Matt J 2023년 12월 8일
f = @(x) x.^2;
x = linspace(-5, 5, 100);
v1 = f(x);
v2 = ones(size(v1));
X0=x(diff(sign(v1-v2))~=0);
X=nan(size(X0));
for i=1:numel(X)
X(i)=fzero(@(t)interp1(x,v1-v2,t,'cubic'), X0(i));
end
X %solutions
X = 1×2
-1.0000 1.0000

카테고리

Help CenterFile Exchange에서 Mathematics에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by