分享

傅里叶级数逼近的源码(完整程序)

 imelee 2018-06-17

问题

根据函数f(x)在区间[0,2π]上的2n+1个等距点

1.png

处的函数值fi=f(xi),求傅里叶(Fourier)级数

2.png

的前2n+1个系数ak=(k=0,1,…,n)和bk=(k=0,1,…,n)的近似值。

算法分析

设函数f(x)在区间[0,2π]上的2n+1个等距点

3.png

处的函数值为fi=f(xi),计算傅里叶(Fourier)级数

4.png

的前2n+1个系数

ak(k=0,1,…,n)和bk(k=0,1,…,n)

近似值得方法如下。

对于k=0,1,…,n进行如下运算:

(1)按下列迭代公式计算u1与u2

5.png

其中1.png。计算coskθ用如下剃推公式:

6.png

(2)按下列公式计算ak与bk

7.png

  

三、实例

根据函数f(x)=x2在区间[0,2π]上的101个等距点

8.png

处的函数值fi=f(xi),求傅里叶级数的系数

9.png

其中n=50。

四、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdio.h"
#include "math.h"
/*形参与函数类型    参数意义
double  f[2n+1] 存放区间[0,2π]内的2n+1个等距点处的函数值
int  n  等距点数为2n+1
double  a[n+1]  返回傅里叶级数中的系数ak(k=0,1,…,n)
double  b[n+1]  返回傅里叶级数中的系数bk(k=0,1,…,n)
void  four()  过程
*/
void four(double f[],int n,double a[],double b[])
{
    int i,j ;
    double t,c,s,c1,s1,u1,u2,u0 ;
    t=6.283185306/(2.0*n+1.0);
    c=cos(t);
    s=sin(t);
    t=2.0/(2.0*n+1.0);
    c1=1.0 ;
    s1=0.0 ;
    for(i=0;i<=n;i++)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多