Построение Гиперболы в Матлаб - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь построить гиперболу в 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 включенс этим он дал мне мнимую ошибку числа и в конечном счете не мог построить это.

Любая помощь ценится, спасибо.

1 Ответ

2 голосов
/ 03 октября 2019

Для гипербол, 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

...