用三角函数做最佳平方逼近(C++实现)
#include<iostream>
#include<cstdio>
#include<cmath>
#define pi 3.1415926535
using namespace std;
double lim(int num,double x[],double y[],double t,int aa){
int a[2];
int a1=num/2;
int a2=aa/2;
if(a1<(num/2))
a[0]=0;
else
a[0]=1;
if(a2<(aa/2))
a[1]=0;
else
a[1]=1;
if(a[1]==0){
double ak[a2+1];
double bk[a2];
for (int i=0;i<a2+1;i++){
double sum1=0;
for (int j=0;j<num;j++){
sum1=sum1+y[j]*cos(2*pi*j*i/(num));
}
ak[i]=sum1*(2/num);
}
for (int i=0;i<a2;i++){
double sum1=0;
for (int j=0;j<num;j++){
sum1=sum1+y[j]*sin(2*pi*j*(i+1)/(num));
}
bk[i]=sum1*(2/num);
}
double s1=ak[0]/2;
for(int i=1;i<a2+1;i++){
s1=s1+ak[i]*cos(i*aa);
}
double s2=0;
for(int i=0;i<a2;i++){
s2=s2+bk[i]*cos((i+1)*aa);
}
cout<<"输出系数a表格"<<"\n";
for (int i=0;i<a2+1;i++){
cout<<ak[i]<<" ";
}
cout<<"\n\n";
cout<<"输出系数b表格"<<"\n";
for (int i=0;i<a2;i++){
cout<<bk[i]<<" ";
}
cout<<"\n\n";
printf("输出计算的值:");
cout<<s1+s2;
}else{
double ak[a2+1];
double bk[a2-1];
for (int i=0;i<a2+1;i++){
double sum1=0;
for (int j=0;j<num;j++){
sum1=sum1+y[j]*cos(2*pi*j*i/(num));
}
ak[i]=sum1*(2/num);
}
for (int i=0;i<a2-1;i++){
double sum1=0;
for (int j=0;j<num;j++){
sum1=sum1+y[j]*sin(2*pi*j*(i+1)/(num));
}
bk[i]=sum1*(2/num);
}
double s1=ak[0]/2;
for(int i=1;i<a2+1;i++){
s1=s1+ak[i]*cos(i*aa);
}
double s2=0;
for(int i=0;i<a2-1;i++){
s2=s2+bk[i]*cos((i+1)*aa);
}
cout<<"输出系数a表格"<<"\n";
for (int i=0;i<a2+1;i++){
cout<<ak[i]<<" ";
}
cout<<"\n\n";
cout<<"输出系数b表格"<<"\n";
for (int i=0;i<a2-1;i++){
cout<<bk[i]<<" ";
}
cout<<"\n\n";
printf("输出计算的值:");
cout<<s1+s2;
}
}
int main(){
int num;
cout<<"输入节点的个数:";
scanf("%d",&num);
double x[num],y[num];
for (int i=0;i<num;i++){
cout<<"输入第"<<i+1<<"个x的值:";
scanf("%lf",&x[i]);
cout<<"输入第"<<i+1<<"个y的值:";
scanf("%lf",&y[i]);
}
cout<<"输入要计算的x值:";
double t;
cin>>t;
cout<<"输入做多少项的三角多项式拟合";
int aa;
cin>>aa;
double tt[num];
for(int i=0;i<num;i++){
tt[i]=((2*x[i]-(x[0]+x[num-1]))/(x[0]+x[num-1]))*pi;
}
lim(num,tt,y,t,aa);
return 0;
}