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

📄 xrlft3.cpp

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

// Driver for routine rlft3

int compare(const string &str, Mat3D_I_DP &arr1, Mat3D_I_DP &arr2, const DP eps)
{
        const int IPRNT=20;
        int err=0,i1,i2,i3;
        DP a1,a2;

        int len1=arr1.dim1();
        int len2=arr1.dim2();
        int len3=arr1.dim3();
        cout << str << endl;
        cout << fixed << setprecision(6);
        for (i1=0;i1<len1;i1++)
          for (i2=0;i2<len2;i2++)
            for (i3=0;i3<len3;i3++) {
              a1=arr1[i1][i2][i3];
              a2=arr2[i1][i2][i3];
              if ((a2 == 0.0 && fabs(a1-a2) > eps)
                || (fabs((a1-a2)/a2) > eps)) {
                if (++err <= IPRNT)
                  cout << setw(3) << i1 << setw(3) << i2;
                cout << setw(3) << i3;
                cout << setw(13) << a1 << setw(13) << a2 << endl;
              }
            }
        return err;
}

int main(void)
{
        const int NX=32,NY=8,NZ=16;
        const DP EPS=1.e4*numeric_limits<DP>::epsilon();
        int err,i,j,k,nn1=NX,nn2=NY,nn3=NZ,idum=(-3);
        DP fnorm;
        Mat_DP speq1(nn1,nn2<<1);
        Mat3D_DP data1(nn1,nn2,nn3),data2(nn1,nn2,nn3);

        fnorm=DP(nn1)*DP(nn2)*DP(nn3)/2.0;
        for (i=0;i<nn1;i++)
          for (j=0;j<nn2;j++)
            for (k=0;k<nn3;k++)
              data2[i][j][k]=fnorm*(data1[i][j][k]=2*NR::ran1(idum)-1);
        NR::rlft3(data1,speq1,1);
        // here would be any processing in Fourier space
        NR::rlft3(data1,speq1,-1);
        err=compare("data",data1,data2,EPS);
        cout << scientific << setprecision(2);
        if (err != 0) {
          cout << "Comparison error at tolerance " << setw(10) << EPS << endl;
          cout << "Total number of errors is " << err << endl;
        } else {
          cout << "Data compares OK to tolerance " << setw(10) << EPS << endl;
        }
        return (err > 0 ? 1 : 0);
}

⌨️ 快捷键说明

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