Clear[x1, x2, f]
f[{x1_, x2_}]  =  (x1 - 1)^2  +  (((x2 - 2))^2) +  
        0.7 Sin[x1 x2]

gradf[{x1_, x2_}]  =  {D[ f[{x1, x2}], x1], 
        D[f[{x1, x2}], x2]}

ContourPlot[ 
        f[{x1, x2}],  {x1, -3, 7}, {x2, -3, 
          7}, 
ColorFunction -> 
          Hue, 
PlotPoints -> 
          100, 
Contours -> 
          100, 
Epilog -> {RGBColor[0, 1, 0],  
            PointSize[0.05],  
            Point[{0, 
                0}]
}
];

x0 = {0, 0};
f[x0];
gradf[x0];
p0 = -gradf[x0];
α = 1;
z0 = x0 +  α p0;
f[z0] ;
α = 1/2 α;
z0 = x0 +  α p0
f[z0] ;
x1 = z0;
p1 = -gradf[x1];
α = 1;
z1 =  x1  +  α p1
f[x1];
f[z1];
x2 = z1;
f[x2]
p2 = -gradf[x2]
α = 1;
z2 =  x2  +  α p2
f[z2]

ContourPlot[ 
        f[{x1, x2}],  {x1, -3, 7}, {x2, -3, 
          7}, 
ColorFunction -> 
          Hue, 
PlotPoints -> 
          100, 
Contours -> 
          100, 
Epilog -> {RGBColor[0, 1, 0],  
            PointSize[0.05],  
            Point[{0, 0}], 
Line[{x0, x1, 
                x2}]
}
];

Plot3D[ -f[{x1, x2}],  {x1, -3, 
          7}, {x2, -3, 7}, 
ColorFunction -> 
          Hue, 
PlotPoints -> 100];

f[{1.1, 1.2}]

    gradf[{1.1, 1.2}]

x0 = {1.1, 1.2};
f[x0];
p = -gradf[x0];
alpha  =  1;
c1 = 0.001;
c2 = 0.9;
f[x0 + alpha p]  <  
      f[x0]  +  c1 alpha p . gradf[x0]
p . gradf[x0 + alpha p]  > 
      c2 p . gradf[x0]

NMinimize[f[{x, y}], {x, y}]

gradf[{0, 0}]