Esiste un algoritmo numerico per trovare una pendenza asintotica?


23

(xi,yi)y(x)xf(x)≡y(x)−(ax+b)x→∞f′(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.