最小二乘法拟合正态分布曲线,用matlab实现
时间: 2023-08-26 13:41:41 浏览: 226
最小二乘法曲线拟合的matlab实现.docx
假设你有一组数据,其中$x$和$y$分别表示自变量和响应变量。你可以使用Matlab中的`lsqcurvefit`函数来拟合正态分布曲线。以下是实现的步骤:
1. 定义正态分布函数:
```
function y = gauss(x, p)
y = p(1)*exp(-0.5*((x-p(2))/p(3)).^2);
end
```
其中,`p`是一个包含三个参数的向量,分别表示正态分布函数的幅值、均值和标准差。`x`表示自变量。
2. 使用`lsqcurvefit`函数拟合正态分布函数:
```
xdata = x; % 自变量
ydata = y; % 响应变量
p0 = [1, mean(x), std(x)]; % 参数的初始值
[p, resnorm] = lsqcurvefit(@gauss, p0, xdata, ydata);
```
其中,`p0`是一个初始参数向量,`@gauss`表示要拟合的函数,`xdata`和`ydata`是自变量和响应变量。`p`是拟合后的参数向量,`resnorm`是残差的平方和。
3. 绘制拟合曲线:
```
x_fit = linspace(min(x), max(x), 1000); % 拟合曲线的自变量范围
y_fit = gauss(x_fit, p); % 拟合曲线的响应变量
plot(xdata, ydata, 'o', x_fit, y_fit, '-');
```
其中,`x_fit`是拟合曲线的自变量范围,`y_fit`是拟合曲线的响应变量。使用`plot`函数可以绘制原始数据点和拟合曲线。
完整代码如下:
```
function [p, resnorm] = fit_gaussian(x, y)
function y = gauss(x, p)
y = p(1)*exp(-0.5*((x-p(2))/p(3)).^2);
end
xdata = x; % 自变量
ydata = y; % 响应变量
p0 = [1, mean(x), std(x)]; % 参数的初始值
[p, resnorm] = lsqcurvefit(@gauss, p0, xdata, ydata);
x_fit = linspace(min(x), max(x), 1000); % 拟合曲线的自变量范围
y_fit = gauss(x_fit, p); % 拟合曲线的响应变量
plot(xdata, ydata, 'o', x_fit, y_fit, '-');
xlabel('X');
ylabel('Y');
title('Gaussian Curve Fitting');
end
```
你可以通过调用`fit_gaussian`函数并传入你的数据来得到拟合曲线。
阅读全文