从Matlab(Scilab)中给定系数a,bn生成傅立叶级数图

时间:2017-05-03 22:58:19

标签: matlab graph scilab

我在c ++中计算了系数a,bn(100,T = 2 * pi),并使用少量来源检查它们是否正确。现在我尝试为Scilab中的给定示例函数生成傅立叶级数图

(X + 2)* ABS(COS(2 * X *(X-π/ 6)))

M=csvRead(filename, ";", [], 'double') 
n=size(M,1)

for i = 1:n
    A(i)=M(i)
    B(i)=M(i + n)
end

function series=solution(x) 
    series=A(1)/2;
    for i = 2:n
        series=series+(A(i)*cos(i*x)+B(i)*sin(i*x));
    end
endfunction

function series=solution2(x)
    series=(x+2).*abs(cos(2.*x.*(x-%pi/6)));
endfunction

x = -%pi:%pi/100:%pi
plot2d(x, solution(x), 3)

x2 = -%pi:%pi/100:%pi 
plot2d(x2, solution2(x2), 4)

结果如下:

enter image description here

它显然看起来趋势是正确的,但是期间的开始和结束是错误的(逆转?)。 你看到Scilab代码有什么问题吗? 什么可能导致问题 - 函数解决方案(x)中sin / cos的值? 我应该提供一个,bn价值并检查那里的错误计算?

1 个答案:

答案 0 :(得分:1)

我不知道你是如何计算出A& B系数,但我假设您使用通常的符号来获得以下公式的第一行:

equation

因此n从1开始。由于Scilab从1开始向量索引,你正确地从2开始循环,但忘记补偿这个"偏移"。 你的功能应该是这样的:

function series=solution(x) 
    series=A(1)/2;
    for i = 2:n
        series=series+(A(i)*cos((i-1)*x)+B(i)*sin((i-1)*x));
    end
endfunction

由于您没有提供A& B,我无法检查结果。

附加说明:如果在函数中明确定义所有输入变量,则在语法上更正确,如下所示:

function series=solution(x,A,B)

通过这种方式,您可以确保您的输入不会在代码中的其他位置更改。