📄 five.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 + -