??
字號:
#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 + -