【问题标题】:Fast integration technique in matlab?matlab中的快速集成技术?
【发布时间】:2013-08-12 19:57:15
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 所以ax是一个符号函数(symfun)?
  • 是的,它根据我的需要而变化

标签: matlab calculus


【解决方案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

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    相关资源
    最近更新 更多