Я пытаюсь построить гиперболу в 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

Первоначально я пробовал использовать одну координату x от -a до a, но поскольку в нее включен 0, это дало мне мнимую числовую ошибку и в конечном итоге не смог ее построить.

Любая помощь приветствуется, спасибо.

0
Scotch Jones 3 Окт 2019 в 07:20

1 ответ

Лучший ответ

Для гипербол значения x меньше a (по абсолютной величине) являются сложными.

Рассмотрим выражение: x1.^2/a^2-1. Если x1 меньше, чем a, их отношение будет меньше единицы, квадрат сделает его больше, и, следовательно, все выражение будет отрицательным. Затем значения 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

Hyperbola Plot from included script

2
TroyHaskin 3 Окт 2019 в 04:53