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

📄 1.cpp

📁 几个数值分析算法的实现 包括三次样条插值、最小二乘法、高斯插值、adam、龙贝格算法等
💻 CPP
字号:
#include<iostream.h>
#include<math.h>
#include<string.h>
void gaosi(double a[2][2],double *b,int n)
{
	int i,j,k=0;
	double *p,*q,temp,*pb,*qb;
	while(k<n-1)
	{
		q=p=a[k];
		qb=pb=&b[k];
		for(i=k+1;i<n;i++)
			if(fabs(a[i][k])>fabs(*(p+k)))
			{
				p=a[i];
				pb=&b[i];
			}//找主元
		if(p!=a[k])
		{
			for(i=k;i<n;i++)
			{
				temp=*(q+i);
				*(q+i)=*(p+i);
				*(p+i)=temp;
			}
			temp=*qb;
			*qb=*pb;
			*pb=temp;
		}//换行
		for(i=k+1;i<n;i++)
		{
			a[i][k]=a[i][k]/a[k][k];
			for(j=k+1;j<n;j++)
				a[i][j]=a[i][j]-a[i][k]*a[k][j];
			b[i]=b[i]-a[i][k]*b[k];
		}//消元
		k++;
	}
    b[n-1]=b[n-1]/a[n-1][n-1];
	for(i=n-2;i>=0;i--)
	{
		temp=0;
		for(j=i+1;j<n;j++)
			temp+=a[i][j]*b[j];
		b[i]=(b[i]-temp)/a[i][i];
	}//回代求解
}
void main()
{
	int m,i,j;
	double *x,*w,*y,a[2][2],b[2];
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));//置零
	cout<<"输入离散点的个数";
	cin>>m;
    x=new double[m];
	y=new double[m];
	w=new double[m];
	cout<<"按提示输入每点x y 及权值w"<<endl;
	for(i=0;i<m;i++)
	{
		cout<<"输入点"<<i<<"  ";
		cin>>x[i]>>y[i]>>w[i];
	}
	for(i=0;i<m;i++)
	{
		a[0][0]+=w[i];
		a[0][1]+=w[i]*x[i];
		a[1][1]+=w[i]*x[i]*x[i];
		b[0]+=w[i]*y[i];
		b[1]+=w[i]*y[i]*x[i];
	}
	a[1][0]=a[0][1];
	for(i=0;i<2;i++){
		for(j=0;j<2;j++)
			cout<<a[i][j]<<"  ";
		cout<<b[i]<<endl;
	}//构造方程并输出
	gaosi(a,b,2);
	cout<<"拟合曲线S(x)="<<b[0]<<'+'<<b[1]<<'x'<<endl;
}


	


⌨️ 快捷键说明

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