Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Correct

402Size
Leading solution size is 106.
This solution is locked. To view this solution, you need to provide a solution of the same size or smaller.

Test Suite

Test
Code Input and Output
1
Pass
 
%%
% Rosenbrock's banana function
F=@(x) 100*(x(2)-x(1).^2).^2 + (1-x(1)).^2;
gradF=@(x) [100*(4*x(1).^3-4*x(1).*x(2))+2*x(1)-2; 100*(2*x(2)-2*x(1).^2)];
x0 = [-1.9; 2.0];
x1=[
   -1.4478
    2.1184];
x2=[
    1.7064
    2.9446];
f1=6.0419;
f2=0.6068;
[xmin,fmin]=ConjGrad(F,gradF,x0,0.01,1) % single steepest descent
assert(norm(xmin-x1)<0.2||norm(xmin-x2)<0.2)
assert( abs(fmin-f1)<0.5|| abs(fmin-f2)<0.5) % 2 local min
iter alpha f(alpha)  norm(c)
      0 0.000 267.6200 1270.8691
      1 0.003   0.6068 1270.8691
      1 0.003   0.6068 1270.8691
xmin =
    1.7064
    2.9446
fmin =
    0.6068
2
Pass
 
%%
% Rosenbrock's banana function
F=@(x) 100*(x(2)-x(1).^2).^2 + (1-x(1)).^2;
gradF=@(x) [100*(4*x(1).^3-4*x(1).*x(2))+2*x(1)-2; 100*(2*x(2)-2*x(1).^2)];
x0 = [0; 0];
xcorrect=[
    0.2926
    0.0505];
fcorrect=0.6238;
[xmin,fmin]=ConjGrad(F,gradF,x0,1e-2,2) % two iterations
assert(norm(xmin-xcorrect)<0.1)
assert( abs(fmin-fcorrect)<0.01)
iter alpha f(alpha)  norm(c)
      0 0.000   1.0000   2.0000
      1 0.081   0.7711   2.0000
      2 0.010   0.6236   5.1997
xmin =
    0.2927
    0.0506
fmin =
    0.6236
3
Pass
 
%%
% Rosenbrock's banana function
F=@(x) 100*(x(2)-x(1).^2).^2 + (1-x(1)).^2;
gradF=@(x) [100*(4*x(1).^3-4*x(1).*x(2))+2*x(1)-2; 100*(2*x(2)-2*x(1).^2)];
x0 = [1.1;0.9];
xcorrect = [1;1];
fcorrect = 0;
[xmin,fmin]=ConjGrad(F,gradF,x0) % default 20 iterations
assert(norm(xmin-xcorrect)<0.1)
assert(abs(fmin-fcorrect)<0.01);
iter alpha f(alpha)  norm(c)
      0 0.000   9.6200 150.0119
      1 0.001   0.0006 150.0119
      5 0.001   0.0000   0.0040
xmin =
    0.9992
    0.9983
fmin =
   6.8127e-07
4
Pass
 
%%
% Rosenbrock's banana function
F=@(x) 100*(x(2)-x(1).^2).^2 + (1-x(1)).^2;
gradF=@(x) [100*(4*x(1).^3-4*x(1).*x(2))+2*x(1)-2; 100*(2*x(2)-2*x(1).^2)];
x0 = [0; 0];
xcorrect = [1;1];
fcorrect = 0;
[xmin,fmin]=ConjGrad(F,gradF,x0,0.01,100) % Convergence before 100 iterations
assert(norm(xmin-xcorrect)<0.1)
assert(abs(fmin-fcorrect)<0.01);
iter alpha f(alpha)  norm(c)
      0 0.000   1.0000   2.0000
      1 0.081   0.7711   2.0000
     13 0.009   0.0001   0.0094
xmin =
    1.0104
    1.0209
fmin =
   1.0792e-04
5
Pass
 
%%
% Rosenbrock's banana function
F=@(x) 100*(x(2)-x(1).^2).^2 + (1-x(1)).^2;
gradF=@(x) [100*(4*x(1).^3-4*x(1).*x(2))+2*x(1)-2; 100*(2*x(2)-2*x(1).^2)];
x0 = [-1.9; 2];
xcorrect = [1;1];
fcorrect = 0;
[xmin,fmin]=ConjGrad(F,gradF,x0,1e-3,200)
assert(isequal(round(xmin),xcorrect))
assert(isequal(round(fmin),fcorrect))
iter alpha f(alpha)  norm(c)
      0 0.000 267.6200 1270.8691
      1 0.003   0.6068 1270.8691
     23 0.210   0.0000   0.0001
xmin =
    0.9999
    0.9997
fmin =
   2.4635e-08