📄 ff.cpp
字号:
#include <stdio.h>
#include <math.h>
#define N 3906 //采样周期
#define NNN 78
#define M 200 //存储数据总数
#define PI 3.14159
#define NN 1000 //余弦表个数
double cos_tab[NN]; //余弦表
double arccos(double a);
void main()
{
int n;
double a1,a2,a3,b1,a,f1,f3;
double x[N],y[N],u[N];
f1=f3=0;
for(n=0;n<N;n++)
{
u[n]=0.5+cos(2*PI*n/78)+0.5*cos(3*2*n*PI/78)+0.11*sin(2*2*n*PI/78);
}
for(n=0;n<M;n++) //构造x,y
{
x[n]=2*u[n+1];
y[n]=u[n]+u[n+2];
}
for(n=0;n<NNN;n++) //最小二乘法
{
a1=a2=a3=b1=0;
a1=a1+x[n];
a2=a2+y[n];
a3=a3+x[n]*y[n];
b1=b1+x[n]*x[n];
}
//for(i=0;i<=10;i++)
{
a=(NNN*a3-a1*a2)/(NNN*b1-a1*a1);
//a=i*0.1;
f1=acos(a);
f3=PI/2-a-1/6*a*a*a-3/40*a*a*a*a*a-5/112*a*a*a*a*a*a*a-245/8064*a*a*a*a*a*a*a*a*a-63/2816*a*a*a*a*a*a*a*a*a*a*a;
printf("%f,%f,%f,%f\n",a,f1,arccos(a),f3);
}
}
/////////////////////////////////////////
double arccos(double l) //混合法,但在算arccos增量时没法实现
{
int i,index;
double y2;
y2=0;
for(i=0;i<NN;i++)
{
cos_tab[i]=cos(PI*i/NN);
}
for(index=0;index<NN;index++)
{
if ((l<=cos_tab[index])&&(l>=cos_tab[index+1]))
{
y2=(index+(l-cos_tab[index])/(cos_tab[index+1]-cos_tab[index]))*(PI/NN);
}
}
return(y2);
}
//////////////////////递归计算n!的函数rfact()
//long rfact(int n)
//{
// if (n<0)
// {
// printf("Negative argument to fact!\n");
//exit(-1);
// }
//else if(n<=1)
// return(1);
// else
// return(n*rfact(n-1)); /*自己调用自己*/
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -