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

📄 数值分析2.cpp

📁 牛顿插值法求线性方程组 自己做的 有点简单呵呵
💻 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 + -