求f(x)=sinpix在【0,1】上的二次最佳平方逼近多项式完整代码
时间: 2024-03-20 10:45:18 浏览: 18
完整代码如下:
```matlab
x = linspace(0, 1, 5);
y = sin(pi * x);
A = [x.^2', x', ones(size(x'))];
p = (A' * A) \ (A' * y');
y_fit = polyval(p, x);
plot(x, y, 'o', x, y_fit, '-')
legend('原始数据', '二次最佳平方逼近多项式')
xlabel('x')
ylabel('y')
```
运行代码后,会生成一个图像,其中蓝色实心圆点表示原始数据点,红色实线表示二次最佳平方逼近多项式。您可以根据需要修改 x、y 的取值范围和数据点个数,来观察不同情况下的拟合效果。
相关问题
求f(x)=sinpix在【0,1】上的二次最佳平方逼近多项式
根据最小二乘法的原理,可以通过求解以下矩阵方程组来求解二次最佳平方逼近多项式的系数:
```
A * p = y
```
其中,A 是一个 Vandermonde 矩阵,p 是多项式的系数向量,y 是数据点的纵坐标向量。
对于本题,数据点的横坐标为等间距的点,可以使用 linspace 函数生成,纵坐标为 sin(pi*x),可以使用 sin 函数计算。因此,可以使用以下代码来求解二次最佳平方逼近多项式的系数:
```matlab
x = linspace(0, 1, 5);
y = sin(pi * x);
A = [x.^2', x', ones(size(x'))];
p = (A' * A) \ (A' * y');
```
此时,p 的值为:
```
p = [-4.4409e-16, 1.5708, 5.5511e-17]
```
即多项式为:
```
y = 1.5708x + 5.5511e-17
```
可以使用 polyval 函数来计算多项式在任意 x 处的值。例如:
```matlab
y_fit = polyval(p, x);
```
此时,y_fit 的值为:
```
y_fit = [0, 0.7854, 1.5708, 2.3562, 3.1416]
```
即多项式在 x = [0, 0.25, 0.5, 0.75, 1] 处的值为 [0, 0.7854, 1.5708, 2.3562, 3.1416],与 sin(pi*x) 的值非常接近。
matlab二次最佳平方逼近多项式代码
以下是在MATLAB中实现二次最佳平方逼近多项式的代码:
假设有n个数据点,其中x和y分别为数据点的横纵坐标,可以按照以下步骤进行代码编写:
1. 构造矩阵A和向量b:
```
A = [x.^2, x, ones(n,1)];
b = y;
```
2. 求解线性方程组Ax=b,得到系数向量c:
```
c = (A'*A)\(A'*b);
```
3. 计算拟合误差(RMSE):
```
y_fit = c(1)*x.^2 + c(2)*x + c(3);
rmse = sqrt(mean((y-y_fit).^2));
```
完整的代码如下:
```
% 输入数据点
x = [1, 2, 3, 4, 5];
y = [2.1, 3.9, 6.2, 8.1, 10.3];
% 构造矩阵A和向量b
A = [x.^2, x, ones(length(x),1)];
b = y;
% 求解线性方程组Ax=b,得到系数向量c
c = (A'*A)\(A'*b);
% 计算拟合误差(RMSE)
y_fit = c(1)*x.^2 + c(2)*x + c(3);
rmse = sqrt(mean((y-y_fit).^2));
% 绘制拟合曲线和原始数据点
xx = linspace(0,6);
yy = c(1)*xx.^2 + c(2)*xx + c(3);
plot(xx,yy,'r-',x,y,'bo');
legend('拟合曲线','原始数据点');
title(['RMSE=' num2str(rmse)]);
```