MatLab由数据点拟合高斯分布参数

本文详细介绍如何对近似正态分布的数据集进行高斯拟合,包括数据预处理、参数估计及结果验证。首先,数据点需通过插值转换为奇数个,并进行归一化和平移,以确保对称性。随后,使用MATLAB实现高斯函数拟合,获取振幅、期望、标准差和直流分量。最后,通过绘图对比原始数据与拟合曲线,验证拟合效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进行数据点的高斯分布参数拟合之前,有以下几点需要注意:

(1) 数据点要近似是高斯分布的形态,即近似符合正太分布的规律;

(2)数据集在使用时要进行归一化处理;

(3)数据集索引,即数据点的个数要为奇数;若实际应用中为偶数个数据点,可以对数据点进行插值拉伸为奇数个数据点再进行使用。

 

我们使用1280个点组成的数据集,其分布形状如下图所示

可以观察到数据点近似为正态分布的形状,可以采用高斯拟合求取其分布参数。

注意到数据点的分布区间为(120, 130)之间,因此数据需要进行归一化后再进行高斯拟合。

同时数据点个数为偶数,需要进行插值拉伸,此处我们使用的方案是添加一个数据点,即将1280个数据点插值拉伸为1281个数据点,该方法在matlab中可以由imresize函数方便的得到。

 

下面上程序,首先进行的是数据点的插值拉伸,若数据点本身为奇数,则可以忽略此步骤。

%% 数据点拉伸
img = load('data.mat'); % 下载数据
res= double(img); % 将数据转换为double类型
[cols, rows] = size(res); % 丈量数据矩阵尺寸,此处数据集为1行1280列
resImg = imresize(res, [1, cols+1], 'bilinear'); % 将数据集插值拉伸为1行1281列,差值方式为线性插值

再进行高斯拟合之前,首先将数据集的正坐标平移至关于原点对称的区间。上面一步拉伸为奇数个数据点的 目的,就是为了令待拟合数据关于中心点左右对称,方便原点定位。注意,在本步骤中,将数据点的值作为Y坐标, 数据点索引值作为X坐标,发生坐标平移的是X轴。

%% X轴平移至关于原点对称的区间
bias = round(size(resImg, 2), 2); % 平移量
Xdata = 1:size(resImg,2); % X轴平以前的坐标区间
Xdata = Xdata - bias; % X轴平移后的坐标区间,原1281个坐标点以平移至[-640,640]的对称区间
Ydata = resImg; % Y轴为数据点的值

平移后数据如下图所示:

将Y轴对应的数据点数值归一化

%% Y轴数据归一化
y1 = ydata/max(ydata); % Y轴数据归一化
x1 = xdata; % X轴数据保持不变

进行高斯拟合并绘图显示

%% 高斯拟合
fun = fittype('a*exp(-((x-b)/c)^2)+d'); % 确定高斯函数的表达形式
% 其中a是振幅,b是期望,c是标准差,d是直流分量
sP_idx = [round(0.2*numel(x1)), round(0.4*numel(x1)), ...
          round(0.6*numel(x1)), round(0.8*numel(x1))]; % 选取X轴上等间距的四个点
startPoints = x1(sP_idx); % 将上述4个点设置为'Start'参数
[cf,gof] = fit(x1(:),y1(:),fun,'Start',startPoints); % 高斯拟合
yy = cf.a*exp( -((x1-cf.b)/cf.c).^2 )+cf.d; %得到拟合后的高斯曲线

%% 绘图
figure; plot(x1, y1, 'b.');  % 绘制数据点
hold on; plot(x1 ,yy, 'r');  % 绘制拟合的高斯曲线
legend('原始数据', '拟合数据')
hold off;

得到如下图形

得到的拟合参数中,均值和方差都是拉伸后的数据(假设有过数据拉伸的操作),但由于仅使用插值拉伸的方法添加了 一个数据样本,因此得到的结果与原始数据得到的结果非常接近,可以直接使用。输出方案如下

%% 输出高斯拟合得到的参数
A = cf.a * max(Ydata); % 幅值
mu = cf.b + bias; % 期望
sigma = cf.c; % 标准差

如果希望得到精确的期望值,则需要根据差值比例逆算回去即可,如下所示

muReal = mu*(cols/(cols+1)); % 即根据 muReal:mu = 1281:1280 进行计算

 

### 解析 ENOENT 错误 当执行 `yarn add adm-zip` 命令时遇到的 `ENOENT: no such file or directory` 错误会阻止包的成功安装。此错误通常表示 Yarn 或 Node.js 尝试访问不存在的文件或目录。 #### 可能的原因分析 1. **缺少必要的配置文件** 如果项目根目录下缺失 `package.json` 文件,则会触发此类错误,因为 NPM 和 Yarn 都依赖该文件来管理项目的依赖关系[^1]。 2. **权限不足** 用户可能没有足够的权限去创建、修改或读取某些文件夹内的资源,在这种情况下也会抛出类似的异常信息。 3. **路径问题** 存在不正确的相对路径设置或是绝对路径拼写错误也可能引发同样的状况。 4. **网络连接不稳定** 对于一些需要联网获取最新版本号的情况来说,较差的互联网质量同样可能导致操作失败并返回上述提示。 5. **缓存数据损坏** 有时候本地存储着旧版库的信息而这些已经被删除或者迁移至其他位置了;另外一种可能是全局范围内的临时性故障所引起的短暂现象。 ### 实施解决方案 为了有效处理这个问题,可以采取以下几个措施: - 初始化一个新的 package.json 文件(如果尚未存在的话),可以通过运行命令 `npm init -y` 来快速完成这一步骤。 - 清除当前用户的 npm 缓存以排除潜在冲突因素: ```bash npm cache clean --force ``` - 更新到最新的稳定版 nodejs 和 yarn 版本,确保工具链处于最佳状态: ```bash curl -sL https://deb.nodesource.com/setup_16.x | sudo bash - sudo apt-get install -y nodejs sudo npm install -g yarn ``` - 使用管理员身份重新尝试添加所需的软件包,对于 Linux/MacOS 系统而言即加上 `sudo` 关键字前缀; ```bash sudo yarn add adm-zip ``` - 若仍然存在问题,考虑切换国内源加速下载速度以及提高成功率: ```bash cnpm install adm-zip ``` 通过以上方法应该能够较好地应对由 ENOENT 导致的各种情形下的安装难题。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值