我試圖繪製函數錯誤繪製2個變量
f(x, y) = (x – 3).^2 – (y – 2).^2.
x的函數是從2至4的矢量,並且y爲從1到3的載體,兩者都具有0.2的增量。但是,我收到錯誤:
"Subscript indices must either be real positive integers or logicals".
我該如何解決此錯誤?
我試圖繪製函數錯誤繪製2個變量
f(x, y) = (x – 3).^2 – (y – 2).^2.
x的函數是從2至4的矢量,並且y爲從1到3的載體,兩者都具有0.2的增量。但是,我收到錯誤:
"Subscript indices must either be real positive integers or logicals".
我該如何解決此錯誤?
我(想)我明白你想達到什麼。你正在編寫你的語法就像一個數學函數定義。 Matlab正在將f
解釋爲二維數據類型,並嘗試將表達式的值分配給編號爲x,y
的數據。 x
和y
的值不是整數,所以Matlab抱怨。
如果你想繪製函數的輸出(我們就叫它z
)作爲x
和y
一個功能,你需要完全不同的定義函數。 。 。
f = @(x,y)(x-3).^2 - (y-2).^2;
x=2:.2:4;
y=1:.2:3;
z = f( repmat(x(:)',numel(y),1) , repmat(y(:),1,numel(x)));
surf(x,y,z);
xlabel('X'); ylabel('Y'); zlabel('Z');
這會給你一個這樣的輸出。 。 。
第一線的f = @(x,y)
部分指出要定義一個名爲f
函數取變量x
和y
。該行的其餘部分是該函數的定義。
如果您想將z
作爲x
和y
的函數繪圖,那麼您需要提供您範圍內的所有可能組合。這是包含repmat
命令的行。
編輯
有一個整潔的MATLAB函數meshgrid
,可替換的腳本repmat版本由@bas的建議(BAS歡迎,請滾動到淺的回答和+1吧!)..
f = @(x,y)(x-3).^2 - (y-2).^2;
x=2:.2:4;
y=1:.2:3;
[X,Y] = meshgrid(x,y);
surf(x,y,f(X,Y));
xlabel('x'); ylabel('y'); zlabel('z');
你的問題是你正在使用的函數使用整數,而你試圖給它分配一個double。整數不能有小數位。要解決這個問題,你可以使它增加到1的位置,而不是0.2
如果您需要Matlab代碼的幫助,請發佈Matlab代碼,而不是一些近似值。 –
另請參見[此問題](http://stackoverflow.com/questions/20054047/subscript-indices-must-either-be-real-positive-integers-or-logicals-generic-sol)[通用解決方案這個問題](http://stackoverflow.com/a/20054048/983722)。 –