Warning: Non-finite result. The integration was unsuccessful. Singularity likely.
Afficher commentaires plus anciens
Hi i run a code thta include two doyble integration i recieve e message Warning: Non-finite result. The integration was unsuccessful.
but the final resulta are finite what happen ? the results are reliably ?
the main code is
currentMoM()
function [Is]=currentMoM()
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
[f,N,ra,k0,Z0,lambda] = parameter()
gamma_const=1.781;
%Phi0=zeros(N);
e=exp(1);
dftm=2.*pi./N;
for jj = 1:N
Phi0(jj)=(jj-1).*dftm;
end
% delta_c(i) = sqrt((pos(i,1) - pos(i+1,1))^2 + (pos(i,2) - pos(i+1,2))^2);
lmn = zeros(N);
%zmn = zeros(N);
gm = zeros(1,N);
zmn = zeros(N);
%vim = zeros(1,N);
%vsn = zeros(1,N);
coeif=(Z0.*k0./4).*ra.*dftm;
coeifn=(Z0./2).*sin(k0.*ra.*dftm./2);
for index_i = 1:N
for index_j = 1:N
if index_i == index_j
funa = @(x,y)triangle_basisn(x,index_i).*triangle_basisn(y,index_j).*ra.*(1-j.*(2/pi).*log((gamma_const./2).*k0.*ra.*sqrt(2-2.*cos(x-y)))) ;
funa(Phi0(index_i),Phi0(index_j))
lmn(index_i,index_j) =integral2(funa,Phi0(index_i),Phi0(index_i)+2*pi/N,Phi0(index_j),Phi0(index_j)+2*pi/N);
lmn(index_i,index_j)
else
funb = @(x,y)triangle_basisn(x,index_i).*triangle_basisn(y,index_j).*ra.*besselh(0,2,k0.*ra.*sqrt(2-2.*cos(x-y)));
lmn(index_i,index_j) =integral2(funb,Phi0(index_i),Phi0(index_i)+2*pi/N,Phi0(index_j),Phi0(index_j)+2*pi/N);
func=@(x)(4./(Z0.*k0)).*triangle_basisn(x,index_i).*Efieldin(x);
gm(index_i) =integral(func,Phi0(index_i),Phi0(index_i)+2*pi/N);
zmn(index_i,index_j) = lmn(index_i,index_j) ;
end
%vim(index_i) = delta_c(index_i) * exp(j*k0*(xm(index_i)*cos(phi_i)+ym(index_i)*sin(phi_i)));
%vsn(index_i) = delta_c(index_i) * exp(j*k0*(xm(index_i)*cos(phi_s)+ym(index_i)*sin(phi_s)));
end
end
W = linsolve(zmn,gm');
for ii=1:N
Is(ii)=W(ii);
end
y= Is;
end
function [f,N,ra,k0,Z0,lambda] = parameter()
%UNTITLED Summary of this function goes here
c0=3e8;
Z0=120.*pi;
ra=1;
N=40;
f=300e6;
lambda=c0./f;
k0=2*pi./lambda;
end
function z=triangle_basisn(phi,kk)
[~,N,ra,k0,Z0,lambda] = parameter();
%Phin=zeros(N)
dftm=2.*pi./N;
%for jj = 1:N+1
%Phi0(jj)=(jj-1).*dftm;
%end
%Phin=Phi0
if ( phi >=(kk-1).*dftm ) & ( phi <=kk.*dftm);
z=(phi-(kk-1).*dftm)./dftm;
elseif (phi >= kk.*dftm) & (phi <= (kk+1).*dftm);
z=((kk+1).* dftm -phi)./dftm;
else
z=0 ;
end
end
thank you
Goerge
32 commentaires
Torsten
le 29 Nov 2024
Did you make any changes to your old code ? The same problem remained (see above).
Your function becomes NaN for
funa(Phi0(index_i),Phi0(index_j))
george veropoulos
le 29 Nov 2024
Torsten
le 29 Nov 2024
Why is
lmn(1,1) = NaN + i*NaN
a finite result (see above) ?
george veropoulos
le 29 Nov 2024
In the computation of zmn, results from the case index_i = index_j (thus the case where NaN results are computed) are not used. Thus - although you get the warning: Non-finite result. The integration was unsuccessful, your results for Is might be reliable. Which raises the question: why do you compute lmn for index_i = index_j as below
if index_i == index_j
funa = @(x,y)triangle_basisn(x,index_i).*triangle_basisn(y,index_j).*ra.*(1-j.*(2/pi).*log((gamma_const./2).*k0.*ra.*sqrt(2-2.*cos(x-y)))) ;
lmn(index_i,index_j) =integral2(funa,Phi0(index_i),Phi0(index_i)+2*pi/N,Phi0(index_j),Phi0(index_j)+2*pi/N);
at all if the result is nowhere used ?
george veropoulos
le 30 Nov 2024
Torsten
le 30 Nov 2024
But you never write the results of the integration for index_i = index_j into the zmn matrix which is used to compute Is. So zmn(i,i) (the diagonal) remains at its initial values given to them by preallocation:
zmn = zeros(N);
george veropoulos
le 30 Nov 2024
george veropoulos
le 30 Nov 2024
Modifié(e) : Torsten
le 30 Nov 2024
idont receive any message from integral but receive a warning from matrix "Matrix is singular to working precision"
In R2024b, I get many warning that some of the integrals could not be computed reliably, but no warning about a matrix that is singular to working precision (see above). Do we use the same code ? What MATLAB release are you working with ?
george veropoulos
le 30 Nov 2024
Torsten
le 30 Nov 2024
It seems you try to integrate a discontinuous function. This will almost always fail.
if ( phi >=(kk-1).*dftm ) & ( phi <=kk.*dftm);
z=(phi-(kk-1).*dftm)./dftm;
elseif (phi >= kk.*dftm) & (phi <= (kk+1).*dftm);
z=((kk+1).* dftm -phi)./dftm;
else
z=0 ;
end
george veropoulos
le 30 Nov 2024
george veropoulos
le 30 Nov 2024
Torsten
le 30 Nov 2024
I understand that your computation doesn't succeed. And I gave you the most probable reason: the function you try to integrate is discontinuous. There can be other reasons: there is an error in your code, the parameters are too extreme and so on.
If I were you, I'd first make a surface plot of the real and imaginary parts of the functions you try to integrate and this way find out where "integral2" might encounter problems.
george veropoulos
le 30 Nov 2024
george veropoulos
le 30 Nov 2024
george veropoulos
le 30 Nov 2024
george veropoulos
le 30 Nov 2024
george veropoulos
le 30 Nov 2024
Of course you can do a Monte-Carlo integration. But if you change the integration method, the mathematical problem about the integrand won't vanish. In the Monte-Carlo integration, the problem will show up that you don't get a converged solution for the integral for an increasing number of random test points.
george veropoulos
le 1 Déc 2024
Walter Roberson
le 1 Déc 2024
And you expect to be able to integrate that ????
george veropoulos
le 1 Déc 2024
george veropoulos
le 1 Déc 2024
Déplacé(e) : Torsten
le 1 Déc 2024
The white diagonal seems to indicate that you get NaN values for x = y.
And the varying colors between green and blue show discontinuous behaviour ?
I think you have no chance to integrate this function with a numerical method.
EM is ElectroMagnetism ?
george veropoulos
le 1 Déc 2024
Torsten
le 1 Déc 2024
Do you have a literature link where this integral is written out in a mathematical way ?
george veropoulos
le 1 Déc 2024
george veropoulos
le 1 Déc 2024
Réponses (0)
Catégories
En savoir plus sur Calculus dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



