在区间-1:1上分别取n=10,n=20用两组等距节点对龙格函数做多项式插值并画出插值函数图像及龙格函数图像用Matlab写出完整代码
时间: 2024-09-23 07:04:45 浏览: 138
数值分析第二次上机.docx
在MATLAB中,你可以使用`polyfit`函数进行多项式插值,并结合`fplot`绘制插值函数和原函数图像。这里是一个简单的示例,展示如何在区间`[-1, 1]`上分别取`n=10`和`n=20`的等距节点对龙格函数(也就是正弦函数sin(x))进行插值:
```matlab
% 定义节点范围和步长
x = linspace(-1, 1, n); % 等距节点
% 龙格函数
function y = lagrange(x, x_data)
N = length(x_data);
y = zeros(size(x));
for i = 1:N
p = ones(N, 1);
for j = 1:N
if i ~= j
p(j) = (x - x_data(j));
end
end
y = y + p(i) * y_data(i);
end
end
% 龙格函数数据
y_data = sin(x);
% 对于n=10和n=20分别做插值
p10 = polyfit(x, y_data, n-1); % 根据n计算阶数
y_interp_10 = lagrange(x, x); % 使用龙格公式计算插值值
p20 = polyfit(x, y_data, n-1); % 同样计算阶数
y_interp_20 = lagrange(x, x); % 为n=20做插值
% 绘制原始函数、插值函数和误差图
figure;
subplot(2, 1, 1);
hold on;
plot(x, y_data, 'b', 'LineWidth', 2, 'DisplayName', 'Original Function (sin(x))');
plot(x, y_interp_10, 'r--', 'DisplayName', 'Interpolated (n=10)');
plot(x, y_interp_20, 'g:', 'DisplayName', 'Interpolated (n=20)');
legend('show');
title(['n = 10 and 20 Polynomial Interpolation of Sin(x)']);
subplot(2, 1, 2);
error = abs(y_data - y_interp_10);
plot(x, error, 'r--', 'DisplayName', 'Error (n=10)');
xlabel('x');
ylabel('Error');
hold off;
% 显示图形
grid on;
```
这会生成两个子图,第一个显示了10个和20个节点的插值结果,第二个展示了每个插值函数相对于原函数的误差。
阅读全文