使用最小二乘法拟合由分段函数构成的广义贝塔分布的参数
生活随笔
收集整理的這篇文章主要介紹了
使用最小二乘法拟合由分段函数构成的广义贝塔分布的参数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本文記錄了用MATLAB中的lsqcurvefit函數(shù)擬合廣義貝塔分布中的α和β參數(shù)的過程
廣義貝塔分布的CDF(累積分布函數(shù))如下:
其中l(wèi)和r為偏離中心的程度,正規(guī)貝塔分布中沒有l(wèi)和r參數(shù)
而
即
代碼如下
func.m文件 function [y]=func(beta0,xdata) a=beta0(1); b=beta0(2);l=-0.06; r=0.05;%分段函數(shù)① sub1=xdata<=l; y(sub1)=0.0;%分段函數(shù)② sub2=xdata>=r; y(sub2)=1.0;%分段函數(shù)③ %求積分 syms t; f=((t-l).^(a-1)).*((r-t).^(b-1))./((r-l).^(a+b-1));sub3=find((xdata>l)&(xdata<r)); for i=sub3(1):sub3(length(sub3)) y(i)=int(f,t,l,xdata(i))*gamma(a+b)/gamma(a)*gamma(b); endy=y';%得到行向量,轉(zhuǎn)置成列向量,因?yàn)橐cxdata和ydata的維度相同,否則下面的lsqcurvefit會(huì)報(bào)錯(cuò) end main.m文件 clear all;clc;close all; data=xlsread("數(shù)據(jù).xlsx"); xdata=data(:,1);%從excel表格中讀取第一列數(shù)據(jù)作為xdata ydata=data(:,2);%從excel表格中讀取第二列數(shù)據(jù)作為ydata beta0=[6 4] ;%α和β的初始值,隨意給定 disp(xdata'); disp(ydata');[p]=lsqcurvefit(@(beta0,xdata)func(beta0,xdata),beta0,xdata,ydata);%使用最小二乘法進(jìn)行擬合 %p中保存的就是擬合得到的α和β的值 disp(p'); yy=func(p,xdata);%把擬合得到的α和β代入算 figure; plot(xdata,ydata,'ko');%畫實(shí)際CDF hold on; plot(xdata,yy,'-');%用擬合值畫CDF grid on;程序運(yùn)行后會(huì)在底部命令行窗口輸出擬合得到的α和β的值
擬合結(jié)果如圖
總結(jié)
以上是生活随笔為你收集整理的使用最小二乘法拟合由分段函数构成的广义贝塔分布的参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ECC椭圆曲线
- 下一篇: mybatis批量新增和修改