0

では、本題に入りましょう。

MATLAB を使用して (i) 既知の係数に基づいてフーリエ級数を生成し、その後 (ii) インパルスが既知の場合に出力関数を決定しようとしています。

これまでのところ、このコードを使用してフーリエ級数を取得しました。

clear all
syms x k L n
evalin(symengine,'assume(k,Type::Integer)');
a = @(f,x,k,L) (2/(pi*k))* sin((pi*k)/(2 * L));
fs = @(f,x,n,L) (1/2*L) + symsum(a(f,x,k,L)*cos(k*2*pi*x/L),k,1,n);
f = x;
pretty(fs(f,x,11,1))

これは希望どおりに機能します。インパルス応答は次のようになります。

h = heaviside(x) * exp(-5*x);

ここで、関数を取得するために、それぞれの関数で畳み込みを実行する必要があります。しかし、次のように入力すると、エラーが発生します。

x1 = fs(f,x,1,1);
conv(h,x1)

Undefined function 'conv2' for input arguments of type 'sym'.
Error in conv (line 38) 
c = conv2(a(:),b(:),shape);

どんな助けでもいただければ幸いです

4

1 に答える 1

0

これは、convが数値入力に対してのみ定義されているためです。畳み込みをシンボリックに見つけたい場合は、積分を使用してシンボリックに方程式を自分で入力する必要があります。

思い出すと、畳み込み積分は次のように定義されます。

出典:ウィキペディア

したがって、次のようにします。

syms x tau;
F = int(h(tau)*x1(x-tau),'tau',-inf,+inf);

intは、シンボリック積分を行う MATLAB の関数です。また、畳み込み積分は可換であるため、これも機能することに注意してください。

出典:ウィキペディア

したがって、次の場合も同じ答えが得られるはずです。

syms x tau;
F = int(h(x-tau)*x1(tau),'tau',-inf,+inf);

お役に立てれば!

于 2015-05-23T16:09:03.980 に答える