apatriarca ha scritto:C'è una qualche ragione per cui tu non possa fare uso di metodi numerici?
Nessun problema particolare, più che altro è solo per una questione di risparmio in termini di calcolo computazionale. Una volta ottimizzato il codice avremo come obiettivo ultimo l'implementazione di tutte le routine su un raspberry e non vorrei rischiare di doverlo spremere troppo.
apatriarca ha scritto:Se non sbaglio, tutti i punti critici di quella funzione dovrebbero inoltre essere sulla circonferenza.
Cavolo hai fatto centro! Ho scritto una routine che calcola quella funzione al variare di \(\displaystyle r \) ed \(\displaystyle N \) per tutti i punti interni e sul bordo ed è uscito fuori che i massimi si trovano sempre sulla circonferenza. Come ulteriore semplificazione ho quindi sostituito:
\(\displaystyle x = r\cdot cos(\theta) \;\;\;\;\;\;\;\;\;\;\;\;\;\; y= r\cdot sin(\theta) \)
e sono giunto a questa nuova formula in una sola variabile:
\(\displaystyle f(\theta) = \sum_{n=0}^{N-1} log_{10} \left\{ 2r^2 \;\left[1-cos\left(\theta-\frac{2\pi\;n}{N}\right)\right]\right\} \)
adesso fissando \(\displaystyle r \) ed \(\displaystyle N \) mi calcolo la funzione per tutti i valori di \(\displaystyle \theta \in [0,2\pi[ \) e scelgo il massimo tra questi. Penso che adesso dovrebbe essere sufficientemente ottimizzato (è un ciclo for con 360 operazioni) però se ci fosse un metodo per andare ancora più in basso e determinare almeno un valore di \(\displaystyle \theta \) che rende massima questa funzione sarebbe il top.
apatriarca ha scritto:* Puoi estrarre \(r^2\) dalla tua espressione e ottenere un nuovo fattore costante nella tua sommatoria (che quindi non interviene nella ricerca della massimo).
Inizialmente avevo sfruttato la proprietà dei logaritmi e splittato la serie però così facendo ottengo un valore leggermente maggiore di quello realmente da misurare. Questo è dovuto al fatto che nella routine, per:
\(\displaystyle \theta = \frac{2\pi\;n}{N} \)
ottengo un logaritmo con argomento nullo che farebbe divergere la serie. Dato che questo è un caso limite e non verificabile nel sistema che stiamo progettando, semplicemente scarto dalla somma quel termine. Di conseguenza preferisco lasciarlo interno come semplice costante moltiplicativa.
A questo punto resterebbe da trovare solo un vincolo sulla \(\displaystyle \theta \) per ridurre ulteriormente la routine. Già così sono abbastanza soddisfatto però se ci fosse un modo per migliorare ancora perchè fermarsi.