Matlab 最小二乘法拟合二次曲线的代码实现(不使用Matlab 内部函数polyfit)
时间: 2023-12-24 08:13:02 浏览: 129
最小二乘法曲线拟合的matlab实现.docx
如果不使用 Matlab 内部的 polyfit 函数,可以使用最小二乘法的公式来手动计算二次曲线的系数。具体步骤如下:
1. 构造系数矩阵 $A$ 和常数矩阵 $b$:
$$
A = \begin{bmatrix}
1 & x_1 & x_1^2 \\
1 & x_2 & x_2^2 \\
\cdots & \cdots & \cdots \\
1 & x_n & x_n^2
\end{bmatrix},
\quad
b = \begin{bmatrix}
y_1 \\
y_2 \\
\cdots \\
y_n
\end{bmatrix}
$$
2. 计算系数矩阵的转置 $A^T$ 和 $A$ 的乘积 $A^TA$,以及 $A^T$ 和常数矩阵的乘积 $A^Tb$:
$$
A^TA = \begin{bmatrix}
n & \sum x_i & \sum x_i^2 \\
\sum x_i & \sum x_i^2 & \sum x_i^3 \\
\sum x_i^2 & \sum x_i^3 & \sum x_i^4
\end{bmatrix},
\quad
A^Tb = \begin{bmatrix}
\sum y_i \\
\sum x_iy_i \\
\sum x_i^2y_i
\end{bmatrix}
$$
3. 解线性方程组 $A^TAx = A^Tb$,得到二次曲线系数 $a_0, a_1, a_2$。
Matlab 代码如下:
```
% 构造系数矩阵 A 和常数矩阵 b
n = length(x);
A = [ones(n, 1), x', x'.^2];
b = y';
% 计算 A^TA 和 A^Tb
ATA = A' * A;
ATb = A' * b;
% 解线性方程组
coeffs = ATA \ ATb;
% 提取系数
a0 = coeffs(1);
a1 = coeffs(2);
a2 = coeffs(3);
```
拟合结果可以用以下代码进行绘图:
```
% 绘制原始数据点
plot(x, y, 'o');
% 绘制拟合曲线
xx = linspace(min(x), max(x), 1000); % 生成一组等间距的 x 值
yy = a0 + a1 * xx + a2 * xx.^2;
hold on;
plot(xx, yy);
```
阅读全文