下午碰到一段MATLAB程序运行缓慢,怀疑是因为使用了subs函数而导致的,写了段测试代码:
clc;
clear;
syms x1 x2 x3 x4 y1 y2 y3 y4;
V1=1;V2=2;V3=3;V4=4;
V5=5;V6=6;V7=7;V8=8;
M1=[x1 x2;x3 x4];
M2=[y1 y2;y3 y4];
M=M1+M2;
tic;
for i=1:1:1000
Mv=subs(M,{x1,x2,x3,x4,y1,y2,y3,y4},{V1,V2,V3,V4,V5,V6,V7,V8});
end
t1=toc;
N1=[V1 V2;V3 V4];
N2=[V5 V6;V7 V8];
tic;
for j=1:1:1000
Nv=calcSums(N1,N2);
end
t2=toc;
disp(['采用subs函数的运行时间为',num2str(t1),'秒;']);
disp(['采用自定义求和函数的运行时间为',num2str(t2),'秒;']);
disp(['t1是t2的',num2str(fix(t1/t2)),'倍。']);
其中自定义的求和函数calcSums为:
function result=calcSums(Mat1,Mat2)
result=Mat1+Mat2;
end
引用地址:
注意: 该地址仅在今日23:59:59之前有效
下午碰到一段MATLAB程序运行缓慢,怀疑是因为使用了subs函数而导致的,写了段测试代码:
clc;
clear;
syms x1 x2 x3 x4 y1 y2 y3 y4;
V1=1;V2=2;V3=3;V4=4;
V5=5;V6=6;V7=7;V8=8;
M1=[x1 x2;x3 x4];
M2=[y1 y2;y3 y4];
M=M1+M2;
tic;
for i=1:1:1000
Mv=subs(M,{x1,x2,x3,x4,y1,y2,y3,y4},{V1,V2,V3,V4,V5,V6,V7,V8});
end
t1=toc;
N1=[V1 V2;V3 V4];
N2=[V5 V6;V7 V8];
tic;
for j=1:1:1000
Nv=calcSums(N1,N2);
end
t2=toc;
disp(['采用subs函数的运行时间为',num2str(t1),'秒;']);
disp(['采用自定义求和函数的运行时间为',num2str(t2),'秒;']);
disp(['t1是t2的',num2str(fix(t1/t2)),'倍。']);
其中自定义的求和函数calcSums为:
function result=calcSums(Mat1,Mat2)
result=Mat1+Mat2;
end
循环1000次时的运行结果:
采用subs函数的运行时间为29.7846秒;
采用自定义求和函数的运行时间为0.17605秒;
t1是t2的1761倍。
subs函数耗时很大,在对效率有较高要求时不宜采用。