matlab中的快速集成技术?

时间:2013-08-12 19:57:16

标签: matlab calculus

所以我需要编写以下函数:

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函数,但到目前为止我还不确定如何使用它。

谢谢

1 个答案:

答案 0 :(得分:1)

如果您的被积函数没有改变(变量不是x的函数),那么我认为没有理由不采用符号积分的输出并在不执行积分的情况下以数字方式使用它:

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

否则,是的,您应该查看Matlab的quadrature integration methods - 它们的工作方式与sym/int类似,但是用于数值和函数。在较新版本的Matab中,请尝试integral或使用quadgk。像这样:

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

注意,对于高振荡函数,大多数正交方法都有困难。在这种情况下,您应该检查您的结果是否真的正确。如果Matlab的内置正交例程有问题,您可以查看Levin integration方案或this