如何在Matlab中一起绘制椭圆和抛物线?

时间:2019-04-24 22:45:10

标签: matlab intersection

我需要绘制抛物线和椭圆形。但是,椭圆给我带来了麻烦。有人可以帮忙吗?等式为:y = -5 * x ^ 2 + 2和(x ^ 2/16)+(y ^ 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 个答案:

答案 0 :(得分:1)

首先,您没有定义范围变量x。其次,椭圆将无法通过垂直线测试,因此无法像常规函数f(x)那样绘制。第三,您的等式y1 = (x.^2/16) + (y.^2/2) - 1;是荒谬的,因为您的两边都有y

您可以通过定义范围变量x1x2来更正您的方法,这些变量每个都具有用于绘图功能的适当范围。我的意思是,您可能不希望每个函数具有相同的范围,因为在定义抛物线的大部分范围内椭圆都是未定义的。要使用f(x)绘制椭圆,您可以观察到+-的值相同,因此您可以通过两个函数绘制椭圆,一个代表上半部,另一个一个代表下半部分,每个都将通过垂直线测试。

OR

您可以利用ezplot并享受美好的时光,因为它使您的生活更轻松。这是一个解决方案。

ezplot('x^2/16+y^2/2-4'); axis equal; hold on
ezplot('-5*x^2+2-y')

答案 1 :(得分:0)

使用直角坐标f(x)范围内的函数linspace,将无法为椭圆生成点。相反,您仍然可以使用linspace,但是对于极性表示法中的角度,其范围是0到2 * pi。您还应该能够在cossin表达式上轻松调整两个轴上的半径和偏移量。

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

答案 2 :(得分:0)

有多种绘制椭圆的方法,例如您也可以使用方程式的参数表示。

但是,在您的方法中,当使用plot(x,y)命令绘制函数时,您需要通过自变量(x)表示因变量(y)。您定义了x的范围,这是您为了找到y而代入方程式的范围。对于抛物线,y与x的依存关系很明显,但您忘了为椭圆得出这样的关系。在这种情况下,它将是+ -sqrt((1-x ^ 2/16)* 2)。因此,在您的方法中,对于相同的x值,您必须同时考虑负y和正y。另外,您编写的方程式中椭圆(= 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

由于椭圆在整个x域上都没有实y,因此,如果您只想绘制实部,请指定real(y1)或abs(y1)(即使Matlab也为您提供)。您还可以在计算y1时消除某些x的复数,但为此需要一个for循环。

为了简化操作,您可以检查函数fimplicit,根据Matlab的文档,不建议使用ezplot。或者,如果您想以参数方式绘制椭圆,fplot也将适用。

给出了here already的另一种(更经典的)参数化绘制方法,那么除了已经使用的功能之外,您不需要任何其他功能。我认为这是绘制椭圆的最简单,最优雅的方法。