已知一组实验数据: i 1 2 3 4 5 6 7 8 9 xi 1 3 4 5 6 7 8 9 10 yi 10 5 4 2 1 1 2 3 4 试用最小二乘法求它的二次多项式、三次多项式拟合曲线,并分别求出最低点的位置。要求:需要在MATLAB中绘制原始的9个点,二次多项式曲线,以及三次多项式曲线。
时间: 2024-01-02 17:04:35 浏览: 79
对数据进行曲线拟合的几种简单方式(最小二乘法?)
好的,我可以帮你解决这个问题。以下是使用MATLAB进行最小二乘法拟合二次多项式和三次多项式的代码:
```matlab
% 输入数据
i = [1 2 3 4 5 6 7 8 9];
xi = [1 3 4 5 6 7 8 9 10];
yi = [10 5 4 2 1 1 2 3 4];
% 绘制原始数据点
figure;
plot(xi, yi, 'o');
xlabel('x');
ylabel('y');
title('原始数据');
% 最小二乘法拟合二次多项式
A = [xi.^2; xi; ones(size(xi))]';
b = yi';
x = A \ b;
a = x(1);
b = x(2);
c = x(3);
x_min_2 = -b / (2*a);
y_min_2 = a*x_min_2^2 + b*x_min_2 + c;
xi_fit = linspace(1, 10, 100);
yi_fit_2 = a*xi_fit.^2 + b*xi_fit + c;
% 绘制二次多项式拟合曲线
hold on;
plot(xi_fit, yi_fit_2);
legend('原始数据', '二次多项式拟合');
fprintf('二次多项式拟合方程为 y = %.2fx^2 + %.2fx + %.2f\n', a, b, c);
fprintf('二次多项式拟合曲线最低点坐标为 (%.2f, %.2f)\n', x_min_2, y_min_2);
% 最小二乘法拟合三次多项式
A = [xi.^3; xi.^2; xi; ones(size(xi))]';
b = yi';
x = A \ b;
a = x(1);
b = x(2);
c = x(3);
d = x(4);
x_min_3 = (-b + sqrt(b^2 - 3*a*c)) / (3*a);
y_min_3 = a*x_min_3^3 + b*x_min_3^2 + c*x_min_3 + d;
yi_fit_3 = a*xi_fit.^3 + b*xi_fit.^2 + c*xi_fit + d;
% 绘制三次多项式拟合曲线
hold on;
plot(xi_fit, yi_fit_3);
legend('原始数据', '二次多项式拟合', '三次多项式拟合');
fprintf('三次多项式拟合方程为 y = %.2fx^3 + %.2fx^2 + %.2fx + %.2f\n', a, b, c, d);
fprintf('三次多项式拟合曲线最低点坐标为 (%.2f, %.2f)\n', x_min_3, y_min_3);
```
运行以上代码,MATLAB会绘制出原始的9个点,二次多项式曲线和三次多项式曲线,并输出拟合的方程和最低点坐标。
阅读全文