2017-05-03 15 views
0

私はC++で係数an、bn(100、T = 2 * pi)を計算し、それらが少数のソースを使って正しいことを確認しました。Matlab(Scilab)の与えられた係数an、bnからのフーリエ級数グラフ生成

(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ので与えられた例関数のフーリエ級数グラフを生成 を試みますここで

が結果です:

enter image description here

それは明らかにその傾向はOKですが、最初と期間の終了が(?逆に)間違って見えます。 Scilabコードに問題はありますか?問題を引き起こす原因は何ですか?関数解(x)のsin/cosの値は?私は、bn値を提供し、そこでの誤算をチェックすべきですか?

+0

この問題は既に解決していますか? – Attila

答えて

1

私はあなたがあなたのA & B係数を計算したのかわからないが、私はあなたが以下の式の最初の行を取得するには、通常の表記法を使用することを前提としています

equation

したがってn Scilabはベクトル索引を1から開始するので、ループは2から正しく作成されましたが、この「オフセット」を補正するのを忘れました。 あなたの関数は次のようなものでなければなりません:あなたはA & Bを提供していなかったので

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 

、私は結果を確認することはできません。

追加注:あなたが明示的に関数内のすべての入力変数を定義する場合、このような、構文的により正しい:

function series=solution(x,A,B) 

あなたが入力したコードのどこかに変更されていないことを確認することもこの方法です。

+0

ありがとう、あなたは完全に正しいです、私は "i-1"を見つけました:)近似は関数とほぼ同じです:) – gooornik07

関連する問題