【问题标题】:Arrays to integers in matlab. how do you do itmatlab中的整数数组。你怎么做呢
【发布时间】:2014-03-20 19:40:30
【问题描述】:
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 是数组而不是整数,但我如何使它们成为整数?

【问题讨论】:

  • 你想用循环做什么?
  • @user3440208 如果其中一个答案帮助您将其标记为“已接受”(左侧的检查) - 因此系统知道问题已解决。

标签: matlab


【解决方案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');

【讨论】:

  • 几乎,假设@user3440208 希望第一个索引对应于x(因此@​​987654322@ 中的转置),你需要[Y, X] = meshgrid([.3 .6 .9 1.2 1.5],[.4 1 1.4 1.9 2.4]);。 Meshgrid 并没有像你想象的那样做索引。
  • 我没有意识到他在做T(x,y)=..的问题所以我不明白他为什么把T的转置放在最后......现在它是有道理的。
【解决方案2】:

您的尝试存在一些问题。

给定:

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) - 但你不应该使用 ij 作为迭代变量。所以使用:

for ii = 1:numel(x)          %// numel(x) = number of elements of x = 5

2) 对于变量 T 的索引,您需要使用迭代变量,而不是 xy 本身。

循环可能如下所示:

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-axisy-axis 与您的实际价值观完全无关。因此,您的表面形状不正确。使用meshgrid 的输出XY 作为surf 的附加输入:

surf(X,Y,T');

恢复我假设你想要的数字:

【讨论】:

  • 感谢纠正错误!,我完全忘记将 X 和 Y 的值传递给surf。也许在一个轴有一些语义的实际应用程序中我会注意到..
猜你喜欢
  • 1970-01-01
  • 2012-05-26
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
相关资源
最近更新 更多