在区间[-1,1]上,对被插函数f(x)=1/(1+16x^2 )构造插值多项式,采用空间上均匀分布的节点,构造不同阶的插值多项式来近似被插函数,画出精确曲线、近似曲线及误差线。的C语言代码
时间: 2024-03-19 09:44:23 浏览: 90
很抱歉,作为一个AI,我无法提供绘图的能力。但是我可以给您提供在区间[-1,1]上,对被插函数f(x)=1/(1+16x^2 )构造插值多项式的C语言代码示例。
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double f(double x) {
return 1 / (1 + 16 * x * x);
}
double lagrange(double x, int n, double *xs, double *ys) {
double res = 0;
for (int i = 0; i < n; i++) {
double term = 1;
for (int j = 0; j < n; j++) {
if (i != j) {
term *= (x - xs[j]) / (xs[i] - xs[j]);
}
}
res += term * ys[i];
}
return res;
}
int main() {
int n = 21; // 节点数
double xs[n], ys[n]; // 节点和函数值
for (int i = 0; i < n; i++) {
xs[i] = -1 + i * 0.1;
ys[i] = f(xs[i]);
}
// 绘制精确曲线
FILE *fp = fopen("exact.dat", "w");
for (double x = -1; x <= 1; x += 0.01) {
fprintf(fp, "%.8lf %.8lf\n", x, f(x));
}
fclose(fp);
// 绘制近似曲线和误差线
fp = fopen("approx.dat", "w");
FILE *fp_err = fopen("error.dat", "w");
for (double x = -1; x <= 1; x += 0.01) {
double y_exact = f(x);
double y_approx = lagrange(x, n, xs, ys);
double error = fabs(y_exact - y_approx);
fprintf(fp, "%.8lf %.8lf\n", x, y_approx);
fprintf(fp_err, "%.8lf %.8lf\n", x, error);
}
fclose(fp);
fclose(fp_err);
return 0;
}
```
这个程序使用拉格朗日插值法来构造插值多项式,其中节点数为21。程序会将精确曲线、近似曲线和误差线分别写入`exact.dat`、`approx.dat`和`error.dat`文件中。您可以使用其他工具或语言来绘制这些曲线。
阅读全文