Finding multiple x values in plot for given y

6 次查看(过去 30 天)
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')

采纳的回答

Geroge Papas
Geroge Papas 2020-12-17
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

更多回答(1 个)

Daniel Pollard
Daniel Pollard 2020-12-17
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.

类别

Help CenterFile Exchange 中查找有关 Graphics Performance 的更多信息

产品


版本

R2015a

Community Treasure Hunt

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

Start Hunting!

Translated by