Pagina 1 di 5
Approssimare 1/x con funzione esponenziale

Inviato:
26 nov 2021, 19:17
da coto
Ciao a tutti
Devo calcolare il reciproco di un numero x senza poter usare la divisione ma ho a disposizione solo
-somma
-sottrazione
-moltiplicazione
-e^x
secondo voi e' possibile approssimare la funzione
y(x)=1/x
con una funzione esponenziale nella forma tipo
y(x)=e^-x
considerato che
e^-x=1/e^x ?
grazie mille
Re: Approssimare 1/x con funzione esponenziale

Inviato:
26 nov 2021, 20:01
da MarkyMark
Che valori può assumere x? (Intendo gli estremi dell'intervallo che lo contiene)
Re: Approssimare 1/x con funzione esponenziale

Inviato:
26 nov 2021, 21:44
da coto
x ha una dinamica di 40dB, puoi offsettarla a piacere
Ad esempio tra 0.01 e 1, oppure tra 1 e 100.
Re: Approssimare 1/x con funzione esponenziale

Inviato:
27 nov 2021, 5:56
da MarkyMark
Il problema è di natura teorica o pratica? Che errore massimo relativo puoi permetterti? Se il problema è di natura pratica, il primo metodo che mi viene in mente è quello di stimare i coefficienti di un modello esponenziale usando la stima ai minimi quadrati. Questo si basa sulla possibilità di disporre in partenza di un insieme di punti che seguono la relazione che vuoi approssimare, cioè 1/x. Se spieghi meglio quello che vuoi fare sono sicuro che altri utenti sapranno indicarti altri metodi.
Re: Approssimare 1/x con funzione esponenziale

Inviato:
27 nov 2021, 9:03
da GioArca67
Oltre alla precisione occorrerebbe sapere se i vincoli imposti sono solo per il calcolo o anche per trovare il metodo di calcolo.
Re: Approssimare 1/x con funzione esponenziale

Inviato:
27 nov 2021, 11:25
da coto
Il problema è di natura pratica, devo fare un modello di calcolo mantenendolo il più possibile leggero e di facile implementazione.
L'informazione principale è un intervallo di tempo che deve essere convertito in frequenza istantaneamene ad ogni ciclo.
Questo blocco occorre per estrarre il valore medio di un segnale ad onda quadra a frequenza variabile per poter fare una analisi a piccolo segnale di stabilità di un anello retroazionato.
L'unica opzione attualmente verificata è un elemento non lineare definito per punti, veloce e leggero, ma l'imprecisione si riflette sui risultati, il compromesso non è semplice.
La funzione esponenziale potrebbe essere una alternativa valida se di facile implementazione utilizzando modelli semplici come generatori capacità e resistenze.
Re: Approssimare 1/x con funzione esponenziale

Inviato:
27 nov 2021, 11:37
da clavicordo
Non so se ho capito bene e se dico una stupidaggine, ma non sarebbe possibile contare la durata di un periodo e convertire la durata in un periodo in frequenza tramite una look up table di associazione tra periodo e frequenza?
Re: Approssimare 1/x con funzione esponenziale

Inviato:
27 nov 2021, 12:17
da PietroBaima
Questo è un metodo trogloditico che funziona per valori di x non troppo distanti da uno.
Può essere migliorato parecchio
- Codice: Seleziona tutto
#include <stdio.h>
int main()
{
const int imax=10000;
float xinv=1;
const float eps=0.001; //three digits
float x=0.1; //numero di cui calcolare l'inverso
for (int n=0;n<imax;n++)
{
if ((x*xinv)<1) xinv+= eps/(x*xinv);
else xinv-=eps*(x*xinv);
}
printf("x=%f 1/x=%f err=%f",x,xinv,x*xinv);
return 0;
}
Re: Approssimare 1/x con funzione esponenziale

Inviato:
27 nov 2021, 13:17
da coto
clavicordo ha scritto:Non so se ho capito bene e se dico una stupidaggine, ma non sarebbe possibile contare la durata di un periodo e convertire la durata in un periodo in frequenza tramite una look up table di associazione tra periodo e frequenza?
si e' quello che viene fatto attualmente
Re: Approssimare 1/x con funzione esponenziale

Inviato:
27 nov 2021, 13:28
da GioArca67
Su che processore operi ed in che linguaggio?
Che errore è ammesso?
In ultima analisi quanto tempo impiega la divisione attualmente disponibile e quanto tempo si ha a disposizione?
Perché un'esponenziale è più veloce di una divisione sulla tua macchina?
Il numero di partenza è intero o floating point? Single o double?