我需要绘制一个抛物线和椭圆。然而,椭圆给我带来了麻烦。有人可以帮忙吗?方程为: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
首先,您没有定义范围变量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')
值是相同的,使用这个事实,您可以通过两个函数绘制椭圆,一个代表上半部分,一个代表下半部分,每个都通过垂直线测试。
要么
你可以利用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
并度过愉快的时光,因为它让你的生活更轻松。这是一个解决方案。
fimplicit
绘制椭圆的方法有多种,例如:您还可以使用方程的参数表示。
但是,在您的方法中,使用plot(x,y)命令绘制函数时,需要通过自变量(x)表示因变量(y)。您定义了x的范围,这是您在方程中替换以找到y的方法。而对于抛物线,y与x的依赖关系很明显,你忘了为椭圆推导出这种关系。在这种情况下,它将是+ -sqrt((1 - x ^ 2/16)* 2)。因此,在您的方法中,您必须考虑相同x值的负y和正y。您的椭圆(= 4)和Matlab代码(= 1)中的等式也存在差异。
ezplot
由于椭圆的实数y不在整个x域上,如果你只想绘制实部,请指定real(y1)或abs(y1)(即使Matlab也为你做了)。在计算y1时,您也可以忽略某些x的复数,但是你需要一个for循环。
为了简化操作,您可以检查函数fplot,根据Matlab的文档不建议使用here already。或者如果你想以参数方式绘制椭圆,f(x)
也会起作用。
参数化绘图的另一种(更经典的)方法是linspace
,那么你不需要任何其他功能,而不是你已经使用过的功能。我认为这是绘制椭圆的最简单,最优雅的方法。
您将无法使用笛卡尔linspace
范围内的函数cos
为椭圆生成点。相反,您仍然可以使用sin
但是使用极坐标表示的角度,从0到2 * pi。您还应该能够在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
和qazxswpoi表达式上轻松调整两个轴上的半径和偏移。
qazxswpoi