|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Partinico(PA)-Torino
Messaggi: 2885
|
Trovare il massimo...
Salve,
sto implementando un algoritmo in matlab e devo trovare il valore definito nell'intervallo tra 0 e 255 che mi massimizza una certa funzione. Attualmente l'ho implementato in modo brutale, cioè con un ciclo for da 0 a 255 che mi calcola ogni volta il valore della funzione e che controlla se ho trovato un nuovo massimo. Ovviamente l'algoritmo, che lavora su immagini, risulta piuttosto lento... avete consigli al riguardo? Grazie
__________________
Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 Auto e moto d'epoca
|
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
dipende dalla funzione
puoi riportarla qui? |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2004
Città: Acireale
Messaggi: 447
|
se non ricordo male dovrebbe essere
> max(f([0..255]) dove f è la funzione che devi massimizzare.
__________________
Ho concluso acquisti e/o vendite con : SHIVA>>LuR<<, TheGaiden, ArvMau |
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
appunto, io volevo sapere com'è fatta f...
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Quote:
...sempre che abbia capito il problema.
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2004
Città: Acireale
Messaggi: 447
|
Quote:
e ogni volta calcola il valore di f applicato all'indice del ciclo. Volevo rispondere a 71104 dicendo che dipende da che calcolo deve fare la funzione f. Ricorda che il motore di matlab lavora con gli array e le matrici e che quindi i cicli for risultano molto lenti. Per utilizzare le operazioni come moltiplicazione e divisione tra matrici o array devi utilizzare il punto prima dell'operatore. Se devi fare, ad esempio, la somma tra due array dovresti scrivere: > [ 1 2 3 ] + [ 4 5 6 ] [5 7 9] > [1 2 3] .* [ 4 5 6 ] [4 10 18] le funzioni in matlab si definiscono come function [r1,r2,...,rn] = f(p1,p2,...pn) ..... ..... .... dove r1,r2, ..., rn sono i valori di ritorno e p1,p2,pn sono i parametri in input. La funzione deve essere salvata in un unico file che si chiama con lo stesso nome della funzione e con estensione ".m" . Esempio ( somma.m ) function r = somma(a,b) r = a + b
__________________
Ho concluso acquisti e/o vendite con : SHIVA>>LuR<<, TheGaiden, ArvMau |
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
morta'...
![]() allora possono essere funzioni qualunque, e quindi non c'è scampo a meno che non sia possibile fare proprio il parsing della funzione e far procedere il programma come se fosse un essere umano che studia la funzione ![]() dovresti fare la derivata e trovare i punti in cui si annulla... abbastanza facile una volta fatto il parsing, ma il parsing chi lo fa? |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Quote:
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Partinico(PA)-Torino
Messaggi: 2885
|
Salve ragazzi, la funzione non è semplicissima.
Perchè calcola la media dei pixel di 2 classi ricavate da un'immagine, poi effettua la deviazione standard e altre cosette. L'ho alleggerita parecchio grazie al fatto che calcolo la media invece che sui pixels dell'immagine direttamente, sui valori dell'istogramma dell'immagine. Adesso calcola il massimo in modo quasi immediato! Più di questo non credo si possa fare, anche perchè ripeto la funzione non è banale. Cmq grazie a tutti
__________________
Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 Auto e moto d'epoca
|
|
|
|
|
|
#10 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Partinico(PA)-Torino
Messaggi: 2885
|
Si ma sarebbe stato molto lungo come procedimento. Con il for ho fatto prima e siccome la variabile va da 0 a 255 non risulta per niente pesante
__________________
Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 Auto e moto d'epoca
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 311
|
Quote:
__________________
Senior Member Registrato il: Jan 2001 Messaggi: 2609 |
|
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Jan 2005
Messaggi: 580
|
L'algoritmo della sezione aurea è utile e veloce solo che da delle informazioni di tipo locale...
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Partinico(PA)-Torino
Messaggi: 2885
|
Come funziona, in sintesi, questo algoritmo della sezione aurea?
sono curioso
__________________
Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 Auto e moto d'epoca
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 727
|
se non erro quindi il problema è di ricerca operativa...di solito viene ricercato il minimo... di una f... invece te devi cercare il max... bhe... basta invertire la f...
poi dovresti applicare a mio avviso un algoritmo del simplesso... matlab dovrebbe lavorarci bene... però se te hai bisogno di un numero nell'intervallo [0, 255] allora il problema è più complesso e devi andare sulla programmazione lineare intera...PLI...o ILP (inglese), un algoritmo che andrebbe bene dovrebbe essere quello del Cutting Plane...ma ce ne sono molti altri... fatto sta che per capirli ci vogliono delle nozioni di Programmazione lineare, in particolare bisogna conoscere il metodo del simplesso...con i varii test di ottimalità, aggiornamento di base, e aggiornamento della matrice inversa della base (corrente).... Tra l'altro trovi diversi programmini che sviluppano l'algoritmo del simplesso... CIAO
__________________
If You want a job done right you do it yourself A64 3200+@240x10 Mhz | A8N SLI | X800GT 256MB Sapphire 570/580 | HD WD160GB | MASTER DVD SONY DRU-810A | 2x512 ram twinmos |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:06.










Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 









