给定数据点,如和在matlab用最小二乘法求拟合数据的二次多项式,并求平方误差。
时间: 2024-02-05 17:12:01 浏览: 142
通过最小二乘法对数据进行拟合
4星 · 用户满意度95%
假设你的数据点为 (x1, y1), (x2, y2), ..., (xn, yn),我们可以通过最小二乘法来拟合一个二次多项式 y = a*x^2 + b*x + c。其中,a、b、c 是我们需要求解的系数。
首先,我们需要将数据点转化为矩阵形式,即:
```
X = [x1^2, x1, 1;
x2^2, x2, 1;
...
xn^2, xn, 1]
Y = [y1;
y2;
...
yn]
```
然后,我们可以通过以下公式来求解系数:
```
A = (X' * X)^(-1) * X' * Y
```
其中,`^(-1)` 表示矩阵的逆,`X'` 表示矩阵 X 的转置。
最后,我们可以得到系数 a、b、c,并且可以计算平方误差 err:
```
a = A(1);
b = A(2);
c = A(3);
err = sum((a*x.^2 + b*x + c - y).^2);
```
其中,`x` 和 `y` 分别是原始数据点中的 x 坐标和 y 坐标。
下面是完整的 MATLAB 代码:
```matlab
% 原始数据点
data = [
0.5, 2.4;
1.0, 3.5;
1.5, 4.0;
2.0, 4.5;
2.5, 5.6;
3.0, 6.7;
3.5, 7.8;
4.0, 8.9;
4.5, 10.0;
];
% 将数据点转化为矩阵形式
x = data(:, 1);
y = data(:, 2);
X = [x.^2, x, ones(size(x))];
Y = y;
% 求解系数
A = (X' * X)^(-1) * X' * Y;
a = A(1);
b = A(2);
c = A(3);
% 计算平方误差
err = sum((a*x.^2 + b*x + c - y).^2);
% 绘制拟合曲线和原始数据点
xx = linspace(min(x), max(x), 100);
yy = a*xx.^2 + b*xx + c;
plot(x, y, 'o', xx, yy);
grid on;
```
阅读全文