Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841

    [matematica] trovare iterativamente punti stazionari in una funzione da Rn a R

    devo trovare iterativamente punti stazionari in una funzione da Rn a R... qualcuno conosce qualche algoritmo adatto?

    ps: il problema è banale (ma non troppo) se si calcola con la penna il gradiente e lo si pone uguale a 0... ma io voglio calcolarlo con un pc e iterativamente

  2. #2
    Mmmmhhh, i casi sono quindici

    1) potresti copiare gli algoritmi usati dagli m-files di octave (matlab), sono script.
    2) A fantasia, potresti definire il campo nei naturali,definisci epsilon, calcoli funzione e piazzi i reali in una matrice nx1 (con FIFO), scansioni la matrice dei reali verificando la costanza dei membri entro l'epsilon fissato, ovviamente anche i numeri naturali devono essere 'conservati' in una matrice nx1 , per 'ricordare' per quale naturale si ha la tangente nulla (variazione tra un membro e l'altro inferiore ad epsilon).
    Credo che il problema più grosso sia la definizione di epsilon.
    Più la si cerca e più si allontana, la base dell'arcobaleno.
    foto

  3. #3
    Utente bannato
    Registrato dal
    Dec 2008
    Messaggi
    0
    Vedo dalla tua firma che conosci il linguaggio C

    Mah,si potrebbe usare il metodo che io definirei del "trenino" cioè si percorre la funzione lungo
    l'intero suo dominio e si determinano i punti di inversioni di tendenza.

    calcolo()
    {
    double x,xp,xq,step,a;

    step=0.1;
    xp=0.0; /* xp,xq= estremi dominio della funzione */
    xq=100.0;

    a=1.0; /* a è un interuttore */

    /* fu()=funzione in esame */

    if((fu(xp+step)-fu(xp))<0.0)
    a=-1.0;

    for (x=xp;x<=xq;x+=step)
    {

    if((fu(x+a*step)-fu(x))<0.0)
    {
    printf("zero=%lf",x);
    a*=-1;
    }
    }

    return;
    }


    Ah,naturalmente l'algoritmo proposto vale per R1,vedi un po' si ti può essere di aiuto come spunto per Rn...

  4. #4
    Originariamente inviato da sacristofelico
    lungo l'intero suo dominio
    VVoVe:

  5. #5
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Originariamente inviato da sacristofelico
    Vedo dalla tua firma che conosci il linguaggio C

    Mah,si potrebbe usare il metodo che io definirei del "trenino" cioè si percorre la funzione lungo
    l'intero suo dominio e si determinano i punti di inversioni di tendenza.

    calcolo()
    {
    double x,xp,xq,step,a;

    step=0.1;
    xp=0.0; /* xp,xq= estremi dominio della funzione */
    xq=100.0;

    a=1.0; /* a è un interuttore */

    /* fu()=funzione in esame */

    if((fu(xp+step)-fu(xp))<0.0)
    a=-1.0;

    for (x=xp;x<=xq;x+=step)
    {

    if((fu(x+a*step)-fu(x))<0.0)
    {
    printf("zero=%lf",x);
    a*=-1;
    }
    }

    return;
    }


    Ah,naturalmente l'algoritmo proposto vale per R1,vedi un po' si ti può essere di aiuto come spunto per Rn...
    ci avevo pensato... in r1 funziona bene... ma in Rn per n grande richiede troppi calcoli...


    Originariamente inviato da taddeus
    Mmmmhhh, i casi sono quindici

    1) potresti copiare gli algoritmi usati dagli m-files di octave (matlab), sono script.
    2) A fantasia, potresti definire il campo nei naturali,definisci epsilon, calcoli funzione e piazzi i reali in una matrice nx1 (con FIFO), scansioni la matrice dei reali verificando la costanza dei membri entro l'epsilon fissato, ovviamente anche i numeri naturali devono essere 'conservati' in una matrice nx1 , per 'ricordare' per quale naturale si ha la tangente nulla (variazione tra un membro e l'altro inferiore ad epsilon).
    Credo che il problema più grosso sia la definizione di epsilon.
    del punto 2 non ci ho capito molto

  6. #6
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    Ci ho pensato un po, è credo che per via numerica l'unico modo sia cercare di generalizzare a Rn l'algoritmo proposto, considerando tutti i punti del dominio e confrontando ogni punto con i punti in un suo intorno...
    poi nn so potrei sbagliarmi! a meno che nn scrivi un bel programmino che ti calcola la derivata della funzione! :-D

  7. #7
    Utente bannato
    Registrato dal
    Dec 2008
    Messaggi
    0
    Originariamente inviato da buba88
    Ci ho pensato un po, è credo che per via numerica l'unico modo sia cercare di generalizzare a Rn l'algoritmo proposto, considerando tutti i punti del dominio e confrontando ogni punto con i punti in un suo intorno...
    poi nn so potrei sbagliarmi! a meno che nn scrivi un bel programmino che ti calcola la derivata della funzione! :-D
    Eh ma il calcolo sarebbe pesante comunque anche volendo utilizzare l'escamotage dell'analisi dell'intorno perchè comunque l'intorno è un insieme di punti che vanno comunque "scandagliati".

    Se tu campioni una funzione R1 mettiamo con mille punti è poca cosa,ma sei hai una funzione anche già solo in R2 usando lo stesso densità di campionamento si arriva già a 1000*1000=10^6 punti.....e questo solo se usi una funzione con dominio in R2 VVoVe:

  8. #8
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Originariamente inviato da buba88
    Ci ho pensato un po, è credo che per via numerica l'unico modo sia cercare di generalizzare a Rn l'algoritmo proposto, considerando tutti i punti del dominio e confrontando ogni punto con i punti in un suo intorno...
    poi nn so potrei sbagliarmi! a meno che nn scrivi un bel programmino che ti calcola la derivata della funzione! :-D
    io ho scritto un programmino che parte da un punto e calcola le derivate parziali.... poi utilizzo il gradiente come se fosse un vettore per muovermi nella direzione o di massimo o di minimo locali...

    il problema è che questo sistema mi porta solo ai massimi e ai minimi, ma tralascia gli altri punti stazionari di cui invece ho bisogno!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.