首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab(Scilab)中给定系数an,bn的傅里叶级数图生成

Matlab(Scilab)中给定系数an,bn的傅里叶级数图生成
EN

Stack Overflow用户
提问于 2017-05-03 22:58:18
回答 1查看 1.1K关注 0票数 0

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

(x+2)*abs(cos(2*x*(x-pi/6)))

代码语言:javascript
复制
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中的值?,我应该提供一个,十进制的值并检查那里的误算吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-09 21:46:04

我不知道您是如何计算AB系数的,但我假设您使用了通常的符号来得到以下公式的第一行:

因此,n从1开始。由于Scilab从1开始向量索引,您正确地从2开始循环,但忘记了补偿这个“偏移”。您的功能应该如下所示:

代码语言:javascript
复制
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,所以我无法检查结果。

附加注意:如果显式定义函数中的所有输入变量,则语法上更正确,如下所示:

代码语言:javascript
复制
function series=solution(x,A,B)

这样,您就可以确保您的输入不会在代码中的其他地方发生更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43771300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档