# factorGraph

Bipartite graph of factors and nodes

## Description

A `factorGraph` object stores a bipartite graph consisting of factors connected to variable nodes. The nodes represent the unknown random variables in an estimation problem, and the factors represent probabilistic constraints on those variables, derived from measurements or prior knowledge. Add factors and nodes to the factor graph by using the `addFactor` function.

## Creation

### Syntax

``G = factorGraph``

### Description

example

````G = factorGraph` creates an empty `factorGraph` object.```

## Properties

expand all

Number of nodes in the factor graph, specified as a positive integer.

Number of factors in the factor graph, specified as a positive integer.

## Object Functions

 `addFactor` Add factor to factor graph `fixNode` Fix or free node in factor graph `hasNode` Check if node ID exists in factor graph `isConnected` Check if factor graph is connected `isNodeFixed` Check if node is fixed `nodeIDs` Get all node IDs in factor graph `nodeState` Get or set node state in factor graph `nodeType` Get node type of node in factor graph `optimize` Optimize factor graph

## Examples

collapse all

Create and optimize a factor graph with custom solver options.

Create Factor Graph and Solver Settings

Create a factor graph and solver options with custom settings. Set the maximum number of iterations to `1000` and set the verbosity of the `optimize` output to `2`.

```G = factorGraph; optns = factorGraphSolverOptions(MaxIterations=1000,VerbosityLevel=2)```
```optns = factorGraphSolverOptions with properties: MaxIterations: 1000 FunctionTolerance: 1.0000e-06 GradientTolerance: 1.0000e-10 StepTolerance: 1.0000e-08 VerbosityLevel: 2 TrustRegionStrategyType: 1 ```

Create a GPS factor with node identification number of `1` with NED ReferenceFrame and add it to the factor graph.
```fgps = factorGPS(1,ReferenceFrame="NED"); addFactor(G,fgps);```
Optimize the factor graph with the custom settings. The results of the optimization are displayed with the level of detail depending on the `VerbosityLevel.`
`optimize(G,optns);`
```iter cost cost_change |gradient| |step| tr_ratio tr_radius ls_iter iter_time total_time 0 0.000000e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.00e+04 0 2.38e-05 2.05e-04 Terminating: Gradient tolerance reached. Gradient max norm: 0.000000e+00 <= 1.000000e-10 Solver Summary (v 2.0.0-eigen-(3.3.4)-no_lapack-eigensparse-no_openmp) Original Reduced Parameter blocks 1 1 Parameters 7 7 Effective parameters 6 6 Residual blocks 1 1 Residuals 3 3 Minimizer TRUST_REGION Sparse linear algebra library EIGEN_SPARSE Trust region strategy DOGLEG (TRADITIONAL) Given Used Linear solver SPARSE_NORMAL_CHOLESKY SPARSE_NORMAL_CHOLESKY Threads 1 1 Linear solver ordering AUTOMATIC 1 Cost: Initial 0.000000e+00 Final 0.000000e+00 Change 0.000000e+00 Minimizer iterations 1 Successful steps 1 Unsuccessful steps 0 Time (in seconds): Preprocessor 0.000181 Residual only evaluation 0.000000 (0) Jacobian & residual evaluation 0.000015 (1) Linear solver 0.000000 (0) Minimizer 0.004343 Postprocessor 0.000021 Total 0.004546 Termination: CONVERGENCE (Gradient tolerance reached. Gradient max norm: 0.000000e+00 <= 1.000000e-10) ```