用matlab写代码:考虑已知函数y=sin(x) (1)取5个等距节点形成列向量x0,试估计出在节点x0(i),i=1,2,…,5上的函数值y0(i)组成的列向量y。 (2)找到如下4次多项式P(x)=a1*x^4+a2*x^3+a3*x^2+a4*x+a5作为(x0(i),y0(i)),i =1,2,…,5的插值函数,即先求出P(x)函数再进行插值,并绘制数据点及插值函数的曲线(注意分别使用两种方法:通过求解线性方程组和lagrange插值法)
时间: 2024-04-05 09:31:54 浏览: 25
这里是用 MATLAB 实现的代码:
% 定义等距节点个数
n = 5;
% 生成等距节点
x0 = linspace(0, pi, n)';
y0 = sin(x0);
% 求解线性方程组
A = [x0.^4, x0.^3, x0.^2, x0, ones(n,1)];
a = A \ y0;
% 计算插值函数
x = linspace(0, pi, 100)';
P = a(1)*x.^4 + a(2)*x.^3 + a(3)*x.^2 + a(4)*x + a(5);
% 使用Lagrange插值法
L = zeros(n, length(x));
for i=1:n
L(i,:) = prod(repmat(x, n, 1) - repmat(x0, 1, length(x)) + diag(eps)*eye(n), 1) ./ (x(i)-x0) / prod(x(i)-x0([1:i-1, i+1:n]));
end
P_lagrange = sum(repmat(y0, 1, length(x)) .* L, 1);
% 绘制数据点及插值函数的曲线
figure;
plot(x, sin(x), 'k-', 'LineWidth', 1.5);
hold on;
plot(x, P, 'r--', 'LineWidth', 1.5);
plot(x, P_lagrange, 'b-.', 'LineWidth', 1.5);
plot(x0, y0, 'ko', 'MarkerSize', 10, 'LineWidth', 1.5);
xlabel('x');
ylabel('y');
legend('原函数', '线性方程组插值函数', 'Lagrange插值函数', '数据点');
grid on;