📄 数值分析2.cpp
字号:
#include<iostream.h>
long double factor(int m) //用于求N的阶乘
{
if(m==0)
return 1;
else
return m*factor(m-1);
}
void main()
{
long double x[100],y[100], f[100][100],g[100][100];//利用数组存储X,F(X)的值,存储差分
long double a,b,t[100]; //用于输入X,F(X),T的值的变量
int i,n,j;
long double xx,N[100]; //未知数,结果
cout<<"欢迎使用由姜荣鑫同学开发的程序\n" <<endl;
loop: cout<<"请输入参数个数:"<<"\n";
cin>>n;
cout<<"\n"<<"请输入参数:"<<"\n";
for( i=0;i<=n-1;i++) //利用循环控制输入X,F(X)
{
cin>>a;
x[i]=a;
cin>>b;
f[0][i]=b;
cout<<"x"<<i<<"="<<a<<"\n";
cout<<"f"<<"0"<<i<<"="<<b<<"\n";
}
cout<<"请输入未知数";
cin>>xx;
int k; //判断XX所处数值段
for(i=0;i<n;i++)
{
if(xx<x[i+1] && xx>x[i])
{
k=i;
}
}
cout<<"XX所处数值段:"<<k<<endl;
if(k<=(n-2)/2) //向前插值法
{
int m;
m=n;
for( i=1;i<=m+3;i++,m--) //计算差分表,并赋给F数组
{
for(int j=0;j<=m-2;j++)
{
f[i][j]=f[i-1][j+1]-f[i-1][j];
}
}
for( i=1;i+1<=n-1;i++) //计算各级运算下的T值
{
t[1]=(xx-x[0])/(x[1]-x[0]);
t[i+1]=t[i]*(t[1]-i);
}
for(i=1;i<=n-1;i++) //利用公式输出结果
{
N[0]=f[0][k];
N[i]=N[i-1]+(t[i]/factor(i))*f[i][k];
cout<<"\n"<<"f"<<i<<"("<<xx<<")"<<"="<<N[i];
if(N[i]-N[i-1]<0.0001 &&N[i]-N[i-1]>-0.00001 )
{
cout<<"\n"<<"最终结果为:"<<"f"<<"("<<xx<<")"<<"="<<N[i];
break;
}
}
char c; //控制多次计算开始
z:cout<<"是否继续计算:y/n..."<<endl;
cin>>c;
if(c!=110&&c!=121)
{
cout<<"请重新确定"<<endl;
goto z;
}
while(c!=110&&c==121)
{
goto loop;
} //控制多次计算结束
while(c==110)
{
cout<<"欢迎下次继续使用由姜荣鑫开发的程序"<<"\n"<<"再见!"<<endl;
break;
}
}
if(k>(n-2)/2) //向后插值法
{
for(i=0;i<=n-1;i++)
{
y[i]=x[n-1-i];
g[0][i]=f[0][n-1-i];
}
int p;
p=n;
for( i=1;i<=p+3;i++,p--) //计算差分表,并赋给G数组
{
for( j=0;j<=p-2;j++)
{
g[i][j]=g[i-1][j+1]-g[i-1][j];
cout<<g[i][j]<<endl;
}
}
for( i=1;i+1<=n-1;i++) //计算各级运算下的T值
{
t[1]=(xx-y[0])/(y[1]-y[0]);
t[i+1]=t[i]*(t[1]-i);
}
for(i=1;i<=n-1;i++) //利用公式输出结果
{
N[0]=g[0][n-2-k];
N[i]=N[i-1]+(t[i]/factor(i))*g[i][n-2-k];
cout<<"\n"<<"g"<<i<<"("<<xx<<")"<<"="<<N[i];
if(N[i]-N[i-1]<0.0001 &&N[i]-N[i-1]>-0.00001 )
{
cout<<"\n"<<"最终结果为:"<<"g"<<"("<<xx<<")"<<"="<<N[i];
break;
}
}
char c; //控制多次计算开始
w:cout<<"是否继续计算:y/n..."<<endl;
cin>>c;
if(c!=110&&c!=121)
{
cout<<"请重新确定"<<endl;
goto w;
}
while(c!=110&&c==121)
{
goto loop;
} //控制多次计算结束
while(c==110)
{
cout<<"欢迎下次继续使用由姜荣鑫开发的程序"<<"\n"<<"再见!"<<endl;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -