插值,拟合,参数估计

1. 曲线拟合

1.1 多项式拟合

  • polyfit(x,y,n) —— 其中多项式的系数为n
    说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。x必须是单调的。矩阵s用于生成预测值的误差估计。

  • [p,E]=polyfit(x,y,n) —— p是多项式,E是矩阵用在polyval中计算误差

  • polyval( ) —— 用于多项式求值
    [y,DELTA]=polyval(p,x,s)
    调用格式: y=polyval(p,x)
    说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。
    [y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。则Y DELTA将至少包含50%的预测值。

clear all
clc 
x=[0.3 0.4 0.7 0.9 1.2 1.9 2.8 3.2 3.7 4.5];
y=[1 2 3 4 5 2 6 9 2 7];
p5=polyfit(x,y,5);              %5阶多项式拟合
y5=polyval(p5,x);
p5=vpa(poly2sym(p5),5)          %显示5阶多项式
p8=polyfit(x,y,8);              %8阶多项式拟合
y8=polyval(p8,x);   
figure;                     %画图显示
plot(x,y,'bo');
hold on;
plot(x,y5,'r:');
plot(x,y8,'g--');
legend('原始数据','5阶多项式拟合','8阶多项式拟合');
xlabel('x');
ylabel('y');

1.3 非线性拟合

一直输入和输出的函数关系,但不清楚系数向量x
在matlab中可以用lsqcurvefit()解决

  • x = lsqcurvefit(fun,x0,xdata,ydata) —— 其中x0为初始解向量,xdata,ydata为满足函数关系的数据
  • [x,resnorm,residual] —— resnorm是在x处残差的平方和,residual是残差
%定义函数关系
function F = ex1024(x,xdata)
F = x(1)*xdata.^2+x(2)*sin(xdata)+x(3)*xdata.^3
clear all
clc
xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];
ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];
x0 = [10, 10, 10];    
[x,resnorm,residual] = lsqcurvefit(@ex1024,x0,xdata,ydata)

>>
x =

    0.2269    0.3385    0.3022

2.参数估计函数

2.1 常见分布函数的参数估计

  • [muhat,sigmahat] = normfit(data)
  • [muhat,sigmahat,muci,sigmaci] = normfit(data)
    muhat,sigmahat分别是\mu,\sigma的估计值
    muci,sigmaci时95%的置信区间
  • [muhat,sigmahat,muci,sigmaci] = normfit(data,alpha)
clear all
clc
x1=[59.6 55.2 56.6 55.8 60.2 57.4 59.8 56.0 55.8 57.4];
x2=[56.8 54.4 59.0 57.0 56.0 60.0 58.2 59.6 59.2 53.8];
x=[x1 x2]';
a=0.05;
[muhat,sigmahat,muci,sigmaci]=normfit(x,a);
[p,ci]=mle('norm',x,a);
n=numel(x);
format long
muhat
p1=p(1)
sigmahat
sigmahat1=var(x).^0.5
p2=p(2)
muci
ci
sigmaci
muci1=[muhat-tinv(1-a/2,n-1)*sigmahat/sqrt(n),muhat+tinv(1-a/2,n-1)*sigmahat/sqrt(n)]
sigmaci1=[((n-1).*sigmahat.^2/chi2inv(1-a/2,n-1)).^0.5,((n-1).*sigmahat.^2/chi2inv(a/2,n-1)).^0.5]

>>

muhat =

  57.390000000000001


p1 =

  57.390000000000001


sigmahat =

   1.966535826750873


sigmahat1 =

   1.966535826750873


p2 =

   1.916742027503963


muci =

  56.469632902339683
  58.310367097660318


ci =

  56.469632902339683   1.495531606349597
  58.310367097660318   2.872266449964584


sigmaci =

   1.495531606349597
   2.872266449964584


muci1 =

  56.469632902339683  58.310367097660318


sigmaci1 =

   1.495531606349597   2.872266449964584

2.2 点估计

  1. 极大似然法
    用mle()进行极大似然估计:
    phat = mle('dist',data):使用data中的数据,返回dist指定的分布的最大似然估计。
clear all 
clc
x1=[59.6 55.2 56.6 55.8 60.2 57.4 59.8 56.0 55.8 57.4];
x2=[56.8 54.4 59.0 57.0 56.0 60.0 58.2 59.6 59.2 53.8];
x=[x1 x2]';
p=mle('norm',x);
muhatmle=p(1)
sigma2hatmle=p(2)^2
p
>>
muhatmle =

  57.390000000000001


sigma2hatmle =

   3.673900000000002
%分别为均值和方差

2.3 区间估计

在matlab中调用mle进行极大似然估计时,有几种调用方式:
[phat,pci] = mle('dist',data,alpha) —— 返回指定分布的最大似然估计和100(1-alpha)%的置信空间

clear all 
clc
x1=[29.8 27.6 28.3 27.9 30.1 28.7 29.9 28.0 27.9 28.7];
x2=[28.4 27.2 29.5 28.5 28.0 30.0 29.1 29.8 29.6 26.9];
x=[x1 x2]';
[p,pci]=mle('norm',x,0.05)

>>

p =

  28.695000000000000   0.958371013751981


pci =

  28.234816451169841   0.747765803174798
  29.155183548830159   1.436133224982292

3.插值

3.1 一维插值

使用命令interp1(),调用方式如下:
yi = (x,Y,xi,method)
其中yi对应于每一参量xi
在下列程序中列出几种常见插值方法:

clear all
clc
x=0:0.3:3;
y=(x.^2-4*x+2).*sin(x);
xi=0:0.01:3;                                %要插值的数据
yi_nearest=interp1(x,y,xi,'nearest');               %临近点插值
yi_linear=interp1(x,y,xi);                      %默认为线性插值
yi_spine=interp1(x,y,xi,'spine');                   %三次样条插值
yi_pchip=interp1(x,y,xi,'pchip');                   %分段三次Hermite插值
yi_v5cubic=interp1(x,y,xi,'v5cubic');               %MATLAB5中三次多项式插值
figure;                                 %画图显示
hold on;
subplot(231);
plot(x,y,'ro');                             %绘制数据点
title('已知数据点');
subplot(232);
plot(x,y,'ro',xi,yi_nearest,'b-');                  %绘制临近点插值的结果
title('临近点插值');
subplot(233);   
plot(x,y,'ro',xi,yi_linear,'b-');                       %绘制线性插值的结果
title('线性插值');
subplot(234);
plot(x,y,'ro',xi,yi_spine,'b-');                        %绘制三次样条插值的结果
title('三次样条插值');
subplot(235);
plot(x,y,'ro',xi,yi_pchip,'b-');                        %绘制分段三次Hermite插值的结果
title('分段三次Hermite插值');
subplot(236);
plot(x,y,'ro',xi,yi_v5cubic,'b-');                  %绘制三次多项式插值的结果
title('三次多项式插值');

其中spline的效果最好

3.2 二维插值

Zi = interp2(X,Y,Z,Xi,Yi,method)

clear all
clc
[x,y]=meshgrid(-5:1:5);                     %原始数据
z=peaks(x,y);
[xi,yi]=meshgrid(-5:0.8:5);                     %插值数据
zi_nearest=interp2(x,y,z,xi,yi,'nearest');              %临近点插值
zi_linear=interp2(x,y,z,xi,yi);                 %系统默认为线性插值
zi_spline=interp2(x,y,z,xi,yi,'spline');                %三次样条插值
zi_cubic=interp2(x,y,z,xi,yi,'cubic');              %三次多项式插值
figure;                                 %数据显示
hold on;
subplot(321);
surf(x,y,z);                                    %绘制原始数据点
title('原始数据');
subplot(322);
surf(xi,yi,zi_nearest);                         %绘制临近点插值的结果
title('临近点插值');
subplot(323);
surf(xi,yi,zi_linear);                          %绘制线性插值的结果
title('线性插值');
subplot(324);
surf(xi,yi,zi_spline);                          %绘制三次样条插值的结果
title('三次样条插值');
subplot(325);
surf(xi,yi,zi_cubic);                           %绘制三次多项式插值的结果
title('三次多项式插值');

3.3 样条插值

在matlab中,三次样条插值可以采用函数spline()

  • spline():给定离散的测量数据x,y
clear all
clc
x = [0 2 4 5 8 12 12.8 17.2 19.9 20];  
y = exp(x).*sin(x);
xx = 0:.25:20;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容