MATLAB - 如何使用具有负索引的数组绘制函数?

时间:2017-11-10 20:31:59

标签: matlab

我正在试图找出这种盗版编程语言,但仍然对此类事情感到难过。

我的代码如下:

clc;
clear;

for i = -3:6;
    x(i) = i;
    y(i) = (i^4)-(4*(i^3))-(6*(i^2))+15; %being my given function
end
plot(x,y)

如果我从1开始,它可以工作,因为它是一个正整数。它不能访问零或负值。我该如何解决这个问题?

编辑:感谢您们的快速回复,我喜欢您的方法并且肯定希望以不同的方式处理它,但我的文本中的一个要求是使用for循环,遗憾的是

2 个答案:

答案 0 :(得分:0)

即使没有for循环,你也可以这样做。

x = -3:6;
y = (x.^4)-(4*(x.^3))-(6*(x.^2))+15;

如果没有循环使用Matlab,它会更有效。对于这个小范围的情况,它将没有任何效果,但如果你想要更多的元素,你可以使用这种方法提高代码的速度。

回答你的原始问题。问题是您正在使用基于索引的矢量访问。 Matlab向量中的第一个元素是用索引1定义的。

对于您的编辑和使用for循环的要求,您可以使用此方法

x = -3:6;
y = zeros(1, length(x));
% initialization prevents the vector size being changed in every iteration
for i = 1:length(x)
    y = (x(i)^4)-(4*(x(i)^3))-(6*(x(i)^2))+15;
end

答案 1 :(得分:0)

由于您无法访问具有负索引的数组元素,因此您需要使用与i不同的变量来跟踪x和{{1}中的每个元素}};这个新变量应从1开始,并在每次循环迭代时递增。

但你甚至不用担心管理它;您只需将y分配给-3:6并使用x作为数组计算您的函数:

x

然而,这会产生一个看起来有点锯齿的图形。如果您希望clc; clear; x = -3:6; y = (x.^4)-(4*(x.^3))-(6*(x.^2))+15; plot(x,y) 包含更多积分,则可以改为使用x

linspace()