How do I plot and return the values of multiple intersections between a function and zero?
3 views (last 30 days)
Show older comments
Hello,
I need to find the intersection between the det_a function and zero, return the values, and plot the intersections. Here's what I did so far
x = linspace(0,18,1000);
det_a = sin(x).*cosh(x) - cos(x).*sinh(x);
zr = zeros(size(x));
figure
plot(x,det_a,x,zr,'--')
grid on
ylim([-10 10])
xlabel('\betal')
The plot can be seen here:
I haven't found any easy method of doing this, I've tried using the find and intersect functions but they only return one value. Any help would be appreciated, thanks in advance!
0 Comments
Accepted Answer
Alan Stevens
on 20 Oct 2021
Here's one possibility (though you get repeated results for the roots!):
det_a = @(x) sin(x).*cosh(x) - cos(x).*sinh(x);
x=0:18;
zr = zeros(1,numel(x));
for i = 1:numel(x)
zr(i) = fzero(det_a, x(i));
end
disp(zr)
figure
xx = linspace(0,18,100);
plot(xx,det_a(xx),zr,0,'o')
grid on
ylim([-10 10])
xlabel('\betal')
6 Comments
Alan Stevens
on 20 Oct 2021
fzero finds the value of x that makes the function det_a equal zero. So if it makes det_a+2 equal zero, then det_a must be -2.
Something like this:
det_a = @(x) sin(x).*cosh(x) - cos(x).*sinh(x);
det_b = @(x) det_a(x) + 2;
x=0:18;
zr = zeros(1,numel(x));
for i = 1:numel(x)
zr(i) = fzero(det_b, x(i));
end
disp(zr)
figure
xx = linspace(0,18,100);
plot(xx,det_a(xx),zr,-2,'o')
grid on
ylim([-10 10])
xlabel('\betal')
More Answers (1)
KSSV
on 20 Oct 2021
You can consider using this: https://in.mathworks.com/matlabcentral/fileexchange/22441-curve-intersections
0 Comments
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!