Constrainfit and File:T1267-f6.jpg: Difference between pages

From Eigenvector Research Documentation Wiki
(Difference between pages)
Jump to navigation Jump to search
imported>Rasmus
No edit summary
 
imported>Benjamin
(Working with False-color images, figure 6.)
 
Line 1: Line 1:
===Purpose===
Working with False-color images, figure 6.
 
Finds A minimizing ||X-A*B'|| subject to constraints, given the small matrices ('''X''' ' '''B''') and ('''B''' ' '''B''')
 
===Synopsis===
 
:  [A]=constrainfit(XB,BtB,Aold);  % Unconstrained
 
:  '''Setting global constraints on A'''
:  opt = constrainfit('options');
:  opt.type='nonnegativity';
:  [A]=constrainfit(XB,BtB,Aold,opt); % Nonnegative
 
:  '''Setting constraints on just one column of A'''
:  opt = constrainfit('options');
:  opt.type='columnwise';
:  opt.columnconstraints={0;2;0}; % If three columns
:  [A]=constrainfit(XB,BtB,Aold,opt); % Second column unimodal
 
===Description===
 
CONSTRAINTFIT solves the least squares problem behind bilinear, trilinear and other multilinear models. Assuming a model '''X''' = '''A'''*'''B''' ' and assuming that '''X''' and '''B''' are known, the least squares estimate of '''A''' is obtained. Rather than using '''X''' and '''B''' this algorithm uses the cross product matrices ('''X''' ' '''B''') and ('''B''' ' '''B''') which are generally smaller and less memory-demanding especially in multi-way models.
 
CONSTRAINFIT can do a number of general types of regression problems such as nonnegativity-constrained regression, regression with column-orthogonality of '''A''' etc. These constraints are simply set in the option field 'type', e.g. option.type='nonnegativity'. Thus, for most problems, only the 'type' field needs to be set. CONSTRAINFIT will provide a least squares solution to most of these problems.
 
CONSTRAINFIT can also find '''A''' subject to different constraints on different columns. In this case, the update of '''A''' will be an improvement of the initially provided estimate '''Aold'''. As CONSTRAINFIT is used inside iterative algorithms, an improvement is sufficient to guarantee overall convergence.
 
 
====Inputs====
* '''XB''' = This is the matrix '''X''' ' '''B'''.
* '''BtB''' = This is the matrix '''B''' ' '''B'''.
* '''Aold''' = An initial estimate of '''A'''.
 
====Optional Inputs====
* '''options''' = provides definitions for which type of constraint to impose.
 
====Outputs====
* '''A''' = The improved estimate of '''A'''.
 
===Options===
 
options =  a structure array with the following fields:
 
* '''type''': [ {'unconstrained'} | 'nonnegativity' | 'unimodality' | 'orthogonality' | 'columnorthogonal' | 'equality' | 'exponential' | 'rightprod' | 'columnwise']
 
* '''columnconstraints''': cell where element f defines constraints on column f (only applicable if options.type = 'columnwise'). For applicable column constraints see below.
* '''inequality''' : Defines a cutoff. If inequality is defined in columnwise, all elements of that column will be > options.inequality.scalar. Thus, when set to zero, nonnegativity is imposed.
* '''nonnegativity''': defines which algorithm to use for imposing nonnegativity when options.type = 'nonnegativity'. If set to 0, the default NNLS algorithm is used. If set to 1, a faster columnwise update is used which only improves the current least squares fit, if set to 2, an ad hoc approach is used where '''A''' is estimated in a least squares sense and then negative numbers are set to zero. This will not provide a well-defined solution in terms of the least squares loss function. If set to 3, the NMF algorithm is used. This requires that all elements of the data array are nonnegative in order to work properly.
* '''orth''': [1x1 struct]
* '''smoothness''':
* '''fixed''':
* '''advanced''':
* '''equality''':
* '''unimodality''':
* '''functional''':
* '''definitions''': @optiondefs
 
===Example===
 
 
<pre>
>>This is an example
Error: does not exist
</pre>
 
===See Also===
 
[[baselinew]], [[deresolv]]

Revision as of 14:21, 12 May 2017

Working with False-color images, figure 6.