我似乎无法在MATLAB代码中对for循环进行矢量化。基本上,我有这个代码:
% Let that:
%Tp = scalar
%N, = scalar (Say 1000)
%Ac, = 4x4 matrix
%pre = 1x4 matrix
%post = 4x2 matrix
%wy1 = N+1x1 matrix (so it would be 1001*1)
%wy2 = N+1x1 matrix (so it would be 1001*1)
% preallocate
delta_ksi=Tp/N;
AcT =Ac';
sum_matrix=zeros(4,1);
Fl=zeros(4,1);
% calculate the sum
for i=1:N
Fl=delta_ksi*expm(AcT*delta_ksi*i)*post*[wy1(1,i); wy2(1,i);];
sum_matrix= sum_matrix+Fl;
end
%value I need
delta_f_des_ff= pre*sum_matrix;
我想到的是构建一个3D矩阵Fl_3D(4 x 1x 1000)然后使用i = 1:1000
进行数组乘法,但是当与[wy1(1,i); wy2(1,i)]
相乘时我仍然遇到不兼容的尺寸误差使用索引i
。
有关最佳方法是什么的任何线索?矢量化仍然可能吗? 谢谢!
编辑:
背景: 我正在尝试解决Simulink项目中的瓶颈代码问题。 代码性能分析表明上述函数占用了大部分运行时间。
我希望矢量化可以解决性能问题。我也刚刚发现瓶颈来自expm()操作。任何改善这一点的建议也受到欢迎!