Optimierung mittels modifizierter Gradientenverfahren
  | 
     Bild 0-1: z = x3-4*x+y3-16*y für -3>x>3, -3>y>3.
  | 
function z=f(x,y)
    z = x^3-4*x+y^3-16*y
endfunction
x=-3:0.1:3;
y=x;
fplot3d(x,y,f,alpha=5,theta=31);
 
     Code 0-1: Scilab-Skript, um den Graph der Funktion z = x3-4*x+y3-16*y zu erstellen.
  | 
function z=f(x,y)
    z = x^3-4*x+y^3-16*y
endfunction
//Suchen ausgehend von einem aktuellen Punkt in Richtung [xricht,yricht] nach dem kleinsten Wert
//für die übergebene Funktion funk.
function alfabest=frichtung(x,y,xricht,yricht,funk)
    alfa = [-2.0,-1.0,-0.5,0.5,1.0,2.0];
    wert_best = funk(x+alfa(1)*xricht,y+alfa(1)*yricht);
    alfa_best = alfa(1);
    for i=2:6
        wert = funk(x+alfa(i)*xricht,y+alfa(i)*yricht);
        if wert < wert_best
            wert_best = wert;
            alfa_best = alfa(i);
        end
    end
    alfabest = alfa_best;
endfunction
//Matrix mit Einheitsvektoren U=[ex,ey] geben zu Beginn
//Suchrichtung vor:
U=[[1;0],[0;1]]
z=[4;4];
znull=z;
for i=1:15
    alfax = frichtung(z(1,1),z(2,1),U(1,1),U(2,1),f);
    alfay = frichtung(z(1,1),z(2,1),U(1,2),U(2,2),f);
    //Neuen Punkt in die Richtung setzen, die den größten Abstieg liefert:
    wertx = f(z(1,1)+alfax*U(1,1),z(2,1)+alfax*U(2,1));
    werty = f(z(1,1)+alfay*U(1,2),z(2,1)+alfay*U(2,2));
    if  wertx < werty
        z(1,1) = z(1,1) + alfax*U(1,1);
        z(2,1) = z(2,1) + alfax*U(2,1);
    else
        z(1,1) = z(1,1) + alfay*U(1,2);
        z(2,1) = z(2,1) + alfay*U(2,2);
    end    
    U(:,1) = alfax*U(:,1);
    U(:,2) = alfax*U(:,2);
    z=z
    fehler = abs(z(1)-2/sqrt(3))+abs(z(2)-4/sqrt(3))
end
 
     Code 0-1: Beispiel für die Anwendung eines konkreten modifizierten Gradientenverfahrens am Beispiel der Funktion z = x3-4*x+y3-16*y.
  | 
function z=f(x,y)
    z = x^3-4*x+y^3-16*y
endfunction
function alfabest=frichtung(x,y,xricht,yricht,funk)
    alfa = [-2.0,-1.0,-0.5,0.5,1.0,2.0];
    wert_best = funk(x+alfa(1)*xricht,y+alfa(1)*yricht);
    alfa_best = alfa(1);
    for i=2:6
        wert = funk(x+alfa(i)*xricht,y+alfa(i)*yricht);
        if wert < wert_best
            wert_best = wert;
            alfa_best = alfa(i);
        end
    end
    alfabest = alfa_best;
endfunction
U=[[1;0],[0;1]]
z=[4;4];
znull=z;
for i=1:15
    betrag=1.0;
    alfax = frichtung(z(1,1),z(2,1),U(1,1),U(2,1),f);
    alfay = frichtung(z(1,1),z(2,1),U(1,2),U(2,2),f);
    //Neuen Punkt setzen:
    wertx = f(z(1,1)+alfax*U(1,1),z(2,1)+alfax*U(2,1));
    werty = f(z(1,1)+alfay*U(1,2),z(2,1)+alfay*U(2,2));
    if  wertx < werty
        z(1,1) = z(1,1) + alfax*U(1,1);
        z(2,1) = z(2,1) + alfax*U(2,1);
        betrag = norm(alfax*U(:,1));
    else
        z(1,1) = z(1,1) + alfay*U(1,2);
        z(2,1) = z(2,1) + alfay*U(2,2);
        betrag = norm(alfay*U(:,2));
    end    
    U(:,1) = alfax*U(:,1);
    U(:,2) = alfax*U(:,2);
    //Konjugierte Richtung einsetzen:
    if  wertx < werty
        if abs((z-znull)'*U(:,1))<abs((z-znull)'*U(:,2))
            U(:,2)=U(:,1);
        end
        U(:,1) = betrag*(z-znull)/norm(z-znull);
    end        
    
    z=z
    fehler = abs(z(1)-2/sqrt(3))+abs(z(2)-4/sqrt(3))
end
 
     Code 0-2: Implementierung eines modifizierten Gradientenverfahrens unter Verwendung konjugierter Richtungsvektoren nach Powell.