Constrainfit

From Eigenvector Research Documentation Wiki
Revision as of 10:35, 21 October 2008 by imported>Rasmus
Jump to navigation Jump to search

Purpose

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')
  • 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: [1x1 struct]
                orth: [1x1 struct]
          smoothness: [1x1 struct]
               fixed: [1x1 struct]
            advanced: [1x1 struct]
            equality: [1x1 struct]
         unimodality: [1x1 struct]
          functional: {[1x1 struct]}
         definitions: @optiondefs
        functionname: 'constrainfit'


Example

>>This is an example
Error: does not exist

See Also

baselinew, deresolv