参考 MrAzzamanbsxfun
是解决这个问题的方法。但是,从您的函数名称来看,这看起来像是作业,所以让我们坚持原来的。因此,您只需要编写两个for
循环。您将使用第二个for
循环同时索引向量和矩阵的列。最外面的for
循环将访问矩阵的行。此外,您正在引用A
和B
,它们是代码中不存在的变量。您还将输出矩阵初始化C
为 2 x 3 always。您希望它的大小与mat
. 我还删除了您对向量长度的检查,因为您没有对结果做任何事情。
像这样:
function C = lab11(mat, vec)
[a, b] = size(mat);
C = zeros(a,b);
for i = 1:a
for k = 1:b
C(i,k) = mat(i,k) * vec(k);
end
end
end
请特别注意我所做的事情。最外层for
循环访问 的行mat
,而最内层循环访问 的列和mat
元素vec
。请记住, 的列数mat
需要与 中的元素数相同vec
。您可能应该在您的代码中检查这一点。
如果您不喜欢使用该bsxfun
方法,另一种方法是获取向量vec
并从中制作一个矩阵,该矩阵的大小与mat
将向量堆叠在vec
自身顶部的次数与我们在mat
. 在此之后,您可以进行逐个元素的乘法。您可以通过使用repmat
which 在您想要的任何维度中重复给定次数的向量或矩阵来进行此堆叠。因此,您的功能将简化为:
function C = lab11(mat, vec)
rows = size(mat, 1);
vec_mat = repmat(vec, rows, 1);
C = mat .* vec_mat;
end
但是,我个人会选择这bsxfun
条路线。 bsxfun
基本上做了repmat
范式在幕后所做的事情。在内部,它确保您的两个输入具有相同的大小。如果不是,它会复制较小的数组/矩阵,直到它与较大的数组/矩阵大小相同,然后对两个变量中的相应元素应用逐个元素的操作。 bsxfun
代表Binary Singleton EXpansion FUNction,这是一种准确地说出我刚刚谈到的东西的奇特方式。
因此,您的功能进一步简化为:
function C = lab11(mat, vec)
C = bsxfun(@times, mat, vec);
end
祝你好运!