使用公式和值数组填充 MATLAB 数组
Filling MATLAB array using formula and arrays of values
我想在 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
.
结果是z
矩阵的所有列都相同
要应用公式 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
为了用一行实现上面的循环,我们可以先用meshgrid。
将循环替换为:
[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
我想在 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
.
结果是z
矩阵的所有列都相同
要应用公式 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
为了用一行实现上面的循环,我们可以先用meshgrid。
将循环替换为:
[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