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

📄 five.cpp

📁 这是我数值分析课程的实习题目的源代码(并附有文档),文档包括对问题进行了描述,并对结果进行分析,希望对大家有所帮助.
💻 CPP
字号:
//第五章 函数逼近 第十九题
#include<iostream.h>
#include<iomanip.h>
#include<stdio.h>
#include<math.h>
double funtion();
double funtion1(double x,double a,double b);
double funtion2(double x,double c,double d,double e);
double a,b;//一次逼近的系数a,b
double c,d,e;//二次逼近的系数c,d,e

main()
{
	//已知的数值
	int n=17;
	double xi[17]={0.040 ,0.041, 0.055 ,0.056 ,0.062, 0.071 ,
		0.074, 0.078, 0.082, 0.090 ,0.092 ,0.100, 0.105,
		0.120, 0.123,0.130 ,0.140};
    double	yi[17]={26.5, 28.1 ,25.2, 26.0 ,24.0, 25.0 ,26.4, 27.2,
		25.6 ,25.0, 26.8 ,24.8, 27.0 ,25.0, 27.3, 26.9, 26.2};
	//解正则方程得到一次逼近和二次逼近的系数
	funtion();
	//检验一次和二次逼近的正确性
	double yi1[17],yi2[17];
	for(int j=0;j<17;j++)
	{
		double x=0;
		x=xi[j];	
        yi1[j]=funtion1(x,a,b);
		yi2[j]=funtion2(x,c,d,e);
	}
	cout<<"xi       yi       一次逼近         误差          二次逼近       误差"<<endl;
	for(j=0;j<17;j++)
	{
		printf("%4.4f  %4.4f  %10.10f %10.10f  %10.10f  %10.10f",
			xi[j],yi[j],yi1[j],fabs(yi[j]-yi1[j]),yi2[j],
			fabs(yi[j]-yi2[j]));
		cout<<endl;
	}
	
	
	//funtion();
	return 0;


}
double funtion()
{
	//已知的数值
	int n=17;
	double xi[17]={0.040 ,0.041, 0.055 ,0.056 ,0.062, 0.071 ,
		0.074, 0.078, 0.082, 0.090 ,0.092 ,0.100, 0.105,
		0.120, 0.123,0.130 ,0.140};
    double	yi[17]={26.5, 28.1 ,25.2, 26.0 ,24.0, 25.0 ,26.4, 27.2,
		25.6 ,25.0, 26.8 ,24.8, 27.0 ,25.0, 27.3, 26.9, 26.2};
     //求一次逼近的系数a,b
	double Xi1=0,Xi2=0,Xi3=0,Xi4=0,Yi=0,XiYi=0,Xi2Yi=0;
	//其中Xi1为所有Xi的和,Xi2为Xi平方的和,Xi2Yi为Xi平方乘Yi的和
	//,其它类推
	 a=0,b=0;
	for(int k=0;k<n;k++)
	{
		Xi1+=xi[k];
		Xi2+=xi[k]*xi[k];
		Xi3+=xi[k]*xi[k]*xi[k];
		Xi4+=xi[k]*xi[k]*xi[k]*xi[k];
		Yi+=yi[k];
		XiYi+=xi[k]*yi[k];
		Xi2Yi+=xi[k]*xi[k]*yi[k];

	}
	b=(Yi*Xi1-n*XiYi)/(Xi1*Xi1-n*Xi2);
	a=(Yi-b*Xi1)/n;
	cout<<"一次逼近的系数a,b:"<<setprecision(12)
		<<"a="<<a<<"  "<<"b="<<b<<endl;
	//求二次逼近的系数c,d,e
    c=0,d=0,e=0;
	double q1=0,q2=0,q3=0,q4=0,q5=0,q6=0;
	q1=Xi1*Xi1-n*Xi2;
	q2=Xi2*Xi1-n*Xi3;
	q3=Xi1*Yi-n*XiYi;
	q4=Xi1*Xi2-n*Xi3;
	q5=Xi2*Xi2-n*Xi4;
	q6=Xi2*Yi-n*Xi2Yi;
	e=(q3*q4-q6*q1)/(q4*q2-q1*q5);
	d=(q3-q2*e)/q1;
	c=(Yi-Xi1*d-Xi2*e)/n;
	cout<<"二次逼近的系数c,d,e:"<<setprecision(12)
		<<"c="<<c<<"  "<<"d="<<d<<"  "<<"e="<<e<<endl;

	return 0;

}
double funtion1(double x,double a,double b)
{
	return (double)a+b*x;
}
double funtion2(double x,double c,double d,double e)
{
	return (double )c+d*x+e*x*x;
}

⌨️ 快捷键说明

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