2017-11-10 183 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)