用matlab实现1、利用函数f(x)=sin(x)*(x^2-3x+5)*e^(-5x)在[0,1]生成等距样本数据点 ,至少取10个数据。利用数据作最小二乘拟合,分别取n=1,3,5,7次多项式拟合。 要求:输出结果,分别在同一个坐标系画出拟合多项式Pn(x)和f(x)的图像,并画出相应绝对误差图|P(x)-f(x)| ,并根据结果作适当分析
时间: 2024-03-26 07:39:01 浏览: 142
好的,下面是用Matlab实现的代码:
```matlab
%% 生成等距样本数据点
x = linspace(0, 1, 10)';
y = sin(x) .* (x.^2 - 3*x + 5) .* exp(-5*x);
%% 最小二乘拟合
% n=1次多项式拟合
p1 = polyfit(x, y, 1);
pn1 = polyval(p1, x);
error1 = abs(pn1 - y);
% n=3次多项式拟合
p3 = polyfit(x, y, 3);
pn3 = polyval(p3, x);
error3 = abs(pn3 - y);
% n=5次多项式拟合
p5 = polyfit(x, y, 5);
pn5 = polyval(p5, x);
error5 = abs(pn5 - y);
% n=7次多项式拟合
p7 = polyfit(x, y, 7);
pn7 = polyval(p7, x);
error7 = abs(pn7 - y);
%% 绘图
figure
plot(x, y, 'bo', 'DisplayName', 'data');
hold on
plot(x, pn1, 'r-', 'DisplayName', 'n=1');
plot(x, pn3, 'g-', 'DisplayName', 'n=3');
plot(x, pn5, 'm-', 'DisplayName', 'n=5');
plot(x, pn7, 'c-', 'DisplayName', 'n=7');
plot(x, sin(x) .* (x.^2 - 3*x + 5) .* exp(-5*x), 'k--', 'DisplayName', 'real');
xlabel('x');
ylabel('y');
title('Fitting Result');
legend
figure
plot(x, error1, 'r-', 'DisplayName', 'n=1');
hold on
plot(x, error3, 'g-', 'DisplayName', 'n=3');
plot(x, error5, 'm-', 'DisplayName', 'n=5');
plot(x, error7, 'c-', 'DisplayName', 'n=7');
xlabel('x');
ylabel('|P(x)-f(x)|');
title('Absolute Error');
legend
```
运行上述代码后,可以得到拟合图像和绝对误差图像,可以根据结果进行适当分析。对于不同的n值,我们可以比较拟合函数和实际函数的差异,以及拟合函数的精度和稳定性。通常来说,拟合函数的次数越高,拟合函数的复杂度越高,但是也容易出现过拟合现象。因此,在实际应用中,需要根据实际情况选择合适的拟合函数次数。
阅读全文