⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fzzyquad.m

📁 精通matlab
💻 M
字号:
function [t,y,S,A,B]=fzzyquad(a,T,Nf,K)
% 用数值积分求Fourier级数展开系数A,B和近似波形S 。如调用本指令时,没有任何
% 输出宗量,那么将自动随积分进程动态地画出原波形和各阶近似波形。
%	a		是被展开函数的时间区间的左端。
%	T		是被展开函数的周期。
%	Nf		是所需展开的最高谐波阶次
%	K		绘波形图所采用的数据长度
%	t,y		是被展开的时间函数数据。
%	S		是一个矩阵。它每行的长度与t,y相同。
%				它的第(n+1)行是所有n次及更低次谐波迭加生成的近似波形。
%	A,B		是展开系数向量。A(n+1),B(n+1)分别存放cos,sin项n次谐波的展开系数。
%				A(1)是直流项
if nargin<4;K=100;end
if (nargin<3|isempty(Nf));Nf=15;end
k=1:K;
t=a+k*T/length(k);
y=time_fun(t,T);
S=zeros(Nf+1,length(k));
a0=mean(y); 
S(1,:)=a0;
A=zeros(1,Nf+1);B=zeros(1,Nf+1);
A(1)=a0;
tolzzy=[0.001,0.018];
for n = 1:Nf
   A(n+1) = quad8('cos_y',a,a+T,tolzzy,[],n,T)/T*2;
   B(n+1) = quad8('sin_y',a,a+T,tolzzy,[],n,T)/T*2;
   S(n+1,:)=S(n,:)+A(n+1)*cos(2*n*pi*t/T)+B(n+1)*sin(2*n*pi*t/T);
   if nargout==0
      plot(t,y,'b');hold on
      plot(t,S(n+1,:),':r');
      aa=axis;dx=aa(2)-aa(1);dy=aa(4)-aa(3);
      text(aa(1)+0.1*dx,aa(3)+.75*dy,'n = ')
      text(aa(1)+0.2*dx,aa(3)+.75*dy,num2str(n));
      pause(1);hold off
   end
end 
%------------------------------
function y=time_fun(t,T)
% 这是需要用户自己编写的待展开的时间函数 y(t+k*T)=y(t)
% 编写程序时,一定要注意使表达式适于数组运算
%	t		是时间数组
%	T		是周期
y=zeros(size(t));ii=find(t>=0.5 & t<=1.5);
y(ii)=ones(size(ii)).*(t(ii)-0.5);y(y==1.0)=0.5;


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -