Pagina 3 di 5

Re: Approssimare 1/x con funzione esponenziale

MessaggioInviato: 27 nov 2021, 21:25
da PietroBaima
Se però illustri come hai fatto rendi questo thread utile anche ad altri in futuro.

Re: Approssimare 1/x con funzione esponenziale

MessaggioInviato: 27 nov 2021, 22:35
da dadduni
No, scusami tu non mi sono spiegato per nulla bene.
Mi interesserebbe qualcosa su approssimazioni di funzioni mirata allefficienza del calcolo numerico

Re: Approssimare 1/x con funzione esponenziale

MessaggioInviato: 27 nov 2021, 22:42
da GioArca67
Posto che ormai ha poco senso fare cose del genere, un modo veloce e approssimato per il calcolo di 1/x può sfruttare Newton Raphson e il modo di rappresentare un numero floating point ricordando che log x^y = y log x. Si approssima il logaritmo e si fa un giro con Newton Raphson più o meno così:

Codice: Seleziona tutto
float inv_fast(float x) {
    union { float f; int i; } v;  //in C è permesso type punning
    float w, sx;  // w serve solo per gli ordini superiori

    sx = (x < 0) ? -1:1;
    x = sx * x;

    v.i = (int)(0x7EF4Fb9d - *(uint32_t *)&x);  // serve stdint.h
    w = x * v.f;  // se iterazione singola di N-R può essere messo  alla successiva

     v.f = v.f * (2 - w);     // Una iterazione di N-R, Err = -3.36e-3 * 2^(-floor(log2(x)))
    // v.f = v.f * ( 4 + w * (-6 + w * (4 - w)));  // Seconda iterazione, Err = -1.13e-5 * 2^(-floor(log2(x)))
    // v.f = v.f * (8 + w * (-28 + w * (56 + w * (-70 + w *(56 + w * (-28 + w * (8 - w)))))));  // Terza Iterazione, Err = +-6.8e-8 *  2^(-floor(log2(x)))

    return v.f * sx;
}



costa 2 moltiplicazioni e 1 somma

Re: Approssimare 1/x con funzione esponenziale

MessaggioInviato: 27 nov 2021, 23:12
da coto
PietroBaima ha scritto:Se però illustri come hai fatto rendi questo thread utile anche ad altri in futuro.

Credevo di dover risolvere un problema che non esiste.
Pensavo di dover estrarre il valore medio da un segnale rettangolare per poter misurare modulo e fase.
Invece il simulatore è in grado di farlo da solo per qualsiasi tipo di segnale.
L'unica trasformazione necessaria è convertite lo stimolo sinusoidale in un jitter se si vuole misurare il guadagno ad anello in un punto in cui io segnale è rettangolare.
Come ben spiegato qui https://ieeexplore.ieee.org/document/4766277

Re: Approssimare 1/x con funzione esponenziale

MessaggioInviato: 27 nov 2021, 23:29
da xyz
Francamente mi sembrava strano che il calcolo di un inverso impiegava meno temo di un esponenziale. Per l'esponenziale di solito si usa per il calcolarlo l'algoritmo CORDIC.

Comunque per i posteri utilizzando le regressioni non lineari e partendo dal più semplice modello che rispetti i vincoli:

y = a + b\,e^ {- c\,x }

Per trovare i coefficienti a, b e c che approssima meglio y = 1/x ho utilizzato il programma R, questo è lo script di calcolo con un range a caso per altri range basta cambiare i valori:

Codice: Seleziona tutto
x <- seq(0.5, 5, 0.1)
y <- 1 / x

plot(x, y, type="o", col="blue", xlab="x", ylab="1/x")
model<-nls(y ~ a + b * exp(-c*x), start=list(a=1, b=1, c=1))

print(summary(model))

lines(x, predict(model), col="red", lty=2, lwd=3)


il valore dei coefficienti trovati:

Codice: Seleziona tutto
Formula: y ~ a + b * exp(-c * x)

Parameters:
  Estimate Std. Error t value Pr(>|t|)   
a  0.25210    0.01027   24.55   <2e-16 ***
b  3.18816    0.11192   28.48   <2e-16 ***
c  1.36780    0.04804   28.47   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.04295 on 43 degrees of freedom

Number of iterations to convergence: 8
Achieved convergence tolerance: 6.92e-06


Il grafico, in blu 1/x e in rosso tratteggiato il modello con l'esponenziale:

plot.png
plot

Re: Approssimare 1/x con funzione esponenziale

MessaggioInviato: 28 nov 2021, 1:41
da PietroBaima
dadduni ha scritto:No, scusami tu non mi sono spiegato per nulla bene.
Mi interesserebbe qualcosa su approssimazioni di funzioni mirata allefficienza del calcolo numerico

Figurati.

Uno straclassico è il Rivlin, datato ma ancora godibile. Arriva fino all’approssimazione con funzioni razionali.
Theodore J. Rivlin, An Introduction to the approximation of functions, Dover pubs

Ben più spesso è il Timan, datato ma ancora pesante come quando lo si studia per la prima volta.
A.F. Timan, Theory of approximation of functions of a real variable, macmillan

Poi se vuoi farti male, ma tanto male ci sono tutti i libri di Boris Obsieger (ATTENZIONE: contiene matematica russa) cioè i vari numerical methods I-II-III-IV… (n+1).
Buono studio!

Re: Approssimare 1/x con funzione esponenziale

MessaggioInviato: 28 nov 2021, 9:49
da Max2433BO
Mi scuso con tutti se disturbo inserendomi con un piccolo OT da ignorantissimo della materia ma spinto da pura curiosità:

@ Foto UtentePietroBaima

PietroBaima ha scritto:(...) ATTENZIONE: contiene matematica russa (...)


perché metti questo avviso?

C'è differenza tra la matematica russa rispetto a quella del resto del mondo?

La matematica non è un linguaggio universale?

O_/ Max

Re: Approssimare 1/x con funzione esponenziale

MessaggioInviato: 28 nov 2021, 12:18
da PietroBaima
E’ una segnalazione semiseria.
I libri di matematica russi (specialmente quelli della editrice MIR) sono particolarmente completi, ma particolarmente ostici.
I matematici russi hanno sempre brillato per la loro competenza e serietà.
Quando cadde la cortina di ferro e finalmente i matematici esteri poterono confrontarsi con i matematici russi scoprirono che molti risultati da loro trovati erano stati trovati in modo indipendente dai matematici russi, con alcuni casi in cui… i matematici russi avevano fatto di più !!

Si vede proprio che l’inverno russo è lungo e duro da superare.
(Sì, le donne le avevano, ma erano troppo impegnate a calcolare tabelle di integrali)

Mi ricordo che c’erano diverse bancarelle che svendevano i libri ingialliti della editrice MIR di analisi, calcolo superiore e di matematica in genere e io li compravo perché li trovavo belli e completi.
Erano scritti in russo, che io non conosco, ma le parole erano così poche che si poteva tranquillamente seguire il filo del discorso dalle formule.
Avevo imparato a riconoscere qualche carattere in cirillico, utilizzato per indicare i se e i solo se, ma non mi ricordo più tanto bene.

Re: Approssimare 1/x con funzione esponenziale

MessaggioInviato: 28 nov 2021, 13:15
da GioArca67
Concordo!
Direi quasi cervellotici. Ma ineccepibili.

Re: Approssimare 1/x con funzione esponenziale

MessaggioInviato: 29 nov 2021, 8:32
da Max2433BO
Ti ringrazio Foto UtentePietroBaima :ok:

PietroBaima ha scritto:(...) Sì, le donne le avevano, ma erano troppo impegnate a calcolare tabelle di integrali (...)


(:OOO:)

PietrBaima ha scritto:(...) Mi ricordo che c’erano diverse bancarelle che svendevano i libri ingialliti della editrice MIR di analisi, calcolo superiore e di matematica in genere e io li compravo perché li trovavo belli e completi (...)


Per caso tra questi c'è qualcuno dei testi che citi?

O_/ Max