0001 function x = dl2mat_complex(dlx)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 if ~isstruct(dlx) && ~iscell(dlx)
0019 up = MException('manopt:autodiff:dl2mat_complex', ...
0020 'dl2mat_complex should only accept a struct or a cell.');
0021 throw(up);
0022 end
0023
0024
0025 if isstruct(dlx) && (~isfield(dlx,'real'))
0026 x = dl2mat_struct(dlx);
0027 elseif iscell(dlx)
0028 x = dl2mat_cell(dlx);
0029 else
0030 x.real = extractdata(dlx.real);
0031 x.imag = extractdata(dlx.imag);
0032
0033 x = x.real + 1i*x.imag;
0034 end
0035
0036 function x = dl2mat_struct(dlx)
0037 elems = fieldnames(dlx);
0038 nelems = numel(elems);
0039 for ii = 1:nelems
0040 if isstruct(dlx.(elems{ii})) && (~isfield(dlx.(elems{ii}),'real'))
0041 x.(elems{ii}) = dl2mat_struct(dlx.(elems{ii}));
0042 elseif iscell(dlx.(elems{ii}))
0043 x.(elems{ii}) = dl2mat_cell(dlx.(elems{ii}));
0044 else
0045
0046 x.(elems{ii}) = extractdata(dlx.(elems{ii}).real) + 1i*extractdata(dlx.(elems{ii}).imag);
0047 end
0048 end
0049 end
0050
0051 function x = dl2mat_cell(dlx)
0052 ncell = length(dlx);
0053 for ii = 1:ncell
0054 if isstruct(dlx{ii}) && (~isfield(dlx{ii},'real'))
0055 x{ii} = dl2mat_struct(dlx{ii});
0056 elseif iscell(dlx{ii})
0057 x{ii} = dl2mat_cell(dlx{ii});
0058 else
0059
0060 x{ii} = extractdata(dlx{ii}.real) + 1i*extractdata(dlx{ii}.imag);
0061 end
0062 end
0063 end
0064 end
0065