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

📄 a.cpp

📁 函数逼近与函数拟合实验
💻 CPP
字号:
#include<iostream>
#include<math.h>
using namespace std;
//定义数据
double x[15]={1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0};
double y[15]={33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50,267.55,280.50,296.65,301.65,310.40,318.15,325.15};
double a[3],d[3],G[3][3];
double epi=1e-6;
void Gauss(double A[3][3],double b[3],double x[3]);//高斯消去法解方程组
void solve_a();
int main()
{
	solve_a();
	system("pause");
	return 0;
}

void Gauss(double A[3][3],double b[3],double x[3])
{
	bool cover[3];
	memset(cover,0, sizeof(cover));
	for(int i=0;i<3;i++){
		int cj=-1;
		for(int j=0;j<3;j++)
			if(!cover[j])
				if((cj==-1)||(abs(A[j][i])>abs(A[cj][i])))
					cj=j;
		cover[cj]=true;//用于排除已经求出系数的行,最终每行只能有一个元素,整理之后为对角阵
		for(int j=0;j<3;j++)
			if(j!=cj){
				double a=-A[j][i]/A[cj][i];
				for(int k=0;k<3;k++)
					A[j][k]+=a*A[cj][k];
				d[j]+=a*d[cj];			
			}
	}
	for(int i=0;i<3;i++){
		int cj=-1;
		for(int j=0;j<3;j++)
			if(abs(A[i][j])>epi)
				cj=j;
		x[cj]=d[i]/A[i][cj];
	}
	cout<<"y="<<x[0]<<"+"<<x[1]<<"x"<<x[2]<<"x^2"<<endl;
}

void solve_a()
{
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
		{
			G[i][j]=0.0;
			for(int k=0;k<15;k++)
				G[i][j]+=pow(x[k],i+j);
		}
	for(int i=0;i<3;i++)
		for(int j=0;j<15;j++)
			d[i]+=pow(x[j],i)*y[j];
	Gauss(G,d,a);
}

⌨️ 快捷键说明

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