Esiste un algoritmo numerico per trovare una pendenza asintotica?


23

(xi,yi)y(x)xf(x)y(x)(ax+b)xf(x)f(x), ecc. Ma non so quale sia la forma funzionale di , se ne ha anche una che può essere descritta in termini di funzioni elementari.f(x)

Il mio obiettivo è quello di ottenere la migliore stima possibile della pendenza asintotica . L'ovvio metodo grezzo è quello di individuare gli ultimi pochi punti di dati e fare una regressione lineare, ma ovviamente questo sarà inaccurato se f (x) non diventa "abbastanza piatto" nell'intervallo di x per il quale ho i dati. L'ovvio metodo meno grezzo è quello di supporre che f (x) \ approx \ exp (-x) (o qualche altra forma funzionale particolare) e che si adatti a quello usando tutti i dati, ma le semplici funzioni che ho provato come \ exp (-x) o \ dfrac1 {x} non corrispondono esattamente ai dati in x inferiore dove f (x)af(x)xf(x)exp(x)exp(x)1xxf(x)è grande. Esiste un algoritmo noto per determinare la pendenza asintotica che farebbe meglio, o che potrebbe fornire un valore per la pendenza con un intervallo di confidenza, data la mia mancanza di conoscenza di come i dati si avvicinano all'asintoto?


Questo tipo di attività tende a presentarsi frequentemente nel mio lavoro con vari set di dati, quindi sono principalmente interessato a soluzioni generali, ma su richiesta sto collegando al particolare set di dati che ha portato a questa domanda. Come descritto nei commenti, l' algoritmo Wynn ϵ fornisce un valore che, per quanto ne so, è in qualche modo fuori. Ecco una trama:

Dati asintoticamente lineari

(Sembra che ci sia una leggera curva al ribasso con valori x elevati, ma il modello teorico per questi dati prevede che dovrebbe essere asintoticamente lineare.)


Questo potrebbe essere troppo elementare - o troppo vago - per questo sito, ma ho pensato che la beta privata fosse il momento di provare queste cose.
David Z,

No, penso che questa sia un'ottima domanda. Non tutto deve essere avanzato e sofisticato. Buone soluzioni a problemi semplici sono importanti.
Colin K,

@Dan: la sostituzione di davvero giustificata? exp
JM,

Avere exps tende a rendere le cose più difficili da leggere per me, ma ammetto che era abbastanza piccolo che non avrei dovuto farlo.
Dan,

Non mi interessa davvero in entrambi i casi, ho solo pensato che potrei anche approvare le modifiche perché, beh, perché no. Ottieni una reputazione di coppia, qualunque cosa valga la pena.
David Z,

Risposte:


13

È un algoritmo piuttosto approssimativo, ma utilizzerei la seguente procedura per una stima approssimativa: se, come dici tu, la presunta che rappresenta il tuo ( x i , y i ) è già quasi lineare all'aumentare di x , cosa Farei è prendere le differenze y i + 1 - y if(X)(Xio,yio)X , quindi utilizzare un algoritmo di estrapolazione come latrasformazione Shanksper stimare il limite delle differenze. Si spera che il risultato sia una buona stima di questa pendenza asintotica.yio+1-yioXio+1-Xio


Quella che segue è una dimostrazione di Mathematica . L' algoritmo Wynn è una pratica implementazione della trasformazione Shanks ed è incorporato come funzione (nascosta) . Proviamo la procedura sulla funzioneε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

Potrei anche mostrare quanto sia semplice l'algoritmo:

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

Questa implementazione è adattata dall'articolo di Weniger .


Solo curioso, ma perché hai la forma originale della funzione, invece di combinare tutti i termini?
rcollyer,

LUNTEX

Quanto devono essere vicini i punti piatti affinché l'algoritmo sia efficace?
rcollyer,

2
Ok, ultima domanda (lo giuro), puoi generare un errore legato al preventivo?
rcollyer,

1
È un po 'più complicato. Ho visto alcuni metodi suggeriti in alcuni articoli, ma confesso di non aver fatto esperimenti con essi. (Forse dovrei, uno di questi giorni.) Il libro di Brezinski e Redivo-Zaglia ha alcuni suggerimenti che potresti voler esaminare.
JM,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.