用MATLAB找到x轴截距

3

我正在尝试使用plot函数找到抛物线的x轴截距。

x0 = interp1(y,x,0)

然而,由于我的抛物线从原点开始,它返回0。

我如何找到远离原点的x轴截距?目前我是通过估算来确定的。

绘图代码:

global k g

g = 10;
v0 = 150;
theta = pi/4;
m = 1;
k = 0.001;

tspan = [0 22];

IC = [0; v0*cos(theta); 0; v0*sin(theta)];
[t, oput] = ode45(@dataODE, tspan, IC);

x = oput(:,1);
vx = oput(:,2);
y = oput(:,3);
vy = oput(:,4);

figure(1); clf;
plot(x,y)

where

function [p] = dataODE( t, x)

global k g

p = zeros(4,1);
p(1) = x(2);
p(2) = -k*sqrt(x(2)^2 + x(4)^2)* x(2);
p(3) = x(4);
p(4) = -g -k*sqrt(x(2)^2 + x(4)^2)* x(4);

如果您有抛物线的方程,那么解决它并将其设置为零以找到 x 将会更加简单。 - sco1
@excaza 我的抛物线没有严格的方程式(我正在绘制一个抛射体的轨迹)。 - Nique
1
顺便提一下,不要使用 global k g,而是使用匿名函数,如 function [p] = dataODE(t, x, k, g),然后像这样调用它 [t, oput] = ode45(@(t, x)dataODE(t,x,k,g), tspan, IC);,并删除你的两行 global 代码。 - Dan
1个回答

1
你可以将xy限制为只包含一个截距:
x0 = interp1(y(a:b),x(a:b),0)

但是你如何找到ab呢?一种方法是仅使用y穿过零点之前和之后的点(在下降的途中):

a = find(diff(y > 0) == -1)
b = a+1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接