matlab 多项式幂函数拟合
时间: 2023-08-23 07:08:19 浏览: 143
假设我们有一组数据 $(x_1,y_1),(x_2,y_2),\ldots,(x_n,y_n)$,我们想要用多项式幂函数 $f(x)=a_0+a_1x+a_2x^2+\cdots+a_mx^m$ 来拟合这些数据,其中 $m$ 是指定的多项式次数。
我们可以将多项式幂函数表示为矩阵形式:
$$
\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}
\begin{bmatrix}
a_0 \\
a_1 \\
\vdots \\
a_m \\
\end{bmatrix}
=
\begin{bmatrix}
y_1 \\
y_2 \\
\vdots \\
y_n \\
\end{bmatrix}
$$
我们可以用 Matlab 中的 \ 命令来求解上述线性方程组,即:
```
coeff = A \ y;
```
其中,A 是上述矩阵,y 是列向量 $(y_1,y_2,\ldots,y_n)^T$,coeff 是列向量 $(a_0,a_1,\ldots,a_m)^T$。
最后,我们可以用 polyval 函数来计算拟合出的多项式函数在某个点上的函数值,例如:
```
x = 0:0.1:10;
yfit = polyval(coeff, x);
```
完整的 Matlab 代码如下:
```
% 假设我们有一组数据 (x,y)
x = [0,1,2,3,4,5];
y = [0.2,0.4,0.8,1.2,1.6,2];
% 指定多项式次数
m = 2;
% 构造矩阵 A 和列向量 y
A = zeros(length(x), m+1);
for i = 1:length(x)
A(i,:) = x(i).^(0:m);
end
y = y';
% 求解线性方程组
coeff = A \ y;
% 计算拟合函数在 x 上的函数值
xval = 0:0.1:5;
yfit = polyval(coeff, xval);
% 绘制原始数据和拟合函数
plot(x, y, 'o', xval, yfit, '-')
legend('原始数据', '拟合函数')
```
阅读全文