Matlab向量化计算f时矩阵乘法错误的修复求助
问题分析与解决方案
错误原因
错误出现在TCxy函数第18行的矩阵乘法操作*上。A(p,q)是单个标量值,但你误用了矩阵乘法运算符*,而不是MATLAB中用于逐元素相乘的.*运算符。虽然标量与矩阵用*在部分场景下能运行,但此处的运算逻辑是将标量A(p,q)与每个位置的余弦值逐一相乘,必须使用逐元素乘法才能保证维度匹配。
修复代码
将第18行的A(p, q) * cos(...)替换为A(p, q) .* cos(...),修改后的循环片段如下:
for p = p_vals for q = q_vals f = f + A(p, q) .* cos((2*p-1)*pi*d*sin(th).*cos(phi)) .* ... cos((2*q-1)*pi*d*sin(th).*sin(phi)); end end
进一步向量化优化(可选)
若要真正实现无循环的向量化计算以最大化提速,可利用MATLAB的广播机制消除嵌套循环:
% 生成p和q的网格矩阵 [p_grid, q_grid] = meshgrid(1:M, 1:M); % 计算所有(p,q)对应的余弦项矩阵 cos_term_p = cos((2*p_grid-1)*pi*d*sin(th).*cos(phi)); cos_term_q = cos((2*q_grid-1)*pi*d*sin(th).*sin(phi)); % 逐元素相乘后求和得到最终f f = sum(sum(A .* cos_term_p .* cos_term_q, 1), 2);
此方法完全移除循环,在M值较大时能显著缩短计算时间。
内容的提问来源于stack exchange,提问作者Kaggy
相关产品推荐
相关产品推荐

