Finding multiple x values in plot for given y

6 views (last 30 days)
I have to find the values for x when y=0 but i cant seem to make it work. I have tried with interp1 but it seems that it gives me an answer of x=2.3490 which is clearly wrong,since there are 2 points in the plot where y=0. Here's the code:
x = [0:0.001:pi]
f = exp(x/4).*sin(x)-1;
plot(x,f)
xlabel('Axis x');
ylabel('Axis y');
newLim = get(gca,'XLim');
newx = linspace(newLim(1), newLim(2), 30);
set(gca,'XTick', newx);
% what I tried:
yi = 0 ;
xi = interp1(f,x,yi) ;
hold on
semilogy(xi,yi,'*r')

Accepted Answer

Geroge Papas
Geroge Papas on 17 Dec 2020
Welp I solved it! I used zero-crossings estimation code and got the index vectors i needed to find the values of x when y aproximates 0. Here is the finished code and graph:
x = [0:0.001:pi]
f = exp(x/4).*sin(x)-1;
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0);
zx = zci(f);
figure(1)
plot(x, f, '-r')
hold on
plot(x(zx), f(zx), 'bp')
hold off
grid
legend('f(x)', 'Approximate Zero-Crossings')
%x1=0.9180
%x2=2.5900

More Answers (1)

Daniel Pollard
Daniel Pollard on 17 Dec 2020
I think you want fsolve. Give it a function handle and an initial starting point, and it'll tell you (approximately) what x gives f(x)=0.

Categories

Find more on Graphics Performance in Help Center and File Exchange

Products


Release

R2015a

Community Treasure Hunt

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

Start Hunting!