3

所以我有以下需要编码的函数:

Lm = 1/d 积分[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 的内置正交例程有问题,您可以查看Levin 积分方案,或者这个.

于 2013-08-12T20:12:56.707 回答