📄 datafit1.m
字号:
function datafit1
%《语音信号子带编码》
% 对不同的子带数,选择相似的字长分派方式进行传输处理
% 所需要的时间进行统计分析。并且可以选用不同的参数拟
% 和,有多项式拟和和非线性拟和。
close all;
n=input('请输入数据拟和的方式,1为多项式拟和,2为非线性拟和:');
t= [ 11.9270 15.7330 20.9000 60.0360
13.7500 13.5700 20.5990 98.2420
13.3890 13.2690 20.9200 40.3280
14.1800 13.5000 20.8700 88.7380
12.7180 13.3990 20.9600 44.3140
14.2700 13.2990 20.8800 96.3290
11.9570 13.3890 22.1920 89.1880
12.5480 13.5900 20.6290 81.3870];
t1=mean(t(1:8));t2=mean(t(9:16));t3=mean(t(17:24));t4=mean(t(25:32));
w0=[2 4 8 16];
p0=[t4 t3 t2 t1];
plot(w0,p0,'r*');hold on;
switch n
case 1
%%% 多项式拟合 %%%
x=[2 4 8 16];y=p0;
a0=[1 -1 9 90];
options=optimset('fminsearch');
options.TolX=0.005;
options.Display='off';
a=fminsearch(@logg3,a0,options,x,y);
i=1:0.1:16;
p1=-a(4)./(1+(a(4)/a(1)-1)*exp(-a(2).*i))+a(3);
plot(i,p1,'LineWidth',1.8),axis([1 16 0 200])
ylabel('\fontname{隶书}\fontsize{12}时间/秒'),xlabel('\fontname{隶书}\fontsize{12}子带数/个'),
title('\fontname{隶书}\fontsize{14}多项式数据拟和曲线');
text(5,150,'\fontname{隶书}\fontsize{12}拟合表达式:');
ch=['y=-',num2str(a(4)),'/[1+[',num2str(a(4)),'/',num2str(a(1)),'-1]*exp(',num2str(a(2)),'*x)]+',num2str(a(3))]
text(2,130,ch);
text(8,110,'\fontname{隶书}\fontsize{12}所需时间:');
tmax=num2str(max(p1));syms l;
tmin=num2str(double(limit(-13/(1+(13/a(1)-1)*exp(-a(2)*l))+a(3),inf)));
text(9,95,'\fontname{隶书}\fontsize{12}最大值为tmax:');text(13,95,tmax);
text(9,80,'\fontname{隶书}\fontsize{12}最小值为tmin:');text(13,79,tmin);
case 2
%%% 非线性拟合 %%%
x=[2 4 8 16];y=p0;
a0=[-1 1 1];
options=optimset('fminsearch');
options.TolX=0.005;
options.Display='off';
a=fminsearch(@logg1,a0,options,x,y);
i=1:0.1:16;
p1=-a(1).*log(a(2).*i)./i+a(3);
% plot(i,p1)
plot(i,p1,'LineWidth',1.8)
ylabel('\fontname{隶书}\fontsize{12}时间/秒'),xlabel('\fontname{隶书}\fontsize{12}子带数/个'),
title('\fontname{隶书}\fontsize{14}多项式数据拟和曲线');
text(8,100,'\fontname{隶书}\fontsize{12}拟合表达式:');
ch=['y=-',num2str(a(1)),'*Log(',num2str(a(2)),'*x)/x',num2str(a(3))]
text(4,90,ch);
text(8,80,'\fontname{隶书}\fontsize{12}所需时间:');
t=zeros(1,2);
tmax=num2str(max(p1));syms l;
tmin=num2str(double(limit(-a(1).*log(a(2)*l)/l,inf)));
text(9,75,'\fontname{隶书}\fontsize{12}最大值为tmax:');text(13,75,tmax);
text(9,70,'\fontname{隶书}\fontsize{12}最小值为tmin:');text(13,68,tmin);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -