Alex_McAvoy

想要成为渔夫的猎手

Matlab 拟合与参数估计

【多项式拟合】

在 matlab 中,函数 polyfit() 用于多项式拟合,其采用最小二乘法进行计算

  • polyfit(x,y,n):找到次数为 n 的多项式系数
  • polyval(x,y):计算多项式的误差
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>> x=ceil(randn(1,10)*10);
>> x=sort(x);
>> y=ceil(randn(1,10)*10);
>> y=sort(y);

>> subplot(2,1,1)
>> plot(x,y,'s')
>> subplot(2,1,2)
>> p5=polyfit(x,y,5);
>> y5=polyval(p5,x);
>> plot(x,y5,'-s')

>> hold on
>> p3=polyfit(x,y,3);
>> y3=polyval(p3,x);
>> plot(x,y3,'-s')
>> legend('p5','p3')

注:除利用最小二乘法的多项式拟合外,常用的拟合方法有 WLS 拟合、非线性曲线拟合等,但由于 matlab 中没有集成的方法,且原理涉及到机器学习知识,故不再赘述

【参数估计】

常见分布的参数估计

在 matlab 中,对于常见分布的参数估计有集成的函数,下面以正态分布的参数估计为例,介绍该类函数的用法

  • [mu_hat,sigma_hat,mu_ci,sigma_ci]=normfit(x):对于给定的正态分布 x,返回参数为 u 的估计值 mu_hat,sigma 的估计值 sigma_ci,其中两个参数的置信区间均为 95%

  • [mu_hat,sigma_hat,mu_ci,sigma_ci]=normfit(x,alpha):对于给定的正态分布 x,返回参数为 u 的估计值 mu_hat,sigma 的估计值 sigma_ci,其中两个参数的置信区间均为 (1-alpha)*100%

常见分布的参数估计集成函数见下表:

分布 函数
泊松分布 poissfit
均匀分布 unifit
正态对数似然函数 normlike
二项分布 binofit
伽马分布 gamfit
伽马似然函数 gmalike
指数分布 expfit
贝塔分布 betafit
贝塔对数似然函数 betalike

点估计

点估计的常用方法有最大似然法和矩法两种,在 matlab 中,分别利用 mle()moment() 函数进行计算

  • p=mle(name,data):返回 name 指定的分布,关于数据 data 的最大似然估计
  • m=moment(x,order):返回由 n 指定的 x 的中心矩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>> x=30+(randn(1,10)*10);
>> y=30+(randn(1,10)*10);

% 最大似然法
>> p=mle('norm',[x,y]);
>> mu_hat_mle=p(1)
mu_hat_mle = 30.0936
>> sigma_hat_mle=p(2)^2
sigma_hat_mle = 111.8298

% 矩法
>> mu_hat_mle=mean([x,y])
mu_hat_mle = 30.0936
>> sigma_hat_mle=moment([x,y],2)
sigma_hat_mle = 111.8298

区间估计

在 matlab 中,求区间估计时,利用 mle() 来计算区间估计

  • [p_hat,p_ci]=mle(name,data):返回 name 指定分布,关于数据 data 最大似然估计和 95% 的置信区间
  • [p_hat,p_ci]=mle(name,data,alpha):返回 name 指定分布,关于数据 data 最大似然估计和 (1-alpha)*100%% 的置信区间
1
2
3
4
5
6
7
>> x=30+(randn(1,10)*10);
>> [p,p_ci]=mle('norm',[x,y],0.05)
p =
30.0936 10.5750
p_ci =
25.0157 8.2511
35.1714 15.8467
感谢您对我的支持,让我继续努力分享有用的技术与知识点!