参考 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. 在此之后,您可以进行逐个元素的乘法。您可以通过使用repmatwhich 在您想要的任何维度中重复给定次数的向量或矩阵来进行此堆叠。因此,您的功能将简化为:
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
祝你好运!