I wrote the following code to integrate the product of four functions.
Two of the functions are hypergeometric functions and the other two are incomplete gamma functions. I have written each function as an infinite series, one per nested loop. The first loop (variable k
) is for time.
y1 = 0;
for k = 1:L-1
for i = 0:N
total1 = i*log(x) + 2*(n-m-i+k)*log(sig);
for j = 0:N
total2 = j*log(y) + 2*(n-m-j+k)*log(sig);
for p = 0:100
total3 = 0;
for q = 0:100
temp = (n-m+i+k+p)*log(a);
temp = temp - 2*(2*n - 2*m + i + j + 2*k + p + q)*log(sig);
temp = temp - func1(k, j+1, q+1) + func2(i+1, j+1, p+1, q+1, k);
temp = temp + (i + j + 2*k + p + q)*log(sig^2/(1+a));
temp = temp + log(gammainc(b*(1 + x)/sig^2,i + j + p + q));
total3 = total3 + exp(temp);
end
total4 = func3(k, i+1) + (n - m + i + k + p)*log(a/sig^2);
total4 = total4 + func5(k, i+1, p+1);
total4 = total4 + (n - m + i + k + p + 2)*log(sig^2/a);
total4 = total4 + log(gammainc(a*b/sig^2, i + k + p)));
total4 = exp(total4) - total3;
y1 = y1 + exp(total1 + total2 - func5(k, i+1, p+1) + log(total4));
end
end
end
end
Thereafter, I removed the innermost loop the following way to improve speed:
y1 = 0;
for k = 1:L-1
for i = 0:N
total1 = i*log(x) + 2*(n-m-i+k)*log(sig);
for j = 0:N
total2 = j*log(y) + 2*(n-m-j+k)*log(sig);
for p = 0:100
q = 0:100;
temp = (n-m+i+k+p)*log(a);
temp = temp - 2*(2*n - 2*m + i + j + 2*k + p + q)*log(sig);
temp = temp - reshape(func1(k, j+1, q+1),1,101)
temp = temp + reshape(func2(i+1, j+1, p+1, q+1, k), 1, 101) ;
temp = temp + (i + j + 2*k + p + q)*log(sig^2/(1+a));
temp = temp + log(gammainc(b*(1 + x)/sig^2,i + j + p + q));
total3 = total3 + exp(temp);
total4 = func3(k, i+1) + (n - m + i + k + p)*log(a/sig^2);
total4 = total4 + reshape(func5(k, i+1, p+1), 1, 101);
total4 = total4 + (n - m + i + k + p + 2)*log(sig^2/a);
total4 = total4 + log(gammainc(a*b/sig^2,i + k + p)));
total4 = exp(total4) - total3;
y1 = y1 + exp(total1 + total2 - reshape(func5(k, i+1, p+1),1,101) + log(total4));
end
end
end
end
Can you suggest further changes to improve speed?
Basically this is the function I am trying to integrate:
\begin{eqnarray} F &=& \sum\limits_{k=1}^{L-1}\sum\limits_{i=1}^{\infty}\sum\limits_{j=1}^{\infty}\sum\limits_{p=1}^{\infty}\left(\frac{x^i\sigma^{2\left(n-m-i+k\right)}}{\left(n-m+1\right)_ii!}\frac{y^j\sigma^{2\left(n-m-j+k\right)}}{\left(n-m+1\right)_jj!}\frac{1}{s\left(s+1\right)\cdots\left(s+p\right)}\right)\nonumber\\ &&\left[\left(\Gamma\left(n-m+j+k\right)\left(\frac{a}{\sigma^2}\right)^{n-m+i+k+p}\int_0^{b*}e^{-\frac{ab}{\sigma^2}}b^{n-m+i+k+p+1}db\right)\right]\nonumber\\ &-&\left(\sum\limits_{q=0}^{\infty}\frac{a^{n-m+i+k+p}}{\sigma^{2\left(2n-2m+i+j+2k+p+q\right)}}\frac{1}{s(s+1)\cdots(s+q)}\int_0^{b*}e^{-\frac{ab+b}{\sigma^2}b^{2n-2m+i+j+p+q+2k+2}}db\right) \end{eqnarray}