This is my function definition.
function E_j = E_fld_integ(facet_flag, pd, lower_limit, upper_limit)
F = @(x)(exp(1i*pd).*exp(1i*k*x*sin_theta));
G = @(x)(exp(1i.*(pd + (pd_def_min-sqrt(pd_def_min^2-x.^2)) ) )...
.* exp(1i*k*x.*sin_theta) );
% case 1: E_j = integral(F, lower_limit, upper_limit, 'ArrayValued', true);
% case 2: E_j = integral(G, lower_limit, upper_limit, 'ArrayValued', true);
Where F and G are functions of variable 'x'. All other names(k, pd_def_min, pd) are constants. Although 'sin_theta' is a vector with 1000 values.
Let us consider values of constants:
lower_limit = 30000; upper_limit = 50000; pd = 0; pd_def_min = 95;
Goal: I would like the result of the definite integral to be an array of 1000 double-valued complex numbers in both cases above for F and G functions respectively.
Current scenario and problem:
1. F evaluates conveniently with the provided limits.
2. Whereas evaluation of G translates to the following error:
- Warning: Infinite or Not-a-Number value encountered.
- > In integralCalc/iterateArrayValued (line 267)
- In integralCalc/vadapt (line 130)
- In integralCalc (line 75)
- In integral (line 88)
- In [mainfunctioncall]>E_fld_integ (line 206)
Could someone help me understand as to what is happening and is there a more elegant (and fast execution-wise) solution for the above goal?
Do I have to use Taylor's expansion or Bessels integrals to solve for "G" ?