| Bill Allombert on Mon, 12 Jun 2023 20:48:19 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Problème avec intnum |
On Mon, Jun 12, 2023 at 06:39:37PM +0100, Damian Rössler wrote:
> Bonjour,
>
> ce message pour vous signaler une problème que j’ai découvert dans Pari/GP lorsque j’ai essayé de faire un calcul avec intnum.
> Voici : lorsque j’évalue
[[Hello Damian, Sorry to reply in English for the benefit of the list]]
> intnum(x=-1000,1000,log(x+I)/(x^2+1))
>
> sur mon ordinateur, j’obtiens
>
> 0.22992031686600422539427385649876229873 + 99.246582527150702120676228264996637697*I
This is a known issue, there is a asymptotic singularity at x=I, so it is better to
cut the integral at 0
intnum(x=-1000,0,log(x+I)/(x^2+1)) + intnum(x=0,1000,log(x+I)/(x^2+1))
%1 = 2.1617705842398946206845289156864102853+4.9316606089380497070728417671647276968*I
Also, to get the result at the full precision you need to do
? intnum(x=-1000,0,log(x+I)/(x^2+1),2) + intnum(x=0,1000,log(x+I)/(x^2+1),2)
%3 = 2.1617705842396943881732021681813425165+4.9316606089382864390572986833518100961*I
(basically, try ,0) ,1) ,2) until it stabilizes)
> En revanche, la commande
>
> NIntegrate[Log[x+I]/(x^2+1),{x,-1000,1000}]
>
> sur Mathematica donne
>
> 2.16177 + 4.93166 I
>
> qui est effectivement proche de
>
> \pi\log(2)+i\pi^2/2 =(approx.) 2.1775860903036021305006888982376139473 + 4.9348022005446793094172454999380755677*i
>
> (que l’on obtiendrait en intégrant de -\infty à \infty).
Indeed! By splitting the integral again:
? intnum(x=-oo,0,log(x+I)/(x^2+1)) + intnum(x=0,oo,log(x+I)/(x^2+1))
%8 = 2.1775860903036021305006888982376139473+4.9348022005446793094172454999380755677*I
? Pi*log(2)+I*Pi^2/2
%9 = 2.1775860903036021305006888982376139473+4.9348022005446793094172454999380755677*I
> Une autre bizarrerie est que Pari/GP en ligne ( https://pari.math.u-bordeaux.fr/gp.html <https://pari.math.u-bordeaux.fr/gp.html> ) donne en revanche
>
> 0.1951079189482813284692074920 + 120.3479637305210234105619723*I
>
> lorsqu’on effectue la même commande que plus haut, ce qui ne coïncide pas avec ce que la version de Pari/GP installée sur mon ordinateur calcule.
Yes, the online version is 32bit due to limitation of javascript, which currently implies
that the default precision is 28 digits instead of 38 digits.
> J’ai aussi essayé de calculer l’intégrale avec des bornes plus élevées et on obtient des résultats encore plus éloignés de la vraie valeur.
> Par ex., sur mon ordinateur, la commande
>
> intnum(x=-100000,100000,log(x+I)/(x^2+1))
>
> donne
>
> 0.0046079812092805937682847726807162324991 + 9916.7863769592496702503585536475594909*I
>
> Je sais bien que les intégrales oscillantes sont difficiles à approcher numériquement mais l’intégrant n’est pas oscillant ici
> (mais il converge assez lentement vers 0).
PARI uses the double exponential method that does a change of variable. Unfortunately this causes the singularity
at I to get closer and closer to the integration path when N goes to infinity.
Thanks for using PARI/GP!
Bill