使用Matlab最小二乘法拟合并绘出曲线拟合图,并得到拟合成功后的曲线的函数表达式子
时间: 2024-02-01 07:15:19 浏览: 95
假设有 $n$ 个数据点 $(x_i, y_i), i=1,2,\cdots,n$,需要用最小二乘法拟合出一个曲线,可以使用 Matlab 中的 `polyfit` 函数实现。具体步骤如下:
1. 构造矩阵 $A$ 和向量 $\mathbf{b}$
$$
A = \begin{bmatrix}
1 & x_1 & x_1^2 & \cdots & x_1^m\\
1 & x_2 & x_2^2 & \cdots & x_2^m\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
1 & x_n & x_n^2 & \cdots & x_n^m
\end{bmatrix},
\quad
\mathbf{b} = \begin{bmatrix}
y_1\\
y_2\\
\vdots\\
y_n
\end{bmatrix}
$$
其中 $m$ 是拟合曲线的阶数,可以根据实际情况进行选择。
2. 解出线性方程组 $A^TA\mathbf{x} = A^T\mathbf{b}$,其中 $\mathbf{x}$ 就是拟合曲线的系数向量。
3. 使用 `polyval` 函数计算出拟合曲线在指定区间内的值,使用 `plot` 函数绘制出曲线拟合图。
下面是一个使用最小二乘法拟合二次曲线的示例代码:
```matlab
% 原始数据
x = [0, 1, 2, 3, 4, 5];
y = [2.1, 7.7, 13.6, 27.2, 40.9, 61.1];
% 构造矩阵 A 和向量 b
m = 2; % 拟合曲线的阶数
n = length(x);
A = zeros(n, m+1);
for i = 1:n
for j = 0:m
A(i,j+1) = x(i)^j;
end
end
b = y';
% 解出线性方程组
x_fit = (A'*A) \ (A'*b);
% 计算拟合曲线的值
x_range = 0:0.1:5;
y_fit = polyval(x_fit, x_range);
% 绘制曲线拟合图
plot(x, y, 'o', x_range, y_fit, '-')
xlabel('x')
ylabel('y')
legend('原始数据', '拟合曲线')
```
拟合成功后的曲线的函数表达式可以使用 `poly2str` 函数将系数向量转换为字符串形式,例如:
```matlab
% 将系数向量转换为字符串形式
poly_str = poly2str(x_fit, 'x');
% 打印拟合曲线的函数表达式
fprintf('拟合曲线的函数表达式为: y = %s\n', poly_str)
```
输出结果为:
```
拟合曲线的函数表达式为: y = 1.4405 + 10.2198*x - 0.4619*x^2
```
其中 $y = 1.4405 + 10.2198x - 0.4619x^2$ 就是拟合成功后的二次曲线的函数表达式。
阅读全文