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

📄 xfour1.cpp

📁 这是C++数值算法(第二版)的源代码,其中包含了目前一些比较常用的数值计算的算法.
💻 CPP
字号:
#include <iostream>
#include <iomanip>
#include <cmath>
#include "nr.h"
using namespace std;

// Driver for routine four1

void prntft(Vec_I_DP &data)
{
        int n;

        int nn=data.size()/2;
        cout << setw(4) << "n" << setw(14) << "real(n)";
        cout << setw(14) << "imag.(n)" << setw(13) << "real(N-n)";
        cout << setw(14) << "imag.(N-n)" << endl;
        cout << fixed << setprecision(6);
        cout << "   0" << setw(15) << data[0] << setw(13) << data[1];
        cout << setw(13) << data[0] << setw(13) << data[1] << endl;
        for (n=2;n<=nn;n+=2) {
          cout << setw(4) << (n/2) << setw(15) << data[n];
          cout << setw(13) << data[n+1] << setw(13) << data[2*nn-n];
          cout << setw(13) << data[2*nn-n+1] << endl;
        }
        cout << "press return to continue ..." << endl;
        cin.get();
        return;
}

int main(void)
{
        const int NN=32, NN2=NN+NN;
        int i,isign;
        Vec_DP data(NN2),dcmp(NN2);

        cout << "h(t)=real-valued even-function" << endl;
        cout << "h(n)=h(N-n) and real?" << endl;
        for (i=0;i<NN2-1;i+=2) {
          data[i]=1.0/(SQR(DP(i-NN)/NN)+1.0);
          data[i+1]=0.0;
        }
        isign=1;
        NR::four1(data,isign);
        prntft(data);

        cout << "h(t)=imaginary-valued even-function" << endl;
        cout << "h(n)=h(N-n) and imaginary?" << endl;
        for (i=0;i<NN2-1;i+=2) {
          data[i+1]=1.0/(SQR(DP(i-NN)/NN)+1.0);
          data[i]=0.0;
        }
        isign=1;
        NR::four1(data,isign);
        prntft(data);

        cout << "h(t)=real-valued odd-function" << endl;
        cout << "h(n) = -h(N-n) and imaginary?" << endl;
        for (i=0;i<NN2-1;i+=2) {
          data[i]=(DP(i-NN)/NN)/(SQR(DP(i-NN)/NN)+1.0);
          data[i+1]=0.0;
        }
        data[0]=0.0;
        isign=1;
        NR::four1(data,isign);
        prntft(data);

        cout << "h(t)=imaginary-valued odd-function" << endl;
        cout << "h(n) = -h(N-n) and real?" << endl;
        for (i=0;i<NN2-1;i+=2) {
          data[i+1]=(DP(i-NN)/NN)/(SQR(DP(i-NN)/NN)+1.0);
          data[i]=0.0;
        }
        data[1]=0.0;
        isign=1;
        NR::four1(data,isign);
        prntft(data);
        // transform, inverse-transform test

        for (i=0;i<NN2-1;i+=2) {
          data[i]=1.0/(SQR(0.5*(i-NN)/NN)+1.0);
          dcmp[i]=data[i];
          data[i+1]=(0.25*(i-NN)/NN)*exp(-SQR(0.5*(i-NN)/NN));
          dcmp[i+1]=data[i+1];
        }

        isign=1;
        NR::four1(data,isign);
        isign = -1;
        NR::four1(data,isign);

        cout << setw(25) << "original data:";
        cout << setw(37) << "double fourier transform:" << endl;
        cout << endl << setw(4) << "k" << setw(16) << "real h(k)";
        cout << setw(13) << "imag h(k)" << setw(13) << "real h(k)";
        cout << setw(13) << "imag h(k)" << endl;
        cout << fixed << setprecision(6);
        for (i=0;i<NN-1;i+=2) {
          cout << setw(4) << (i+2)/2 << setw(15) << dcmp[i];
          cout << setw(13) << dcmp[i+1] << setw(13) << data[i]/NN;
          cout << setw(13) << data[i+1]/NN << endl;
        }
        return 0;
}

⌨️ 快捷键说明

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