Borrar filtros
Borrar filtros

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

8 visualizaciones (últimos 30 días)
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 comentarios
Torsten
Torsten el 15 de Ag. de 2017
Editada: Torsten el 15 de Ag. de 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 el 13 de Sept. de 2017
Thanks Torsten. I solved this problem by centering my x in my computational space.

Iniciar sesión para comentar.

Respuesta aceptada

Harsha K
Harsha K el 13 de Sept. de 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.

Más respuestas (1)

Harsha K
Harsha K el 15 de Ag. de 2017
Editada: Harsha K el 15 de Ag. de 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

Categorías

Más información sobre Numbers and Precision en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by