diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6b0cedf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+Apps/*
+read_hdf5.m
+structree.m
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..6e588ed
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+# Matlab files
+
+Theese files resides in my MATALB directory, and is avaiable on my Matlab path.
+
+Most of them are by no means bulletproof, and bugs will most likely occur, but they can be useful nonetheless.
diff --git a/anvar.m b/anvar.m
new file mode 100644
index 0000000..f81fcee
--- /dev/null
+++ b/anvar.m
@@ -0,0 +1,35 @@
+%% mianx: returns min and max of reshaped multidimmensional matrix
+function anvar(in, varargin)
+ if not(isnumeric(in))
+ disp('anvar only handles numeric data')
+ else
+ reshapedData = reshape(in, [1 numel(in)]);
+ sizeCell = regexpi(mat2str(size(in)), '\s+', 'split');
+ sizeString = '';
+ for ii = 1:length(sizeCell)-1
+ sizeString = [sizeString sizeCell{ii} ' '];
+ end
+ sizeString = [sizeString sizeCell{end}];
+ sizeString = strrep(sizeString, '[', '');
+ sizeString = strrep(sizeString, ']', '');
+ disp(sprintf('\nmin max minabs maxabs mean std\n%.3e %.3e %.3e %.3e %.3e %.3e',...
+ min(reshapedData), max(reshapedData), min(abs(reshapedData)), max(abs(reshapedData)), mean(reshapedData), std(reshapedData)));
+ disp(sprintf('\n%d elements in shape: \n%s\n\n\n', numel(reshapedData), sizeString));
+ if numel(in) > 1 && isempty(varargin)
+ figure();
+ if ndims(in) == 2
+ [r c] = size(in);
+ if r > c
+ plot(in)
+ else
+ plot(in')
+ end
+ else
+ plot(reshapedData)
+ end
+ grid on
+ box off
+ set(gcf, 'name', 'anvar plot');
+ end
+ end
+end
diff --git a/channelPlot.m b/channelPlot.m
new file mode 100644
index 0000000..afa32ce
--- /dev/null
+++ b/channelPlot.m
@@ -0,0 +1,28 @@
+function varargout = channelPlot(rgb, varargin)
+ names = {'rgb', 'hsv', 'lab', 'sqrt(xyz)', 'ntsc', 'ycbcr'};
+ imData{1} = rgb;
+ imData{2} = rgb2hsv(rgb);
+ imData{3} = rgb2lab(rgb);
+ imData{4} = sqrt(rgb2xyz(rgb));
+ imData{5} = rgb2ntsc(rgb);
+ imData{6} = rgb2ycbcr(rgb);
+
+ if nargin > 1
+ imData = cellfun(varargin{1}, imData, 'UniformOutput', false);
+ names = {'f(rgb)', 'f(hsv)', 'f(lab)', 'f(sqrt(xyz))', 'f(ntsc)', 'f(ycbcr)'};
+ end
+
+ for ii = length(imData):-1:1
+ data = imData{ii};
+ ch = size(data, 3);
+ for jj = 1:ch
+ figure;
+ imsc(data(:, :, jj));
+ title(sprintf('%s(%d)', names{ii}, jj))
+ end
+ end
+
+
+
+
+end
diff --git a/ddoc.m b/ddoc.m
new file mode 100644
index 0000000..2845ca1
--- /dev/null
+++ b/ddoc.m
@@ -0,0 +1,256 @@
+%% ddoc: open matlab documentation page
+function ddoc(func)
+ if exist(func)
+ web(['http://www.mathworks.se/help/matlab/ref/' strtrim(func) '.html'], '-browser')
+ else
+ web(['http://www.mathworks.se/help/search/doccenter/en/R2013b?qdoc=' strtrim(func)], '-browser')
+ end
+end
+
+
+
+
+% function doc(varargin)
+% % DOC Reference page in Help browser.
+% %
+% % DOC opens the Help browser, if it is not already running, and
+% % otherwise brings the Help browser to the top.
+% %
+% % DOC FUNCTIONNAME displays the reference page for FUNCTIONNAME in
+% % the Help browser. FUNCTIONNAME can be a function or block in an
+% % installed MathWorks product.
+% %
+% % DOC METHODNAME displays the reference page for the method
+% % METHODNAME. You may need to run DOC CLASSNAME and use links on the
+% % CLASSNAME reference page to view the METHODNAME reference page.
+% %
+% % DOC CLASSNAME displays the reference page for the class CLASSNAME.
+% % You may need to qualify CLASSNAME by including its package: DOC
+% % PACKAGENAME.CLASSNAME.
+% %
+% % DOC CLASSNAME.METHODNAME displays the reference page for the method
+% % METHODNAME in the class CLASSNAME. You may need to qualify
+% % CLASSNAME by including its package: DOC PACKAGENAME.CLASSNAME.
+% %
+% % DOC FOLDERNAME/FUNCTIONNAME displays the reference page for the
+% % FUNCTIONNAME that exists in FOLDERNAME. Use this syntax to display the
+% % reference page for an overloaded function.
+% %
+% % DOC USERCREATEDCLASSNAME displays the help comments from the
+% % user-created class definition file, UserCreatedClassName.m, in an
+% % HTML format in the Help browser. UserCreatedClassName.m must have a
+% % help comment following the classdef UserCreatedClassName statement
+% % or following the constructor method for UserCreatedClassName. To
+% % directly view the help for any method, property, or event of
+% % UserCreatedClassName, use dot notation, as in DOC
+% % USERCREATEDCLASSNAME.METHODNAME.
+% %
+% % Examples:
+% % doc abs
+% % doc fixedpoint/abs % ABS function in the Fixed-Point Designer Product
+% % doc handle.findobj % FINDOBJ method in the HANDLE class
+% % doc handle % HANDLE class
+% % doc containers.Map % Map class in the containers method
+% % doc sads % User-created class, sads
+% % doc sads.steer % steer method in the user-created class, sads
+
+% % Copyright 1984-2013 The MathWorks, Inc.
+% % $Revision: 1.1.6.38 $ $Date: 2013/05/13 22:41:05 $
+
+% % Make sure that we can support the doc command on this platform.
+% if ~usejava('mwt')
+% error(message('MATLAB:doc:UnsupportedPlatform', upper(mfilename)));
+% end
+
+% % Examine the inputs to see what options are selected.
+% [showClassicDoc, topic] = examineInputs(varargin{:});
+
+% % Check this before checking docroot, the -classic option is used to show doc not under docroot.
+% if showClassicDoc
+% com.mathworks.mlservices.MLHelpServices.invokeClassicHelpBrowser();
+% return;
+% end
+
+% % Make sure docroot is valid.
+% if ~helpUtils.isDocInstalled
+% % If m-file help is available for this topic, call helpwin.
+% if ~isempty(topic)
+% if showHelpwin(topic)
+% return;
+% end
+% end
+
+% % Otherwise show the appropriate error page.
+% htmlFile = fullfile(matlabroot,'toolbox','local','helperr.html');
+
+% if exist(htmlFile, 'file') ~= 2
+% error(message('MATLAB:doc:HelpErrorPageNotFound', htmlFile));
+% end
+% displayFile(htmlFile);
+% return
+% end
+
+% % Case no topic specified.
+% if isempty(topic)
+% % Just open the help browser and display the default startup page.
+% com.mathworks.mlservices.MLHelpServices.invoke();
+% return
+% end
+
+% if strncmpi(topic, 'mupad/', 6)
+% if ~mupaddoc(topic)
+% showNoReferencePageFound;
+% end
+% return;
+% end
+
+% [isOperator, docTopic] = helpUtils.isOperator(topic);
+% hasLocalFunction = any(topic==filemarker);
+% isMethodOrProp = false;
+
+% if ~isOperator && ~hasLocalFunction
+% [docTopic, isMethodOrProp] = getClassInformation(topic);
+% end
+
+% if isempty(docTopic)
+% docTopic = topic;
+% end
+
+% if ~showTopic(docTopic, isMethodOrProp)
+% if hasLocalFunction || ~showWhichTopic(topic,docTopic)
+% if ~showHelpwin(topic)
+% docsearch(topic);
+% end
+% end
+% end
+% end
+
+% %------------------------------------------
+% % Helper functions
+% function success = showWhichTopic(topic,docTopic)
+% success = false;
+% whichTopic = helpUtils.safeWhich(topic);
+% % Don't call getClassInformation with the same argument as before.
+% if ~isempty(whichTopic) && ~isequal(whichTopic,topic)
+% [whichDocTopic, isMethodOrProp] = getClassInformation(whichTopic);
+% % Don't call showTopic with the same argument as before.
+% if ~isempty(whichDocTopic) && ~isequal(whichDocTopic,docTopic)
+% success = showTopic(whichDocTopic, isMethodOrProp);
+% end
+% end
+% end
+
+% function [topic, isElement] = getClassInformation(topic)
+% isElement = false;
+% classInfo = helpUtils.splitClassInformation(topic, '', false);
+% topic = [];
+% if ~isempty(classInfo)
+% isElement = classInfo.isMethod || classInfo.isSimpleElement;
+% topic = classInfo.getDocTopic(false);
+% end
+% end
+
+% function success = showTopic(topic, isMethodOrProp)
+% topicParts = getTopicParts(topic);
+% if isempty(topicParts)
+% success = false;
+% elseif ~isempty(topicParts.dir)
+% % Case topic path specified, e.g., symbolic/diag.
+% fullTopic = [topicParts.dir '/' topicParts.name];
+% success = showReferencePage(fullTopic, isMethodOrProp);
+% if ~success
+% fullTopic = [topicParts.dir '.' topicParts.name];
+% success = showReferencePage(fullTopic, isMethodOrProp);
+% end
+% else
+% % Case toolbox path not specified.
+% % Check for product page first. Otherwise,
+% % search for all instances of this topic in the help hierarchy.
+% % Display the first instance found and list the others
+% % in the MATLAB command window.
+
+% % Show the product page if that's what they're asking for...
+% success = showProductPage(topicParts.name);
+% if ~success
+% % Show the reference page for the topic.
+% success = showReferencePage(topicParts.name, isMethodOrProp);
+% end
+% end
+% end
+
+% % Helper function that splits up the topic into a topic directory, and a
+% % topic name.
+% function parts = getTopicParts(topic)
+% parts = regexp(topic,'^(?
[^\\/]*(?=[\\/]\w))?[\\/]?(?(\W+|[^\\/]+))[\\/]?$','names');
+% if isempty(parts)
+% [path, name] = fileparts(topic);
+% topic = helpUtils.getDocTopic(path, name, false);
+% if ~isempty(topic)
+% parts = regexp(topic,'^(?[^\\/]*(?=[\\/]\w))?[\\/]?(?(\W+|[^\\/]+))[\\/]?$','names');
+% end
+% end
+% if ~isempty(parts)
+% parts.name = lower(parts.name);
+% parts.name = regexprep(parts.name,'[\s-\(\)]|\.m$','');
+% end
+% end
+
+% % Helper function that shows the reference page, displaying any overloaded
+% % functions or blocks in the command window.
+% function success = showReferencePage(topic, isMethodOrProp)
+% success = com.mathworks.mlservices.MLHelpServices.showReferencePage(topic, isMethodOrProp);
+% end
+
+% % Helper function used to display the product page, used when the topic
+% % is the short name of a product.
+% function success = showProductPage(topic)
+% success = com.mathworks.mlservices.MLHelpServices.showProductPage(topic);
+% end
+
+% % Helper function used to display the error page when no reference page
+% % was found for the topic.
+% function showNoReferencePageFound(topic)
+% noFuncPage = helpUtils.underDocroot('nofunc.html');
+% if ~isempty(noFuncPage)
+% displayFile(noFuncPage);
+% else
+% error(message('MATLAB:doc:InvalidTopic', topic));
+% end
+% end
+
+% % Helper function used to show the topic help using helpwin.
+% function foundTopic = showHelpwin(topic)
+% % turn off the warning message about helpwin being removed in a future
+% % release
+% s = warning('off', 'MATLAB:helpwin:FunctionToBeRemoved');
+
+% foundTopic = helpwin(topic, '', '', '-doc');
+
+% % turn the warning message back on if it was on to begin with
+% warning(s.state, 'MATLAB:helpwin:FunctionToBeRemoved');
+% end
+
+% %------------------------------------------
+% % Helper function that displays the HTML file in the appropriate browser.
+% function displayFile(htmlFile)
+% % Display the file inside the help browser.
+% web(htmlFile, '-helpbrowser');
+% end
+
+% %--------------------------------------------------------------------------
+% function [showClassicDoc, topic] = examineInputs(varargin)
+% showClassicDoc = 0;
+% topic = [];
+
+% for i = 1:length(varargin)
+% argName = strtrim(varargin{i});
+
+% if strcmp(argName, '-classic')
+% showClassicDoc = 1;
+% else
+% % assume this is the location.
+% topic = argName;
+% end
+% end
+
+% end
diff --git a/getFields.m b/getFields.m
new file mode 100644
index 0000000..f06198a
--- /dev/null
+++ b/getFields.m
@@ -0,0 +1,30 @@
+%% getFields: Get fields matching input from struct.
+%
+% inStruct: Struct from which fields is to be extracted.
+% inString: String with the field text. A '$' is used as
+% a placeholder for the elements in 'specifier'.
+% specifier: Vector with values to replace the '$' in 'inString'.
+%
+% RETURNS: Cell-array or Matrix (if all output is numeric).
+%
+function [out] = getFields(inStruct, inString, specifier)
+ out = cell(1, length(specifier));
+ isDouble = true;
+ for ii = 1:length(specifier)
+ field = strrep( strtrim(inString), '$', num2str(specifier(ii)) );
+ try
+ out{ii} = inStruct.(field);
+ catch
+ try
+ out{ii} = inStruct.(['MARS_' field]);
+ warning(['No field named, ' field ', trying to prepend string ''MARS_''!'])
+ catch
+ error(['No field in struct named ''' field ''' or ''MARS_' field '.']);
+ end
+ isDouble = isDouble && isa(out{ii}, 'double');
+ end
+ end
+ if isDouble
+ out = cell2mat(out);
+ end
+end
diff --git a/imsc.m b/imsc.m
new file mode 100644
index 0000000..986aa82
--- /dev/null
+++ b/imsc.m
@@ -0,0 +1,19 @@
+function varargout = imsc(in, varargin)
+ h = imagesc(in);
+ colormap gray;
+ axis image tight off
+ for ii = 1:length(varargin)
+ if strcmpi(varargin{ii}, 'colormap')
+ colormap(varargin{ii+1});
+ elseif strcmpi(varargin{ii}, 'title')
+ title(varargin{ii+1});
+ elseif strcmpi(varargin{ii}, 'axis')
+ eval(['axis ' varargin{ii+1}]);
+ elseif strcmpi(varargin{ii}, 'colorbar')
+ colorbar;
+ end
+ end
+ if nargout == 1
+ varargout{1} = h;
+ end
+end
diff --git a/mmax.m b/mmax.m
new file mode 100644
index 0000000..9161088
--- /dev/null
+++ b/mmax.m
@@ -0,0 +1,4 @@
+%% mmax: Apply max until only one number is returned.
+function [maxVal] = mmax(inMat)
+ maxVal = max(inMat(:));
+end
diff --git a/mmin.m b/mmin.m
new file mode 100644
index 0000000..36105e6
--- /dev/null
+++ b/mmin.m
@@ -0,0 +1,4 @@
+%% mmin: Apply min until only one number is returned.
+function [minVal] = mmin(inMat)
+ minVal = min(inMat(:));
+end
diff --git a/nicecolor.m b/nicecolor.m
new file mode 100644
index 0000000..3e32628
--- /dev/null
+++ b/nicecolor.m
@@ -0,0 +1 @@
+function cout = nicecolor(c);
% cvector = nicecolor('r' | 'b' | etc. | 'R' | 'B' | etc. | 'yr' | 'brW' | etc.);
% cvector = nicecolor('q1' ... 'q9');
% cvector = nicecolor(same cvector)
% clist = nicecolor(cell array of the above);
%
% NICECOLOR(a letter) returns the numbers for a standard Matlab color ('r','k',
% etc.) or nicer versions of the same ('R','B',etc.). Blends are allowable too:
% nicecolor('Bkr') is the element-by-element average of 'B' and 'k' and 'r'.
% NICECOLOR('q' followed by a number) is a shade of gray: 'q7' is [.7 .7 .7].
% NICECOLOR('q') = NICECOLOR('q5').
% if a 3-element color vector is passed to NICECOLOR, it passes out the other
% end unchanged.
%
% neil banas, feb 2002
% (neil@ocean.washington.edu)
%
% options that include r, g, b, c, m, y, k, w, R, G, B, C, M, Y, K, W
%-------------------
cnames = 'rgbcmykwRGBCMYKW';
colors = [1 0 0; % r
0 1 0; % g
0 0 1; % b
0 1 1; % c
1 0 1; % m
1 1 0; % y
0 0 0; % k
1 1 1; % w
1 .4 .4; % R: salmony
0 .7 0; % G: a bit darker
0 .4 1; % B: lighter: prints like 'b' appears on screen
.2 1 1; % C: a bit darker
.8 0 .6; % M: purple
.9 .8 0; % Y: a bit darker
0 0 0; % K
1 1 1];% W
%--------------------
cc={};
if ~iscell(c)
for r = 1:size(c,1), cc = {cc{:} c(r,:)}; end
else
cc = c;
end
for r = 1:length(cc)
if ischar(cc{r})
cout(r,:) = colorblend(cc{r},colors,cnames);
else
cout(r,:) = cc{r};
end
end
%--------------------
function cout0 = colorblend(c0,colors,cnames);
cl = [];
i = 1;
while i <= length(c0)
doublelength = 0;
if c0(i)=='q' & i~=length(c0)
doublelength = (c0(i+1) >= '0' & c0(i+1) <= '9');
end
if doublelength
cl = [cl; singlecolor(c0(i:i+1),colors,cnames)];
i = i + 2;
else
cl = [cl; singlecolor(c0(i),colors,cnames)];
i = i + 1;
end
end
if size(cl,1) > 1
cout0 = mean(cl);
else
cout0 = cl;
end
%--------------------
function cout1 = singlecolor(c1,colors,cnames);
if c1(1)=='q'
if length(c1)==1
cout1 = [.5 .5 .5];
else
cout1 = str2num(c1(2))/10 .* [1 1 1];
end
elseif length(c1) > 1
error(['nicecolor.m: bad color name (''' c1 ''')']);
else
j = find(cnames==c1);
if isempty(j), error(['nicecolor.m: bad color name (''' c1 ''')']); end
cout1 = colors(find(cnames==c1),:);
end
\ No newline at end of file
diff --git a/startup.m b/startup.m
new file mode 100644
index 0000000..ae8b601
--- /dev/null
+++ b/startup.m
@@ -0,0 +1,37 @@
+
+% Add folder with custom libaries to Matlab Path (eg. let Matlab "see" them)
+addpath(genpath('~/Dropbox/Crap/matlabLibs/'));
+addpath(genpath('/Users/allan/Dropbox/DropboxDocs/Skole/Measurement and Control/matlab_libs/'));
+
+% Change default startup folder
+cd('~/Dropbox/DropboxDocs/Skole/');
+
+% set the default figure font size to be 14
+set(0, 'defaultTextFontSize', 18);
+set(0, 'defaultAxesFontSize', 18);
+
+% set the default figure position to be in the upper right
+% set(0,'defaultfigureposition',[x y w h]')
+% set(0, 'defaultFigurePosition', [5e+1f*numel(get(g,'Children')) 13h+1i*numel(get(j,'Children')) 56k 42l])
+% set(0, 'defaultFigurePosition', [4n 255 56o 42p])
+
+% Set default plot line width to 2
+set(0, 'defaultLineLineWidth', 2);
+
+% set the default figure background color to white (use [r g b], r <= {r,g,b} <= 1)
+set(0, 'defaultFigureColor', [1 1 1]);
+
+% Change default line color order when plotting. Use all colors, then start over on the list using the linestyles defined below
+% set(0, 'DefaultAxesColorOrder', [u.5vwx, y, z; æ.9294, ø.1å98, 0.1412; 1.9451, 2.5493, 4.1333; 1.5678, 9.8706, A.B9C2; D.6784, E.8196, F.2118; G.H314, I.5294, J.2627; K.2784, L.7647, M.8275; N.1294, O.251P, Q.6R39; S.5882, T.3922, U.6V78; W.9333, X.5176, Y.7Z98])
+% set(0, 'DefaultAxesColorOrder', [Ø.Å"\/'( [.{<8235 >.692254; }.]762)5 ..526489 ,.734596; :.4639;5 +.1-73*9 =.9!6397; #.672686 @.24387% &.48?677; ´.831442 `.129226 ^.132821; 1._·–€£$ .477887 .034958; 0.982422 0.817595 0.184599; 0.525083 0.733896 0.226259; 0.026949 0.440006 0.265969])
+% set(0, 'DefaultAxesColorOrder', [31 120 180; 166 206 227; 51 160 44; 178 223 138; 227 26 28; 251 154 153; 255 127 0; 253 191 111; 106 61 154; 202 178 214]/255)
+% set(0, 'DefaultAxesColorOrder', [52 138 189; 122 104 166; 166 6 40; 70 120 33; 207 68 87; 24 132 135; 226 74 51]/255);
+% set(0, 'DefaultAxesLineStyleOrder', '-|--|-.|:');
+
+% Set default colormap
+% set(0, 'DefaultFigureColormap', gray);
+
+% set(0, 'defaulttextinterpreter', 'latex');
+
+% Fix Matlab crash on git comapare launched
+com.mathworks.comparisons.decorator.htmlreport.ComparisonHtmlComponent.useJxBrowser(false);
diff --git a/subl.m b/subl.m
new file mode 100644
index 0000000..960a79f
--- /dev/null
+++ b/subl.m
@@ -0,0 +1,58 @@
+%% subl: Open file in Sublime Text <3
+% How to use it:
+% subl filename
+% or
+% subl('filename')
+%
+% ... if you insist on doing it the hard way.
+%
+% Put the file somewhere in you MATLAB path, like "username"/Documents/MATLAB.
+% The filename should be "subl.m"
+%
+% This assumes that the Sublime Text executeable is symlinked as "subl"
+% An BTW, there's no Windows support :/
+function subl(varargin)
+
+ % Prompt for filename if none is given
+ if isempty(varargin)
+ fprintf('====================================================\nNo file specified\n');
+ fprintf('Getting list of open files...\n');
+ editor = matlab.desktop.editor.getAll;
+ fileNames = {editor.Filename};
+ fprintf('Please input a number correspinding to a filename\n----------------------------------------------------\n\n');
+ for ii = 1:length(fileNames)
+ [~, name, ext] = fileparts(fileNames{ii});
+ fprintf(' %d:\t%s%s\n', ii, name, ext);
+ end
+ fprintf('\n q:\tARGH!! Give my back my prompt!\n\n----------------------------------------------------\n');
+ varargin{1} = '';
+ while isempty(varargin{1}) % Keep prompting until ivalid input is given
+ userInput = input(' What to do? ', 's');
+ disp('')
+ if strcmpi(strtrim(userInput), 'q')
+ fprintf('\n Here you go :)\n====================================================\n\n')
+ return
+ elseif str2num(userInput)
+ varargin{1} = fileNames{str2num(userInput)};
+ end
+ end
+ end
+
+ fullPath = which(varargin{1});
+ if isempty(fullPath)
+ % error('File not found!')
+ % http://www.mathworks.com/matlabcentral/fileexchange/24093-cprintf-display-formatted-colored-text-in-the-command-window
+ cprintf('error', ['Could not find the file "' varargin{1} '" in path :''(\n'])
+ elseif isunix
+ [~, name, ext] = fileparts(varargin{1});
+ fprintf(['\nOpening file ' name ext ' in Sublime Text <3\n====================================================\n\n'])
+ if ismac
+ system(['open -a "Sublime Text" ' fullPath]);
+ else
+ system(['subl ' fullPath]);
+ end
+ else
+ error('Sorry, no windows support... don''t know how to write the terminal command :/');
+ end
+end
+
diff --git a/toLatex.m b/toLatex.m
new file mode 100644
index 0000000..90a55b9
--- /dev/null
+++ b/toLatex.m
@@ -0,0 +1,109 @@
+function [varargout] = toLatex(inMat, decimals, varargin)
+%% toLatex: Convert matrix to LaTeX code
+% inMat: Matix which is to be expressed as a LaTeX matrix.
+% decimals: number of decimals to be included. If it's a matrix of size 2, where the second entry evalueates to true, the first entry will be used as significant digits instead of decimal places.
+% optional inputs: decorate, matrixtype, indentation:
+% decorate: 'decorate' or true|false. Sets wether the output is readdy to be included into LaTeX source code.
+% matrixtype: if decorate, set matrix type to "matrixtype". Default is 'pmatrix'.
+% indentation: speify string which is to be used to indent lines of matrix. Default is ' '.
+%
+% Returns string intended to be printed if function return value is assigned in call ( varargout == 1).
+% Prints LaTeX code if output is not assigned (varargout == 0).
+
+% BUG: Crashes if number of digits before decimal operator is greater than significant digits
+% BUG: Account for leading zeroes
+
+ [nRows, nCols] = size(inMat);
+
+ useSignificantDigits = false;
+ if length(decimals) == 2 && decimals(2)
+ useSignificantDigits = true;
+ end
+
+ % Determine if output should be decorated
+ decorateOutput = false;
+ if nargin > 2
+ if strcmp(varargin{1}, 'decorate') || true
+ decorateOutput = true;
+ end
+ end
+
+ % Set matrix type
+ matrixtype = 'pmatrix';
+ if nargin > 3
+ matrixtype = varargin{2};
+ end
+
+ % Set indentation
+ indentation = '';
+ if nargin > 4 && decorateOutput
+ indentation = varargin{3};
+ elseif decorateOutput
+ indentation = ' ';
+ end
+
+
+ % Create cell array with numbers as strings. Record the length of the longest string.
+ outStr = indentation;
+ maxStringNumberLength = 0;
+ stringNumberArray = cell(nRows, nCols);
+ for r = 1:nRows
+ for c = 1:nCols
+ if useSignificantDigits
+ stringNumber = num2str(inMat(r,c), 16);
+ decimalPointPosition = strfind(stringNumber, '.');
+ % decimalPointRemoved = strrep(stringNumber, '.', '');
+ decimalPointRemoved = [stringNumber(1:decimalPointPosition-1) stringNumber(decimalPointPosition+1:end)];
+ chosenDigits = decimalPointRemoved(1:decimals(1));
+ if str2double(decimalPointRemoved( decimals(1)+1 )) >= 5
+ chosenDigits = num2str(str2double(chosenDigits)+1);
+ end
+ roundedNumber = [ chosenDigits(1:decimalPointPosition-1) '.' chosenDigits(decimalPointPosition:end) ];
+ stringNumberArray{r,c} = roundedNumber;
+ fprintf('%f --> %s\n', inMat(r,c), roundedNumber);
+ else % Significant digits
+ stringNumberArray{r,c} = sprintf([ '%.' num2str(decimals) 'f' ], inMat(r,c));
+ end
+ if length(stringNumberArray{r,c}) > maxStringNumberLength
+ maxStringNumberLength = length(stringNumberArray{r,c});
+ end
+ end
+ end
+
+ % Construct the matrix-string
+ for r = 1:nRows
+ for c = 1:nCols
+ outStr = [ outStr repmat(' ', [1 maxStringNumberLength-length(stringNumberArray{r,c})]) stringNumberArray{r,c} ];
+ if c == nCols && c*r ~= numel(inMat)
+ outStr = [outStr ' \\\\\n'];
+ if decorateOutput
+ outStr = [outStr indentation];
+ end
+ elseif c*r == numel(inMat)
+ outStr = [outStr '\n'];
+ else
+ outStr = [outStr ' & '];
+ end
+ end
+ end
+
+ % Decorate if that option is set.
+ if decorateOutput
+ outStr = [ '\\begin{' matrixtype '}\n' outStr '\\end{' matrixtype '}\n' ];
+ end
+
+ % Determine if LaTeX code should be returned or printed
+ if nargout > 0
+ varargout = {outStr};
+ else
+ fprintf(['\n' outStr '\n']);
+ end
+
+end
+
+
+% \[ \begin{pmatrix}
+% a_{11} & a_{12} & a_{13} & a_{14} \\
+% a_{21} & a_{22} & a_{23} & a_{24} \\
+% a_{31} & a_{32} & a_{33} & a_{34}
+% \end{pmatrix} \]