学习了matlab了之后发现编程的技巧很重要,掌握了正确的编程技巧之后计算速度会加快非常多,尤其是面对一些规模庞大的问题,可以减轻计算机的负担。
我了解到优化matlab代码的一种方法是对于循环内的大数组进行预先定义、分配空间。
用两个例子可以对比分配内存的区别
tic x=1; x(2)=2; x(3)=3; x(4)=4; x(5)=5; toc
tic y=zeros(4,1); y=1; y(2)=2; y(3)=3; y(4)=4; y(5)=5; toc
前者花费的时间接近后者的十倍
利用tic与toc命令计算运算所用时间的方法,测试两种编程的效率
通过下列代码对比预先分配空间(t1)和运行中分配空间(t2)的运算速度
n = 50; m = 1000; for k = 1:n A = []; tic A(1:m,1:m) = 3; for i = 1:m A(i,i) = i; end t1(k) = toc A = []; tic for j = 1:m A(j,j) = j; end t2(k) = toc end t2(t1>10^9) = []; t1(t1>10^9) = []; plot([t1;t2]\')
通过下图可以看出比较明显的区别
之后我添加一条代码 plot([t1;t2]\'),让数据更加直观(上为t2,下为t1)
完整代码
n = 50; m = 1000; for k = 1:n A = []; tic A(1:m,1:m) = 3; for i = 1:m A(i,i) = i; end t1(k) = toc A = []; tic for j = 1:m A(j,j) = j; end t2(k) = toc end t2(t1>10^9) = []; t1(t1>10^9) = []; plot([t1;t2]\')
通过一系列实践就可以看出不同的编程方式对于matlab计算速度的影响了,可见算法的重要性
请发表评论