x=[.4 1 1.4 1.9 2.4]
y=[.3 .6 .9 1.2 1.5]
for (i=1:10)
for (j=1:10)
T(x,y)=x.^2+.6.*x.*y.^3-2.*y.^4
end
end
surf(T')
我有这个,我得到错误“下标索引必须是真实的 正整数或逻辑。“我被告知它因为我的x和y是数组而不是整数但我如何使它们成为整数?
答案 0 :(得分:1)
[X, Y] = meshgrid([.4 1 1.4 1.9 2.4], [.3 .6 .9 1.2 1.5]);
T = X.^2+.6.*X.*Y.^3-2.*Y.^4;
surf(T');
答案 1 :(得分:1)
您的尝试存在一些问题。
下式给出:
x = [.4 1 1.4 1.9 2.4]
y = [.3 .6 .9 1.2 1.5]
1)您正在迭代比实际更多的元素:for (i=1:10)
应该是for (i=1:5)
- 但您不应该使用i
和j
作为迭代变量。所以使用:
for ii = 1:numel(x) %// numel(x) = number of elements of x = 5
2)对于变量T
的索引,您需要使用迭代变量,而不是x
和y
本身。
循环可能如下所示:
for ii = 1:numel(x)
for jj = 1:numel(y)
T(ii,jj)= x(ii)^2 + .6*x(ii)*y(jj)^3 - 2*y(jj)^4;
end
end
surf(T)
您可以在answer of Gastón
中找到更短的版本[X, Y] = meshgrid(x, y);
T = X.^2 + .6.*X.*Y.^3 - 2.*Y.^4;
surf(T');
您可能想知道为什么需要转置T
- 那是因为meshgrid
交换输入。
或者使用ndgrid
:
[X, Y] = ndgrid(x, y);
T = X.^2+.6.*X.*Y.^3-2.*Y.^4;
surf(T);
所有三人都回来了:
由于
x-axis
和y-axis
与您的实际值完全无关,因此没有多大意义。因此,你的表面会变形。使用X
的输出Y
和meshgrid
作为surf
的附加输入:
surf(X,Y,T');
重新调整我想你想要的数字: