3

したがって、コーディングする必要がある次の関数があります。

Lm = 1/d Integral[exp(-i(a(x)t+mKx)) dx (0 から d まで)

私が今持っているものは次のとおりです。

L = (1/period) * int(exp(- 1i*(ax*t+(m*K*x))),x,0,period);
subs(L,[t,m],[beta0,tt]);

すべてが象徴的な場所。ax が困難なもの (sin(x)) である場合、これには非常に長い時間がかかります。そこで、これを簡単にする方法を考えたいと思います。私は配列 a_x(xi) を持っており、同僚から関数を調べるように紹介されましたquadが、これまでのところ、その使用方法がわかりません。

ありがとう

4

1 に答える 1

1

被積分関数が変化しない場合 (変数が の関数ではないx)、シンボリック積分の出力を取得して、積分を実行せずに数値的に使用できない理由がわかりません。

kmp = K.*m.*period/2
L = exp(-1i*(ax.*t+kmp)).*sin(kmp)./kmp

それ以外の場合は、はい、Matlab の直交 積分法を調べる必要があります。それらは と同様sym/intに機能しますが、数値と関数用です。Matab の新しいバージョンでは、 を試すintegralか使用してくださいquadgk。このようなもの:

fun = @(x)exp(-1i*(ax*t+(m*K*x)));
L = (1/period)*integral(fun,0,period);

高度に振動する関数の場合、ほとんどの直交法には困難があることに注意してください。このような場合、結果が実際に正しいことを確認する必要があります。Matlab の組み込みの直交ルーチンに問題がある場合は、レビン積分スキームまたはこれを調べることができます。

于 2013-08-12T20:12:56.707 に答える