我需要绘制抛物线和椭圆形。但是,椭圆给我带来了麻烦。有人可以帮忙吗?等式为: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
答案 0 :(得分:1)
首先,您没有定义范围变量x
。其次,椭圆将无法通过垂直线测试,因此无法像常规函数f(x)
那样绘制。第三,您的等式y1 = (x.^2/16) + (y.^2/2) - 1;
是荒谬的,因为您的两边都有y
。
您可以通过定义范围变量x1
和x2
来更正您的方法,这些变量每个都具有用于绘图功能的适当范围。我的意思是,您可能不希望每个函数具有相同的范围,因为在定义抛物线的大部分范围内椭圆都是未定义的。要使用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。您还应该能够在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
答案 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的另一种(更经典的)参数化绘制方法,那么除了已经使用的功能之外,您不需要任何其他功能。我认为这是绘制椭圆的最简单,最优雅的方法。