从一段代码说起,编程的技巧
在学习cordic算法时,为了验证\(\cos\alpha=\frac{1}{\sqrt{1+{(\tan\alpha)}^2}}\)时,等效为\(\prod_{i=0}^n \cos\alpha=\frac{1}{\sqrt{1+{(2^{-i})}^2}}\)系数的收敛性,下面代码为验证代码。
N=30;
A=zeros(1,N);
for i=0:1:N-1
A(i+1)=1./sqrt(1+2^(-2*i));
end
B=cumprod(A);
i=1:N;
yyaxis left
%scatter(i,A,'markeredgecolor',[0 .7 .8],'markerfacecolor',[0 .5 .6],'linewidth',2.5);
scatter(i,A,'markeredgecolor','r','markerfacecolor','g','linewidth',2.5);
xlim([-1 N+1]);
ylim([0.55 1.05]);
title('difference A and B');
xlabel('i');
ylabel('A changes')
yyaxis right
%scatter(i,B);
scatter(i,B,'markeredgecolor','b','markerfacecolor','r','linewidth',1.5);
ylim([0.55 1.05]);
ylabel('B,changes')
代码说明:
- 第1行的N不是必须的,主要是为了让程序的更加灵活,作为一个精度逼近程序,逼近项需要经常修改,设置了N之后,只需要在第2,3,8行稍微修改程序,就能让程序适应性增强很多,只需要修改第一行的值,实现精度的提高等
- 第2行开辟空间是为了for循环中多次开辟空间,减慢程序运行速度。
- 第9行和18行是为了作出双y轴的图形,共用的x轴label,title,xlim等只需要设置一次即可,right时只需要设置第二个y轴不同的部分即可。
- 第11行和第20行做了散点图,加了点配置选项而已。
人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。