📄 cosft.cpp
字号:
void cosft(double y[],int &n,int &isign)
{
int m,j,temp,i;
double theta,wr,wi,wpr,wpi,wtemp,sum,y1,y2,even,odd;
double sum0,sume,enf0;
temp=1;
theta = 3.14159265358979 / n;
wr = 1.0;
wi = 0.0;
wpr = -2.0 * sin(0.5 * theta)*sin(0.5 * theta);
wpi = sin(theta);
sum=y[1];
m = n / 2;
for (j = 1; j<=m-1; j++)
{
wtemp = wr;
wr = wr * wpr - wi * wpi + wr;
wi = wi * wpr + wtemp * wpi + wi;
y1 = 0.5 * (y[j + 1] + y[n - j + 1]);
y2 = (y[j + 1] - y[n - j + 1]);
y[j + 1] =y1 - wi * y2;
y[n - j + 1] =y1 + wi * y2;
sum=sum+wr*y2;
}
realft(y, m, temp);
y[2]=sum;
for (j = 4; j<=n; j+=2)
{
sum = sum + y[j];
y[j] = sum;
}
if (isign == -1)
{
even = y[1];
odd = y[2];
for (i = 3; i<=n - 1; i+=2)
{
even = even + y[i];
odd = odd + y[i + 1];
}
enf0 = 2.0 * (even - odd);
sum0 = y[1] - enf0;
sume = (2.0 * odd / n) - sum0;
y[1] = 0.5 * enf0;
y[2] = y[2] - sume;
for (i = 3; i<=n - 1; i+=2)
{
y[i] = y[i] - sum0;
y[i + 1] = y[i + 1] - sume;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -