我正在试图找出这种盗版编程语言,但仍然对此类事情感到难过。
我的代码如下:
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循环,遗憾的是
答案 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()