2013-08-12 2 views
3

Таким образом, у меня есть следующие функции, что мне нужно код:Быстрая интеграция в Matlab?

Lm = 1/д Интеграл [ехр (-i (а (х) Т + Mkx)) дх (от 0 до г)

То, что у меня есть сейчас:

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

Где все символично. Это займет очень много времени, если топор - что-то сложное (sin (x)). Поэтому я хотел бы выяснить способ упрощения этого. У меня есть массив a_x (xi), и мои коллеги обратились к функции quad, но до сих пор я не уверен, как ее использовать.

благодаря

+0

Значит, 'ax' является символьной функцией (' symfun')? – horchler

+0

Да, это зависит от того, что мне нужно – yankeefan11

ответ

1

Если подынтегральная функция не меняется (переменные не функцию x), то я не вижу причин, почему вы не могли бы взять на себя выход символической интеграции и использовать его численно без выполнения интеграции:

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

в противном случае, да, вы должны смотреть в Matlab-х quadratureintegration 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.

Смежные вопросы