高斯曲线拟合

matlab实现多项式拟合的函数相对比较简单,且容易记忆,但是复杂曲线的拟合就比较繁杂,比如高斯曲线,也叫正态分布函数,线上做个笔记,大家共勉。

clc;clear;
close all;

y = [1,1,1,3,7,8,7,3,1,1,1];                             %  待拟合向量
len = length(y);                                         %  数据长度
x = 1:1:len;                                             %  时间轴坐标
figure,plot(x,y);
xlabel('Position / s');
ylabel('Intencity / cd');
title('Input Signal');

% 定义初始参数,matlab在此基础上优化,初始参数太差会导致优化效果很差
Amptittude = 7;                                         % 定义初始幅值a              
pos = 6;                                                % 定义中心横坐标b
standerror = 2;                                         % 定义标准差c
Da = 1;                                                 % 定义最低纵坐标d
gaussEqn = 'a*exp(-((x-b)/c)^2)+d';                     % 高斯方程
startPoints = [Amptittude pos standerror,Da];           % 初始参数矩阵
para1 = fit(x',y',gaussEqn,'Start', startPoints);       % 拟合命令(x、y必须是列向量)
hold on,plot(para1,x,y);                                % 绘图命令
a = getfield(para1,'a');                                % 获取指定拟合参数a

拟合前后曲线对比结果如下。
拟合前数据以及拟合后曲线

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐