Как я могу построить эллипс и параболу вместе в Matlab? - PullRequest
0 голосов
/ 25 апреля 2019

Мне нужно построить параболу и эллипс. Однако эллипс доставляет мне неприятности. Кто-нибудь может помочь? Уравнения: у = -5 * х ^ 2 + 2 и (х ^ 2/16) + (у ^ 2/2) = 4

Я пробовал этот код, но, очевидно, я чувствую, что он не прав.

x = linspace(-5, 5);
y1 = (x.^2/16) + (y.^2/2) - 1; 
y2 = -5*x.^2 +2;
figure(1)
plot(x, y1)
hold on
plot(x, y2)
hold off

Ответы [ 3 ]

1 голос
/ 25 апреля 2019

Во-первых, вы не определили переменную диапазона x.Во-вторых, эллипс не пройдет проверку вертикальной линии и не может быть построен как обычная функция f(x).В-третьих, ваше уравнение y1 = (x.^2/16) + (y.^2/2) - 1; бессмысленно, потому что у вас есть y с каждой стороны.

Вы можете исправить свой метод, определив переменные диапазона x1 и x2, каждый из которых имеет соответствующие диапазоны для функций, которые вы строите.Под этим я подразумеваю, что вам, вероятно, не нужен один и тот же диапазон для каждой функции, поскольку эллипс не определен в большей части диапазона, который определена параболой.Чтобы построить эллипс, используя f(x), вы можете заметить, что есть значения + и -, которые идентичны, используя этот факт, вы можете построить свой эллипс с помощью двух функций, одной для представления верхней половины и одной для представления нижней половины.каждый из них прошел бы тест по вертикальной линии.

ИЛИ

Вы можете использовать ezplot и приятно провести время, потому что это облегчает вашу жизнь.Вот решение.

ezplot('x^2/16+y^2/2-4'); axis equal; hold on
ezplot('-5*x^2+2-y')
0 голосов
/ 25 апреля 2019

Существует несколько способов построения эллипса, например, Вы также можете использовать параметрическое представление уравнения.

В вашем подходе, однако, при построении графиков функций с использованием команды plot (x, y) вам необходимо выразить зависимую переменную (y) через независимую переменную (x). Вы определили диапазон для x, который вы подставляете в свои уравнения, чтобы найти y. В то время как для параболы зависимость y от x очевидна, вы забыли получить такое отношение для эллипса. В этом случае это будет + -sqrt ((1 - x ^ 2/16) * 2). Таким образом, в вашем подходе вы должны учитывать как отрицательные, так и положительные y для одного и того же значения x. Также есть несоответствие в вашем письменном уравнении для эллипса (= 4) и уравнения в коде Matlab (= 1).

x = linspace(-5, 5);
y1 = sqrt((1 - x.^2/16)*2); 
y2 = -5*x.^2 +2;
figure(1)
plot(x, real(y1), 'r', x, -real(y1), 'r')
hold on
plot(x, y2)
hold off

Поскольку эллипс имеет действительные значения y, а не целую область x, если вы хотите отобразить только реальные части, задайте real (y1) или abs (y1) (даже если Matlab делает это и для вас). Вы также можете отклонить комплексные числа для определенных x при вычислении y1, но для этого вам понадобится цикл for.

Чтобы упростить ситуацию, вы можете проверить функцию fimplicit , ezplot не рекомендуется в соответствии с документацией Matlab. Или, если вы хотите построить эллипс параметрическим способом, fplot также будет работать.

Другой (более классический) подход для параметрического построения дается здесь уже , тогда вам не нужны никакие другие функции, кроме тех, которые вы уже используете. Я думаю, что это самый простой и изящный способ построения эллипса.

0 голосов
/ 25 апреля 2019

Вы не сможете генерировать точки для эллипса, используя функцию f(x) из декартовой области linspace.Вместо этого вы все равно можете использовать linspace, но для угла в полярной записи от 0 до 2 * пи.Вы также сможете легко настроить радиус и смещение по обеим осям в выражениях cos и sin.

x = linspace(-5, 5);
y2 = -5*x.^2 +2;
figure(1)
clf;
plot(x, y2)
hold on

a = linspace(0,2*pi);
x2 = 4*cos(a);
y2 = sqrt(2)*sin(a);
plot(x2, y2)
xlim([-5,5]);
ylim([-5,5]);
hold off
...