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

📄

📁 面向对象的差值法算法
💻
字号:
#include<iostream.h>
class chazhi{
	int s;
	double x[20],y[20];
public:
	chazhi(){};
	void set();
	void doit(int n,double X);
	void wucha(double X);
};
void chazhi::set(){
	 /*s=a;
	int i=0;
    cout<<"请设置X值:"<<endl;
	while(i<s){
		cin>>x[i];
	    i++;
	}
    int j=0;
    cout<<"请设置Y值:"<<endl;
	while(j<s){
		cin>>y[j];
	    j++;
	}*/
	//以上部分为另一种SET方法
   s=0;
	cout<<"请设置X值:"<<endl;
	char ch=' ';
	while(ch==' '){
		cin>>x[s];
		cin.get(ch);
	    s++;
	}
    cout<<"请设置Y值:"<<endl;
	int i=0;
	ch=' ';
    while(ch==' '){
		cin>>y[i];
		cin.get(ch);
	    i++;
	}
}
void chazhi::doit(int n,double X){
	double p[20],q[20];
	int i=0;
	double A[20];
	double a=1,y1=0;
	while(X>x[i]){i++;}
	if((i-n/2)<0){
		for(int j=1;j<=n;j++){
			p[j]=x[j-1];
			q[j]=y[j-1];
		}
	}
	else if((i+n/2)>s){
		int k=s-n;
		for(int j=1;j<=n;j++){
			p[j]=x[k];
			q[j]=y[k];
			k++;
			
		}
	}
	else for(int j=1;j<=n;j++){
	        p[j]=x[i-n/2+j-1];
			q[j]=y[i-n/2+j-1];
		}
	for(int m=1;m<=n;m++){
	     for(int j=1;j<=n;j++){
			 if(m==j)continue;
			 a=a*(X-p[j])/(p[m]-p[j]);
		 }
		 A[m]=a;
		 a=1;
	}
	for(int k=1;k<=n;k++){y1=y1+A[k]*q[k];}
	cout<<"在N="<<n<<"的时候,利用插值法求值:F("<<X<<")="<<y1<<endl;
}
void chazhi::wucha(double X){
	int i=0;
	double z1,z2;
	double y1,cha;
	while(X>x[i]){i++;}
	z1=y[i-1]+(y[i]-y[i-1])*(X-x[i-1])/(x[i]-x[i-1]);
	z2=y[i-1]+(y[i+1]-y[i-1])*(X-x[i-1])/(x[i+1]-x[i-1]);
	cha=(X-x[i])*(z1-z2)/(x[i]-x[i+1]);
	y1=cha+z1;
	cout<<"修正值="<<y1<<'\t'<<"误差值="<<cha<<endl;
}
void main(){
	chazhi A;
	A.set();
	int j=15;
	while(j<100){
	A.doit(2,j);
	j+=10;
	}//作业一,已知T求P。(线插法)
    chazhi B;
	B.set();
	 j=0;
	while(j<100){
	B.doit(3,j);
	j+=10;
	}//作业一,已知T求P。(三点法)
    chazhi C;
	C.doit(3,1.27);C.doit(3,1.80);C.doit(3,2.13);C.doit(3,9.85);C.doit(3,38.55);C.doit(3,72.80);
    C.doit(3,90.94);//作业一,已知P求T。(三点法)注意:数组X与数组Y互换。
    chazhi D;
	j=2;
	while(j<6){
	D.doit(j,13);D.doit(j,23);D.doit(j,38);D.doit(j,43);
    D.doit(j,48);D.doit(j,53);D.doit(j,63);D.doit(j,73);
	j++;
	}//作业二,热容的计算
	D.wucha(13);D.wucha(23);D.wucha(38);D.wucha(43);
    D.wucha(48);D.wucha(53);D.wucha(63);D.wucha(73);
	//作业二,热容的计算中N=2时误差的计算与数值的修正
}
/*作业一
0 10 20 30 40 50 60 70 80 90/数组X
0.61 1.23 2.34 4.24 7.38 12.35 19.92 31.16 47.35 70.1/数组Y
作业二
0 5 10 15 20 25 30 30 40 45 50 55 60 65 70 75/数组X
4.2177 4.7022 4.1922 4.1888 4.1819 4.1796 4.1786 4.1782 4.1786 4.1795 4.1807 4.1824 4.1844 4.1868 4.1896 4.1928/数组Y
*/

⌨️ 快捷键说明

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