从一段代码说起,编程的技巧

在学习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行做了散点图,加了点配置选项而已。
posted @ 2025-03-22 10:36  叕叒双又  阅读(19)  评论(0)    收藏  举报