采用符号计算求[0,T]内时间函数的三角级数展开系数。
函数的输入输出都是数值量
Nf 谐波的阶数
Nn 输出数据的准确位数
A_sym 第1元素是直流项,其后元素依次是1,2,3...次谐波cos 项展开系数
B_sym 第2,3,4,...元素依次是1,2,3...次谐波sin 项展开系数
syms t n k y
创建符号函数,相当于y=f(x)中的x
T=5;
周期T=5
Nf=60;
谐波的阶数
Nn=32;
输出数据的准确位数,就是有效位数
y=time_fun_s;
调用time_fun_s 函数,和C 语言相当
A0=2*int(y,t,0,T)/T;
计算0a ,int 为积分函数,格式为int (需要积分的函数,积分变量,下线,上线) As=int(2*y*cos(2*pi*n*t/T)/T,t,0,T);
计算n a
Bs=int(2*y*sin(2*pi*n*t/T)/T,t,0,T);
计算n b
A_sym(1)=double(vpa(A0,Nn));
vpa:计算变量的精度,就是有效位数
double :强制转换为双精度浮点型
for k=1:Nf
A_sym(k+1)=double(vpa(subs(As,n,k),Nn));
B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn));
end
for 循环,计算n a ,n b 的精度值
subs 是将符号函数转换为数值计算,调用格式subs(转换函数,转换的变量,将要计算变量)
k=Nf;
S1=fliplr(A_sym);
对A_sym 阵左右对称交换,fliplr 为左右对称交换函数,相当于y=[1 2 3 4],fliplr(y)=[-4 -3 -2 -1]
S1(1,k+1)=A_sym(1);
上面两句语句相当于将A_sym 的1*k 阵扩展为1*(k+1)阵
S2=fliplr(1/2*S1);
S3=fliplr(1/2*B_sym);