如何用最小二乘法拟合高斯曲线,可以用matlab代码演示吗
时间: 2023-07-01 16:10:24 浏览: 155
最小二乘曲线拟合演示(matlab)
4星 · 用户满意度95%
最小二乘法可以用来对高斯曲线进行拟合,其基本思想是使拟合曲线与实际数据点之间的误差最小化。下面是matlab代码示例:
假设我们需要拟合一个高斯曲线,其形式为:
$$f(x)=a\exp(-\frac{(x-b)^2}{2c^2})$$
其中,$a$为高斯峰值,$b$为高斯中心位置,$c$为高斯曲线宽度。
首先,我们生成一些随机的数据点,用于后面的拟合:
```
x = linspace(-5,5,100);
y = 2*exp(-(x-1).^2/2/0.5^2)+0.5*randn(size(x));
```
然后,我们定义拟合函数:
```
fun = @(p,x) p(1)*exp(-(x-p(2)).^2/2/p(3)^2);
```
其中,$p$为拟合参数,$x$为自变量。
接下来,我们使用最小二乘法进行拟合:
```
p0 = [1,0,1]; % 初始拟合参数
[p,resnorm,residual,exitflag,output] = lsqcurvefit(fun,p0,x,y); % 最小二乘法拟合
```
其中,`p`为拟合得到的参数,`resnorm`为残差平方和,`residual`为残差向量,`exitflag`为拟合的退出标志,`output`为拟合的输出信息。
最后,我们可以将拟合曲线绘制出来,并与原始数据点进行比较:
```
plot(x,y,'b.','MarkerSize',10)
hold on
plot(x,fun(p,x),'r-','LineWidth',2)
legend('Data','Fit')
title(['a = ',num2str(p(1)),' b = ',num2str(p(2)),' c = ',num2str(p(3))])
```
完整的matlab代码如下:
```
x = linspace(-5,5,100);
y = 2*exp(-(x-1).^2/2/0.5^2)+0.5*randn(size(x));
fun = @(p,x) p(1)*exp(-(x-p(2)).^2/2/p(3)^2);
p0 = [1,0,1];
[p,resnorm,residual,exitflag,output] = lsqcurvefit(fun,p0,x,y);
plot(x,y,'b.','MarkerSize',10)
hold on
plot(x,fun(p,x),'r-','LineWidth',2)
legend('Data','Fit')
title(['a = ',num2str(p(1)),' b = ',num2str(p(2)),' c = ',num2str(p(3))])
```
阅读全文