我计算了系数an,bn (100,T=2*pi)在c++中,并检查了它们是否正确使用很少的来源。现在,我尝试在Scilab中为给定的示例函数生成傅里叶级数图:
(x+2)*abs(cos(2*x*(x-pi/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中的值?,我应该提供一个,十进制的值并检查那里的误算吗?
发布于 2017-05-09 21:46:04
我不知道您是如何计算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)这样,您就可以确保您的输入不会在代码中的其他地方发生更改。
https://stackoverflow.com/questions/43771300
复制相似问题