使用matlab计算该递推数列,需要要符号计算symbolic toolbox以提高计算精度,从而实现数值方法。对于精度,取|pₙ₊₁-pₙ|<ε为迭代终止条件,计算过程为:依次计算aₙ,bₙ,cₙ,sₙ,pₙ,并检查|pₙ-pₙ₋₁|<ε,一符合即结束循环,代码如下:
digits(30);
ab0=[sym(1) ,sym(1/2)^05 sym(0)];
r=@(x)(x(1:end-1));
n=@(x)(x(end));
abab=@(t)([mean(r(t)) prod(r(t))^05 n(t)+1]);
ab1=abab(ab0);
c=@(t)(sum((r(t)^2)[1 -1]));
s0=sym([1]);
ss=@(t,x)(t-c(x)22^n(x));
s1=ss(s0,ab1);
ee=sym(10e-19);
p=@(ab,s)(sum(r(ab))^2/4/s);
p0=p(ab0,s0);
p1=p(ab1,s1);
pold=1000;
while abs(pold-p1)>=ee;
fprintf('p(%d)=',n(ab1));
disp(vpa(p1,29));
ab1=abab(ab1);
s1=ss(s1,ab1);
pold=p1;
p1=p(ab1,s1);
end;
代码如图,24行
第一次运行,迭代收敛太快,远未π
于是做了一点修改,手工指定了迭代次数为8,并调高了精度。
调整的代码如图
结果如上
1 region = (swc~=-9999)表示判断swc中每个元素是否是不等于-9999,如果不等用1表示否则用0表示。因此region是和swc大小一致的矩阵,里面的每个元素都是对应于swc的相应元素的判断结果。
举个例子
>> swc=[-9999,0;20,-9999]
swc =
-9999 0
20 -9999
>> region=(swc~=-9999)
region =
0 1
1 0
2 fswc = fswcregion + (region==0)-9999这句表示fswc中的元素在region的相应的元素为1的时候不变,为0的时候都变为-9999
举个例子
fswc=[1 2;3 4]
fswc =
1 2
3 4
>> region
region =
0 1
1 0
fswc = fswcregion + (region==0)-9999
fswc =
-9999 2
3 -9999
这里矩阵region等于0的为对角线上的元素,则fswc矩阵相对应的对角线元素都变为-9999
这是一个函数,不能直接运行,应该在命令行输入或在其它m文件中调用才行。
如命令行方式:
>>S = pdfSmap(DATA, ROW, COL)
但在执行这条命令前,请确保先给DATA/ROW/COL赋值
[y,fs,nbits]= wavread(wavFile1);
y就是音频信号;
fs是采样频率,比如说16000就是每秒16000次;
nbit是采样精度,比如说16就是指16位精度的采样;
sound 按采集波形发出声音
fft 傅里叶变换
abs求信号的绝对值
angle 返回相角
后面的()里的就是相应的解释了,实际就是进行信号分析的一小段程序
欢迎分享,转载请注明来源:表白网
评论列表(0条)