Home > manopt > autodiff > basic_examples_AD > complextest_AD1.m

## PURPOSE

Test AD for a complex optimization problem on a product manifold (struct)

## DESCRIPTION

` Test AD for a complex optimization problem on a product manifold (struct)`

## CROSS-REFERENCE INFORMATION

This function calls:
• cprod Computes the product of A and B
• creal Extracts the real part of x
• ctransp Computes the conjugate-transpose of X
• manoptAD Preprocess automatic differentiation for a manopt problem structure
• spherecomplexfactory Returns a manifold struct to optimize over unit-norm complex matrices.
• trustregions Riemannian trust-regions solver for optimization on manifolds.
• checkgradient Checks the consistency of the cost function and the gradient.
• checkhessian Checks the consistency of the cost function and the Hessian.
• productmanifold Returns a structure describing a product manifold M = M1 x M2 x ... x Mn.
This function is called by:

## SOURCE CODE

```0001 function complextest_AD1()
0002 % Test AD for a complex optimization problem on a product manifold (struct)
0003
0004     % Verify that Manopt was indeed added to the Matlab path.
0005     if isempty(which('spherecomplexfactory'))
0006         error(['You should first add Manopt to the Matlab path.\n' ...
0007                'Please run importmanopt.']);
0008     end
0009
0010     % Verify that the deep learning tool box was installed
0011     assert(exist('dlarray', 'file') == 2, ['Deep learning tool box is '...
0012     'needed for automatic differentiation.\n Please install the'...
0013     'latest version of the deep learning tool box and \nupgrade to Matlab'...
0014     ' R2021b if possible.'])
0015
0016     % Generate the problem data.
0017     n = 100;
0018     A = randn(n) + 1i*randn(n);
0019     A = .5*(A+A');
0020
0021     % Create the product manifold
0022     S = spherecomplexfactory(n);
0023     manifold.x = S;
0024     manifold.y = S;
0025     problem.M = productmanifold(manifold);  %struct
0026
0027     % For Matlab R2021b or later, define the problem cost function as usual
0028     % problem.cost  = @(X) -real(X.x'*A*X.y);
0029
0030     % For Matlab R2021a or earlier, translate the cost function into a
0031     % particular format with the basic functions in /functions_AD
0032     problem.cost  = @(X) -creal(cprod(cprod(ctransp(X.x), A), X.y));
0033
0034     % Define the gradient and the hessian via automatic differentiation
0035     problem = manoptAD(problem);
0036
0037     % Numerically check gradient and Hessian consistency.
0038     figure;
0040     figure;
0041     checkhessian(problem);
0042
0043     % Solve.
0044     [x, xcost, info] = trustregions(problem);          %#ok<ASGLU>
0045
0046     % Test
0047     ground_truth = svd(A);
0048     distance = abs(ground_truth(1) - (-problem.cost(x)));
0049     fprintf('The distance between the ground truth and the solution is %e \n',distance);
0050
0051
0052 end```

Generated on Fri 30-Sep-2022 13:18:25 by m2html © 2005