使用公式和值数组填充MATLAB数组



我想在MATLAB中使用公式z(I,j(=2*x(I(+3*y(j(^2填充一个10x15矩阵,以便(I,j(处的每个条目=z(I、j(。我有x和y的数组,它们的大小分别为10和15。

我已经用下面的代码完成了任务,但我想用一行代码完成,因为我被告知这是可能的。有什么想法吗?

x = linspace(0,1,10);
y = linspace(-0.5,0.5,15);
z = zeros(10,15);
m_1 = 2;
m_2 = 3;
for i = 1:length(x)
for j = 1:length(y)
z(i, j) = m_1*x(i) + m_2*y(i)^2;
end
end

看起来您的原始循环中有一个错误:
您使用了两次i索引:m_1*x(i) + m_2*y(i)^2

结果是CCD_ 3矩阵的所有列都是相同的。

要应用公式z(i, j) = 2*x(i) + 3*y(j)^2,请使用以下循环:

x = linspace(0,1,10);
y = linspace(-0.5,0.5,15);
z = zeros(10,15);
m_1 = 2;
m_2 = 3;
for i = 1:length(x)
for j = 1:length(y)
z(i, j) = m_1*x(i) + m_2*y(j)^2;
end
end

为了使用一条线实现上述循环,我们可以首先使用网格。

将环路替换为:

[Y, X] = meshgrid(y, x);
Z = m_1*X + m_2*Y.^2;

对于展开,请阅读meshgrid的文档,它比我能写的任何展开都要好得多。。。


以下命令提供与原始循环相同的输出(但可能不相关(:

Z = repmat((m_1*x + m_2*y(1:length(x)).^2)', [1, length(y)]);

测试:

max(max(abs(Z - z)))
ans =
0

相关内容

  • 没有找到相关文章

最新更新