在 Matlab 中绘制双曲线
Plotting Hyperbola in Matlab
我试图在 Matlab 中绘制一条双曲线来模拟环绕地球的双曲线轨迹。
由于双曲线方程由 +/- 部分组成(从平方根开始),我似乎无法弄清楚如何让 Matlab 绘制它。
到目前为止,这是我的代码:
%Plotting Hyperbolic Orbit
e = 1.05; %Eccentricity
a = -147562.72; %km
b = abs(a)*sqrt(e.^2 -1); %Equation for Semi-Minor Axis, b
x1 = linspace(0.00001, a); %From 0 to a, Upper
x2 = linspace(-a, -0.00001); %From -a to 0, Lower
y1 = sqrt((b.^2)*((x1.^2)/(a.^2)-1)); %Upper Hyperbola Part
y2 = -sqrt((b.^2)*((x2.^2)/(a.^2)-1)); %Lower Hyperbola Part
figure
plot(x1, y1, x2, y2, 'b')
grid on
我最初尝试使用从 -a 到 a 的一个 x 坐标,但由于其中包含 0,它给了我一个虚数错误,最终无法绘制它。
感谢任何帮助,谢谢。
对于双曲线,x 小于 a(绝对值)的值是复数。
考虑表达式:x1.^2/a^2-1
。如果 x1
小于 a
,它们的比值将小于 1,平方会使它变得更大,因此整个表达式将是负数。然后 y 值由负数的平方根定义。因此,绘图边界与它们应该的相反(不过,即兴发挥,我认为它们非常适合椭圆)。
因此这段代码应该更接近您的预期:
e = 1.05; %Eccentricity
a = -147562.72; %km
b = abs(a)*sqrt(e.^2 -1); %Equation for Semi-Minor Axis, b
x1 = linspace( a, 2*a, 1E3); %From 0 to a, Upper
ytop = b*sqrt(x1.^2/a^2-1); %Upper Hyperbola Part
ybot = -b*sqrt(x1.^2/a^2-1); %Lower Hyperbola Part
figure
plot(x1, ytop, x1, ybot, -x1, ytop, -x1, ybot);
grid on
我试图在 Matlab 中绘制一条双曲线来模拟环绕地球的双曲线轨迹。
由于双曲线方程由 +/- 部分组成(从平方根开始),我似乎无法弄清楚如何让 Matlab 绘制它。
到目前为止,这是我的代码:
%Plotting Hyperbolic Orbit
e = 1.05; %Eccentricity
a = -147562.72; %km
b = abs(a)*sqrt(e.^2 -1); %Equation for Semi-Minor Axis, b
x1 = linspace(0.00001, a); %From 0 to a, Upper
x2 = linspace(-a, -0.00001); %From -a to 0, Lower
y1 = sqrt((b.^2)*((x1.^2)/(a.^2)-1)); %Upper Hyperbola Part
y2 = -sqrt((b.^2)*((x2.^2)/(a.^2)-1)); %Lower Hyperbola Part
figure
plot(x1, y1, x2, y2, 'b')
grid on
我最初尝试使用从 -a 到 a 的一个 x 坐标,但由于其中包含 0,它给了我一个虚数错误,最终无法绘制它。
感谢任何帮助,谢谢。
对于双曲线,x 小于 a(绝对值)的值是复数。
考虑表达式:x1.^2/a^2-1
。如果 x1
小于 a
,它们的比值将小于 1,平方会使它变得更大,因此整个表达式将是负数。然后 y 值由负数的平方根定义。因此,绘图边界与它们应该的相反(不过,即兴发挥,我认为它们非常适合椭圆)。
因此这段代码应该更接近您的预期:
e = 1.05; %Eccentricity
a = -147562.72; %km
b = abs(a)*sqrt(e.^2 -1); %Equation for Semi-Minor Axis, b
x1 = linspace( a, 2*a, 1E3); %From 0 to a, Upper
ytop = b*sqrt(x1.^2/a^2-1); %Upper Hyperbola Part
ybot = -b*sqrt(x1.^2/a^2-1); %Lower Hyperbola Part
figure
plot(x1, ytop, x1, ybot, -x1, ytop, -x1, ybot);
grid on