目录

  • 第一章
    • ● 绪论
    • ● 计算误差
  • 数值积分
    • ● 引言
    • ● 梯形积分和辛普森积分
    • ● 反常积分
    • ● 高斯积分
    • ● 高维积分和数值微分
  • 非线性方程的数值解法
    • ● 引言
    • ● 二分法
    • ● 迭代法
    • ● 牛顿迭代法
    • ● 弦截法
    • ● 最优化方法
  • 线性方程组的解法
    • ● 高斯消去法
    • ● 高斯主元素消去法
    • ● LU分解法
    • ● 迭代法
    • ● 三对角矩阵的解法
  • 常微分方程的数值解法
    • ● 引言
    • ● 欧拉法
    • ● 龙格库塔法
    • ● 阿达姆斯法
    • ● 二阶常微分方程的边值问题
  • 偏微分方程的数值解法
    • ● 引言
    • ● 对流方程
    • ● 抛物线方程
    • ● 椭圆方程
  • 插值
    • ● 引言
    • ● 多项式插值
    • ● 拉格朗日插值
    • ● 牛顿均差插值
    • ● 三次样条插值
  • 蒙特卡罗方法
    • ● 引言
    • ● 蒙特卡罗方法的基本思想
    • ● 大数法则和中心极限定理
    • ● 蒙卡方法的基本步骤
    • ● 随机变量和随机数
  • 上机练习1
    • ● 上机内容
    • ● 谐振子与厄米多项式简介
    • ● 阶乘计算
    • ● 代码框架
    • ● 计算结果绘图
  • 上机练习2
    • ● 势阱和单摆周期的计算
    • ● 代码框架
    • ● 计算结果绘图
  • 上机练习3
    • ● 带空气阻力的抛体运动
    • ● 代码框架
    • ● 计算结果绘图
  • 上机练习4
    • ● 解线性方程组
    • ● 代码框架
  • 上机练习5
    • ● 解常微分方程
    • ● 代码框架
    • ● 计算结果绘图
  • 上机练习6
    • ● 热传导和亥姆霍兹方程
    • ● 代码框架
    • ● 计算结果绘图
  • 上机练习7
    • ● 插值和离散傅里叶变换
    • ● 离散傅里叶变换简介
    • ● 代码框架
    • ● 计算结果绘图
  • 上机练习8
    • ● 椭圆方程的MC解法
    • ● 代码框架
    • ● 计算结果绘图
代码框架

离散傅里叶变换

int main(){

    const double pi=acos(-1.0);

    const int N=40;     //设定N的大小

    double FKR[N], FKI[N];   //FK数组,注意有实部和虚部

    double L=20;     //设定x的范围[-L/2, L/2]

    double kappa = 2*pi/L;    //动量间隔单元


    FILE *fp = fopen("dft_N40_L20.txt","w");   //打开文件

    for(int k=-N/2; k<N/2; k++){         //外层计算FK的循环

        FKR[..] =0 ;     //注意:数组指标从0开始,正确设定其与k的关系

        FKI[..] =0 ;

        for(int l=-N/2; l<N/2; l++){

            double theta = (2*pi*l)/N;      //设定指数上的相位

            double xl= .... ;  //设定xl的值

            FKR[...] += ....;         //计算变换的实部

            FKI[...] -= ....;        //计算变换的虚部

        }

        FKR[...] /= kappa*N;    

        FKI[...] /= kappa*N;

       //注意:输出数据时,输出实际的p_k,方便与解析结果的比较。

        fprintf(fp,"%+.4f    %+e   %+e \n"..., FKR[k+N/2], FKI[k+N/2]);

    }

    fclose(fp);

    return 0;

}