⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lab02.cpp

📁 Lagrange 插值法;数值计算这门课的第二个实验
💻 CPP
字号:
//#include<stdio.h>
#include<iostream>
//#include<cstdlib>
#include<cmath>
///#include<string>
//#include<ctime>
using namespace std;
#define pi 3.1415926
//#define float double  //----这个当N>90时,浮点行运算溢出,无法得到结果。所以将浮点转成双精度。



float Fun_x(float x){
	float y;
	y=1/(1+x*x);
	return y;
}//F(x)--原函数


float Lx_1(float x,int N)
{
	float *x1=new float[N+1],*y1=new float[N+1],LX1=0.0,tmp;
	float n;
	int i,j;
	for(i=0;i<=N;i++)
	{
		n=N;
		i=float (i);
		x1[i]=-5+10*i/n;
		i=int (i);
		y1[i]=Fun_x(x1[i]);
	}
	for(i=0;i<=N;i++)
	{
		tmp=1.0;
		for(j=0;j<i;j++)
			tmp=tmp*(x-x1[j])/(x1[i]-x1[j]);

		for(j=i+1;j<=N;j++)
				tmp=tmp*(x-x1[j])/(x1[i]-x1[j]);
		LX1=LX1+tmp*y1[i];
	}
	return LX1;
}//计算第一种插值算法求得的LX;

float Lx_2(float x,int N)
{
	float n;
	int i,j;
	float *x2=new float[N+1],*y2=new float[N+1],LX2=0.0,tmp,k;
	for(i=0;i<=N;i++)
	{
		i=float (i);
		n=N;
		k=(2*i+1)/(2*n+2);
		i=int (i);
		x2[i]=(-5)*cos(k*pi);
		y2[i]=Fun_x(x2[i]);
	}
	for(i=0;i<=N;i++)
	{
		tmp=1.0;
		for(j=0;j<i;j++)
			tmp=tmp*(x-x2[j])/(x2[i]-x2[j]);
		for(j=i+1;j<=N;j++)
			tmp=tmp*(x-x2[j])/(x2[i]-x2[j]);
		LX2=LX2+tmp*y2[i];
	}
	return LX2;
}//计算第二种插值算法求得的LX;


void main(){
	float X[101],error1,error2,temp1,temp2;//X[]用于存放测试误差的数yi;error1/2分别是LX1和LX2的最大误差。
	int i,j,N ,n[4]={5,10,20,40};
	FILE *fs;
	fs=fopen("D:\\lab02.txt","w");
	for(j=0;j<=3;j++)
	{
		N=n[j];
		error1=0.0,error2=0.0,temp1=0.0,temp2=0.0;
		for(i=70;i<=100;i++)
		{
			i=float (i);//用于计算X[i],故将类型转换。
			X[i]=-5+0.1*i;
			i=int (i);
			temp1=fabs(Fun_x(X[i])-Lx_1(X[i],N));
			if(error1<temp1)error1=temp1;//求最大的误差
			temp2=fabs(Fun_x(X[i])-Lx_2(X[i],N));
			if(error2<temp2)error2=temp2;//同上
		}
		cout<<"N="<<N<<endl;
		cout<<"Max Error of grid (1) : "<<error1<<endl;
		cout<<"Max Error of grid (2) : "<<error2<<endl;//输出
		fprintf(fs,"N= %d \n",N);
		fprintf(fs,"Max Error of grid (1) : %2.8f\n",error1);
		fprintf(fs,"Max Error of grid (2) : %2.8f\n",error2);//将结果输入到文档
	}

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -