Existe-t-il un algorithme numérique pour trouver une pente asymptotique?

23

(Xje,yje)y(X)XF(X)y(X)-(uneX+b)XF(X)F(X), etc. Mais je ne sais pas quelle est la forme fonctionnelle de , si elle en a même une qui peut être décrite en termes de fonctions élémentaires.F(X)

Mon objectif est d'obtenir la meilleure estimation possible de la pente asymptotique . La méthode brute évidente consiste à sélectionner les derniers points de données et à effectuer une régression linéaire, mais bien sûr, cela sera inexact si ne devient pas "suffisamment plat" dans la plage de pour laquelle j'ai des données. La méthode la moins grossière évidente consiste à supposer que (ou une autre forme fonctionnelle particulière) et adaptée à cela en utilisant toutes les données, mais les fonctions simples que j'ai essayées comme ou ne correspondent pas tout à fait aux données à inférieur oùf ( x ) x f ( x ) exp ( - x ) exp ( - x ) 1uneF(X)XF(X)exp(-X)exp(-X) xf(x)1XXF(X)est large. Existe-t-il un algorithme connu pour déterminer la pente asymptotique qui ferait mieux, ou qui pourrait fournir une valeur pour la pente avec un intervalle de confiance, étant donné mon manque de connaissances sur la façon exacte dont les données abordent l'asymptote?


Ce type de tâche a tendance à revenir fréquemment dans mon travail avec divers ensembles de données, donc je suis surtout intéressé par les solutions générales, mais sur demande, je me connecte à l' ensemble de données particulier qui a suscité cette question. Comme décrit dans les commentaires, l' algorithme Wynn ϵ donne une valeur qui, pour autant que je sache, est quelque peu décalée. Voici un complot:

Données asymptotiquement linéaires

(Il semble qu'il y ait une légère courbe à la baisse à des valeurs x élevées, mais le modèle théorique de ces données prévoit qu'elle devrait être asymptotiquement linéaire.)

David Z
la source
Cela peut être trop élémentaire - ou trop vague - pour ce site, mais je pensais que la bêta privée était le moment d'essayer de telles choses.
David Z
Non, je pense que c'est une excellente question. Tout ne doit pas être avancé et sophistiqué. De bonnes solutions à des problèmes simples sont importantes.
Colin K
@Dan: le remplacement de vraiment justifié? exp
JM
Avoir des exps a tendance à rendre les choses plus difficiles à lire pour moi, mais je dois admettre que c'était assez petit pour que je n'aurais pas dû le faire.
Dan
Je m'en fous vraiment de toute façon, je me suis dit que je pourrais aussi bien approuver les modifications parce que, eh bien, pourquoi pas. Vous obtenez une réputation de couple, quoi que cela vaille.
David Z

Réponses:

13

C'est un algorithme assez approximatif, mais j'utiliserais la procédure suivante pour une estimation brute: si, comme vous le dites, le prétendu qui représente votre ( x i , y i ) est déjà presque linéaire lorsque x augmente, que Je ferais est de prendre les différences y i + 1 - y iF(X)(Xje,yje)X , puis utilisez un algorithme d'extrapolation comme latransformation de Shankspour estimer la limite des différences. Le résultat est, espérons-le, une bonne estimation de cette pente asymptotique.yje+1-yjeXje+1-Xje


Ce qui suit est une démonstration de Mathematica . L' algorithme Wynn est une implémentation pratique de la transformation Shanks, et il est intégré en tant que fonction (cachée) . Nous essayons la procédure sur la fonctionϵSequenceLimit[]

4X2+3+2X+e-4X+3
xdata = RandomReal[{20, 40}, 25];
ydata = Table[(3 + 13*E^(4*x) + 6*E^(4*x)*x + x^2 + 3*E^(4*x)*x^2 + 
      2*E^(4*x)*x^3)/(E^(4*x)*(3 + x^2)), {x, xdata}];

SequenceLimit[Differences[ydata]/Differences[xdata],
              Method -> {"WynnEpsilon", Degree -> 2}]
1.999998

Je pourrais aussi bien montrer à quel point l'algorithme est simple:

wynnEpsilon[seq_?VectorQ] := 
 Module[{n = Length[seq], ep, res, v, w}, res = {};
  Do[ep[k] = seq[[k]];
   w = 0;
   Do[v = w; w = ep[j];
    ep[j] = 
     v + (If[Abs[ep[j + 1] - w] > 10^-(Precision[w]), ep[j + 1] - w, 
         10^-(Precision[w])])^-1;, {j, k - 1, 1, -1}];
   res = {res, ep[If[OddQ[k], 1, 2]]};, {k, n}];
  Flatten[res]]

Last[wynnEpsilon[Differences[ydata]/Differences[xdata]]]
1.99966

Cette implémentation est adaptée de l'article de Weniger .

JM
la source
Juste curieux, mais pourquoi avez-vous la forme originale de la fonction, au lieu de combiner tous les termes?
rcollyer
LUNETEX
À quelle distance les points doivent-ils être plats pour que l'algorithme soit efficace?
rcollyer
2
D'accord, dernière question (je le jure), pouvez-vous générer une erreur liée à l'estimation?
rcollyer
1
C'est un peu plus compliqué. J'ai vu quelques méthodes suggérées dans quelques articles, mais j'avoue ne pas avoir fait d'expériences avec elles. (Peut-être que je devrais, un de ces jours.) Le livre de Brezinski et Redivo-Zaglia contient quelques conseils que vous voudrez peut-être examiner.
JM