傅立叶逼近 matlab,傅里叶逼近.doc

傅里叶逼近

《MATLAB程序设计实践》

科学计算的算法及其举例应用:

(1)、傅里叶逼近:

1.用法说明:对于连续周期函数,只要计算出其傅里叶展开级数即可,在Matlab中编程实现的连续函数的傅里叶逼近法函数为:FZZ。

功能:用傅里叶级数逼近已知的连续周期函数。

调用格式:[A0,A,B]=FZZ(func,T,n).

其中,func为已知函数;

T为已知函数的周期;

N为展开级数的项数;

A0为展开后的常数项;

A为展开后的余弦项系数;

B为展开后的正弦项系数。

2.源程序代码:

function [A0,A,B]=FZZ(func,T,n)

syms t;

func=subs(sym(func),sym('x'),sym('t'));

A0=int(sym(func),t,-T/2,T/2)/T;

for(k=1:n)

A(k)=int(func*cos(2*pi*k*t/T),t,-T/2,T/2)*2/T;

A(k)=vpa(A(k),4);

B(k)= int(func*sin(2*pi*k*t/T),t,-T/2,T/2)*2/T;

B(k)= vpa(B(k),4);

end

3.举例说明:傅里叶逼近应用实例。用傅里叶级数(取5项)逼近函数x,输出系数值。

>> [A0,A,B]=FZZ('x',2*pi,5)

A0 =

0

A =

[ 0., 0., 0., 0., 0.]

B =

[ 2., -1., .6667, -.5000, .4000]

3.流程图(1)

二、科学计算和工程实际问题:

(1)设单自由度阻尼系统的质量M=1kg,弹簧刚度系数K=100N/m,速度阻尼系数c=4N*s/m,求它在如下外力下的强迫振动,得出t≦1.2s的波形。

f=t/0.015(0≦t≦0.15),

f=10(0.15≦t≦1.2)

系统的受力平衡表达式:

f-c*v-K*x=M*a; (1)

其中x为位移,v为速度,a为加速度

用dx/dt代替v,得:

f-4*dx/dt-100*x=1*d2x/dt2; (2)

运用函数分段求解位移的表达式,然后用plot画图

1.源程序:

>> dsolve('D2x=t/0.015-4*Dx-100*x','x(0)=0','Dx(0)=0')

ans =

-23/900*exp(-2*t)*sin(4*6^(1/2)*t)*6^(1/2)+2/75*exp(-2*t)*cos(4*6^(1/2)*t)-2/75+2/3*t

>> t1=0:0.01:0.15;

>> x1=-23/900*exp(-2.*t1).*sin(4*6^(1/2).*t1).*6^(1/2)+2/75*exp(-2.*t1).*cos(4*6^(1/2).*t1)-2/75+2/3.*t1;

>> subs(x1,t1,0.15)

ans =

Columns 1 through 11

0 0.0000 0.0001 0.0003 0.0007 0.0013 0.0022 0.0035 0.0051 0.0071 0.0096

Columns 12 through 16

0.0125 0.0160 0.0199 0.0243 0.0292

>> subs(diff(x1),t1,0.15)

ans =

Columns 1 through 11

0.0000 0.0001 0.0002 0.0004 0.0006 0.0009 0.0013 0.0016 0.0020 0.0025 0.0029

Columns 12 through 15

0.0034 0.0039 0.0044 0.0049

>> dsolve('D2x=10-4*Dx-100*x','x(0.15)=0.0292','Dx(0.15)=0.0049')

ans =

-1/240000*exp(-2*t

你可能感兴趣的:(傅立叶逼近,matlab)