2017-11-10 180 views
-2

我试图找出这种盗版编程语言,但继续陷入这样的事情。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循环,可悲的是

+0

如果你真的想用一个循环,更换'X(I)'和'X(I + 4)'和'Y( i)''与'y(i + 4)'并考虑使用除[*'i'(和'j')*]之外的其他变量(https://stackoverflow.com/questions/14790740/using-i-and -j-as-variables-in-matlab) –

+0

[在Matlab中使用for循环绘制方程]的可能副本(https://stackoverflow.com/questions/37692453/plotting-equation-in-matlab-using-for-loop ) – frslm

回答

0

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

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

如果使用Matlab没有循环,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 
0

既然你不能访问与负数组元素的需求定义您需要使用与i不同的变量来跟踪xy中的每个元素;这个新变量应该从1开始,并在每次循环迭代时递增。

但你甚至不需要担心管理,你可以简单地分配给-3:6x使用x作为数组计算你的函数:

clc; 
clear; 

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

然而,这将产生一个看起来有点锯齿状的曲线图。如果你想x包含更多的积分,你可以使用linspace()代替:

clc; 
clear; 

x = linspace(-3, 6); % (similar to -3:0.09:6) 
y = (x.^4)-(4*(x.^3))-(6*(x.^2))+15; 
plot(x,y)