matlab 最小二乘法拟合二次函数
时间: 2023-08-28 19:06:22 浏览: 144
假设有一组数据点 $(x_i, y_i)$,我们要用最小二乘法拟合一个二次函数 $y=a x^2+b x+c$,其中 $a$、$b$、$c$ 是待求的参数。
最小二乘法的思路是,使拟合函数与数据点的误差平方和最小。即,定义误差函数 $E=\sum_i (y_i - a x_i^2 - b x_i - c)^2$,我们要找到使 $E$ 最小的 $a$、$b$、$c$。
为了求解 $a$、$b$、$c$,我们可以对 $E$ 分别对 $a$、$b$、$c$ 求偏导数,并令偏导数为 0,得到三个方程:
$$
\begin{aligned}
\frac{\partial E}{\partial a}=2\sum_i (y_i-ax_i^2-bx_i-c)(-x_i^2)&=0 \\
\frac{\partial E}{\partial b}=2\sum_i (y_i-ax_i^2-bx_i-c)(-x_i)&=0 \\
\frac{\partial E}{\partial c}=2\sum_i (y_i-ax_i^2-bx_i-c)(-1)&=0
\end{aligned}
$$
将 $a$、$b$、$c$ 的解代入二次函数 $y=a x^2+b x+c$ 中,就得到了最小二乘法拟合的二次函数。
在 MATLAB 中,可以使用 polyfit 函数实现最小二乘法拟合。具体方法如下:
假设有数据点 $(x_i, y_i)$ 存储在两个向量 x 和 y 中,要拟合的二次函数为 $y=a x^2+b x+c$,可以使用以下代码求解 $a$、$b$、$c$:
```matlab
p = polyfit(x, y, 2); % 拟合二次函数
a = p(1);
b = p(2);
c = p(3);
```
其中,第一个参数是 x 向量,第二个参数是 y 向量,第三个参数是拟合函数的次数,这里设为 2。拟合结果存储在向量 p 中,第一个元素是 $a$,第二个元素是 $b$,第三个元素是 $c$。
拟合结果可以用 polyval 函数在一定范围内计算函数值,例如:
```matlab
x_fit = linspace(min(x), max(x), 100); % 生成 100 个 x 值
y_fit = polyval(p, x_fit); % 计算对应的 y 值
plot(x, y, 'o', x_fit, y_fit); % 绘制数据点和拟合曲线
```
其中,第一个参数是生成 x 值的范围,第二个参数是拟合函数的系数向量。生成的 x 值存储在向量 x_fit 中,计算出的 y 值存储在向量 y_fit 中。最后用 plot 函数绘制数据点和拟合曲线。
阅读全文