我在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)
结果如下:
它显然看起来趋势是正确的,但是期间的开始和结束是错误的(逆转?)。 你看到Scilab代码有什么问题吗? 什么可能导致问题 - 函数解决方案(x)中sin / cos的值? 我应该提供一个,bn价值并检查那里的错误计算?
答案 0 :(得分:1)
我不知道你是如何计算出A
& B
系数,但我假设您使用通常的符号来获得以下公式的第一行:
因此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)
通过这种方式,您可以确保您的输入不会在代码中的其他位置更改。