Problem with definite integration using integral(). Infinite or Not-a-Number value encountered.

6 Ansichten (letzte 30 Tage)
Hello,
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);
end
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" ?
  4 Kommentare
Torsten
Torsten am 15 Aug. 2017
Bearbeitet: Torsten am 15 Aug. 2017
Test it.
Try to integrate f(x)=sqrt(1-x^2) in the range from x=2 to x=3.
Another reason might be that the arguments for exp become too large for your integration interval.
Best wishes
Torsten.
Harsha K
Harsha K am 13 Sep. 2017
Thanks Torsten. I solved this problem by centering my x in my computational space.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Harsha K
Harsha K am 13 Sep. 2017
Hi all,
I just solved this problem by centering the x-axis in the computational space within the evaluation interval.
As in:
G = @(x)(exp(1i.*(pd + (pd_def_min-sqrt(pd_def_min^2-(x-(lower_limit+upper_limit)/2).^2)) ) )...
.* exp(1i*k*x.*sin_theta) );
Then the problem that Torsten mentioned above vanished.
Sorry for this late reply. All is well that ends well.
Cheers.

Weitere Antworten (1)

Harsha K
Harsha K am 15 Aug. 2017
Bearbeitet: Harsha K am 15 Aug. 2017
Hi all,
By the way, I want to achieve the desired result without using the symbolic toolbox as: firstly I do not have the license for the same; and secondly the evaluation using symbolic really increases my code execution time.
Best,
Harsha

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by