Gradiente di una funzione in un punto

di il
2 risposte

Gradiente di una funzione in un punto

Buonasera, mi chiedevo se fosse possibile implementare in matlab una function che ti permetta di calcolare il gradiente di una funzione in un punto dato (ho provato tramite l' uso di variabili simboliche, la funzione gradient e limit, ma appena attivata la function ci è voluto troppo tempo prima che ottenessi il risultato).Grazie

2 Risposte

  • Re: Gradiente di una funzione in un punto

    Quanto è, per te, "troppo tempo"?

    Credo che sia molto difficile scrivere una funzione più veloce di quelle messe a disposizione da MAtLab, a meno che non si desideri risolvere un problema "molto specifico" o un caso particolare.

    Forse il "troppo tempo" dipende da come vengono usate le funzioni di MatLab.

    Hope this helps (probably will not).
  • Re: Gradiente di una funzione in un punto

    Ti spiego,
    Devo applicare il metodo di Frank-Wolf per un problema di ottimizzazione convessa vincolata, dove la mia funzione obbiettivo è la norma 2 di una funzione che dispone di 84 variabili. Il metodo prevede il calcolo del gradiente della funzione obbiettivo in un punto che fa parte delle soluzioni ammissibili del problema.

    y=ones(84,1);%soluzione ammissibile del problema%

    %Calcolo del gradiente della funzione obbiettivo f nel punto y%

    syms x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37 x38 x39 x40 x41 x42 x43 x44 x45 x46 x47 x48 x49 x50 x51 x52 x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63 x64 x65 x66 x67 x68 x69 x70 x71 x72 x73 x74 x75 x76 x77 x78 x79 x80 x81 x82 x83 x84;

    pp=[x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37 x38 x39 x40 x41 x42 x43 x44 x45 x46 x47 x48 x49 x50 x51 x52 x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63 x64 x65 x66 x67 x68 x69 x70 x71 x72 x73 x74 x75 x76 x77 x78 x79 x80 x81 x82 x83 x84];

    pp=pp';

    Tesi;%Script dove ricavo la matrice Aobb%

    obb=Aobb*pp;

    f=norm(obb,2);

    G=gradient(f);

    limit(f,x1,y(1));
    limit(f,x2,y(2));
    limit(f,x3,y(3));
    limit(f,x4,y(4));
    limit(f,x5,y(5));
    limit(f,x6,y(6));
    limit(f,x7,y(7));
    limit(f,x8,y(8));
    limit(f,x9,y(9));
    limit(f,x10,y(10));
    limit(f,x11,y(11));
    limit(f,x12,y(12));
    limit(f,x13,y(13));
    limit(f,x14,y(14));
    limit(f,x15,y(15));
    limit(f,x16,y(16));
    limit(f,x17,y(17));
    limit(f,x18,y(18));
    limit(f,x19,y(19));
    limit(f,x20,y(20));
    limit(f,x21,y(21));
    limit(f,x22,y(22));
    limit(f,x23,y(23));
    limit(f,x24,y(24));
    limit(f,x25,y(25));
    limit(f,x26,y(26));
    limit(f,x27,y(27));
    limit(f,x28,y(28));
    limit(f,x29,y(29));
    limit(f,x30,y(30));
    limit(f,x31,y(31));
    limit(f,x32,y(32));
    limit(f,x33,y(33));
    limit(f,x34,y(34));
    limit(f,x35,y(35));
    limit(f,x36,y(36));
    limit(f,x37,y(37));
    limit(f,x38,y(38));
    limit(f,x39,y(39));
    limit(f,x40,y(40));
    limit(f,x41,y(41));
    limit(f,x42,y(42));
    limit(f,x43,y(43));
    limit(f,x44,y(44));
    limit(f,x45,y(45));
    limit(f,x46,y(46));
    limit(f,x47,y(47));
    limit(f,x48,y(48));
    limit(f,x49,y(49));
    limit(f,x50,y(50));
    limit(f,x51,y(51));
    limit(f,x52,y(52));
    limit(f,x53,y(53));
    limit(f,x54,y(54));
    limit(f,x55,y(55));
    limit(f,x56,y(56));
    limit(f,x57,y(57));
    limit(f,x58,y(58));
    limit(f,x59,y(59));
    limit(f,x60,y(60));
    limit(f,x61,y(61));
    limit(f,x62,y(62));
    limit(f,x63,y(63));
    limit(f,x64,y(64));
    limit(f,x65,y(65));
    limit(f,x66,y(66));
    limit(f,x67,y(67));
    limit(f,x68,y(68));
    limit(f,x69,y(69));
    limit(f,x70,y(70));
    limit(f,x71,y(71));
    limit(f,x72,y(72));
    limit(f,x73,y(73));
    limit(f,x74,y(74));
    limit(f,x75,y(75));
    limit(f,x76,y(76));
    limit(f,x77,y(77));
    limit(f,x78,y(78));
    limit(f,x79,y(79));
    limit(f,x80,y(80));
    limit(f,x81,y(81));
    limit(f,x82,y(82));
    limit(f,x83,y(83));
    g=limit(f,x84,y(84));



    Questo è lo script che ho prodotto per formulare il gradiente di questa funzione specifica. Non vorrei che il problema riguardasse l' applicazione di troppe variabili simboliche. Che mi consigliate??
Devi accedere o registrarti per scrivere nel forum
2 risposte