2013-03-21 2 views
1

Я хочу оценить двойной интеграл формы \ int _ {- \ infty}^a \ int _ {- infty}^b sum_ {i, j}^K a_i * a_j * x^i * y^j * exp (-x^2 - y^2 + x * y) dx dyВекторизовать функцию для integer

где a_i и a_j - постоянные. Поскольку интеграл является линейным, я могу обменять суммирование и интегрирование, но в этом случае я должен оценить интегралы K^2, и он занимает слишком много времени. В этом случае я делаю следующее:

for i = 1:K 
    for j = 1:K 
     fun = @(x,y) x.^i.*y.^j.*exp(-2.*(x.^2 + y.^2 - 2.*x.*y)) 
     part(i,j) = alpha(i)*alpha(j)*integral2(fun,-inf,a,-inf,b) 
    end 
end 

Это занимает слишком много времени, поэтому я хочу, чтобы оценить только один интеграл, но я не знаю, как векторизации sum_ {I, J}^K a_i * a_j * x^i * y^j * exp (-x^2 - y^2 + x * y), а именно, как поставить его на интеграл2. | был бы очень благодарен за любую помощь.

+0

это не представляется возможным, чтобы правильно визуализировать функцию, которую вы написали в латексной стиле. Правильно отредактируйте вопрос. – fpe

+0

@fpe: Не могли бы вы рассказать мне, могу ли я писать здесь в стиле латекс? Я пробовал, но это было неудачно. – Kolibris

+0

В отличие от других форумов stackexchange, я считаю, что здесь, на SO, вы не можете писать в стиле латекса. – fpe

ответ

0

что о:

I = [1:K]'; 
J = [1:K]'; 
funhandle = @(x,y)(sum(sum(... 
repmat(alpha(I),1,K)... 
.*repmat(alpha(J)',K,1)... 
.*repmat(x.^I,1,K)... 
.*repmat((y.^J)',K,1)))... 
*exp(-x^2-y^2+x*y)) 

Я думаю, что это делает сумму, которую вы хотите правильно ...

+0

Я начал использовать ваш метод, но я не добился успеха, поскольку дескриптор функции должен принимать массивы. Наиболее быстрым решением, которое у меня есть, является «syms s1 s2 z = [s1 s2] * Oginv * [s1; s2]; f = (альфа (1) * (альфа (1) + 2 * (альфа (2) * z + альфа (3) * z^2 + альфа (4) * z^3 + альфа (5) * z^4 + alpha (6) * z^5)) + ... alpha (2) * (alpha (2) * z^2 + 2 * (alpha (3) * z^3 + alpha (4) * z^4 + alpha (5) * z^5 + alpha (6) * z^6)) + ... alpha (3) * (alpha (3) * z^4 + 2 * (alpha (4) * z^5 + alpha (5) * z^6 + alpha (6) * z^7)) + ... alpha (4) * (alpha (4) * z^6 + 2 * (альфа (5) * z^7 + alpha (6) * z^8)) + ... ' – Kolibris

+0

' alpha (5) * (alpha (5) * z^8 + 2 * (alpha (6) * z^9)) + ... alpha (6) * alpha (6) * z^10) * exp (-z/2); fun = matlabFunction (f); cdf2 = integ2 (fun, -inf, a, -inf, b); 'Однако это все равно занимает одну секунду ... – Kolibris

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

  • Нет связанных вопросов^_^