# dist

Euclidean distance weight function

## Syntax

```Z = dist(W,P,FP) dim = dist('size',S,R,FP) dw = dist('dw',W,P,Z,FP) D = dist(pos) info = dist('code') ```

## Description

Weight functions apply weights to an input to get weighted inputs.

`Z = dist(W,P,FP)` takes these inputs,

 `W` `S`-by-`R` weight matrix `P` `R`-by-`Q` matrix of `Q` input (column) vectors `FP` Struct of function parameters (optional, ignored)

and returns the `S`-by-`Q` matrix of vector distances.

`dim = dist('size',S,R,FP)` takes the layer dimension `S`, input dimension `R`, and function parameters, and returns the weight size [`S`-by-`R`].

`dw = dist('dw',W,P,Z,FP)` returns the derivative of `Z` with respect to `W`.

`dist` is also a layer distance function which can be used to find the distances between neurons in a layer.

`D = dist(pos)` takes one argument,

 `pos` `N`-by-`S` matrix of neuron positions

and returns the `S`-by-`S` matrix of distances.

`info = dist('code')` returns information about this function. The following codes are supported:

 `'deriv'` Name of derivative function `'fullderiv'` Full derivative = 1, linear derivative = 0 `'pfullderiv'` Input: reduced derivative = 2, full derivative = 1, linear derivative = 0 `'name'` Full name `'fpnames'` Returns names of function parameters `'fpdefaults'` Returns default function parameters

## Examples

Here you define a random weight matrix `W` and input vector `P` and calculate the corresponding weighted input `Z`.

```W = rand(4,3); P = rand(3,1); Z = dist(W,P) ```

Here you define a random matrix of positions for 10 neurons arranged in three-dimensional space and find their distances.

```pos = rand(3,10); D = dist(pos) ```

## Network Use

You can create a standard network that uses `dist` by calling `newpnn` or `newgrnn`.

To change a network so an input weight uses `dist`, set `net.inputWeights{i,j}.weightFcn` to `'dist'`. For a layer weight, set `net.layerWeights{i,j}.weightFcn` to `'dist'`.

To change a network so that a layer’s topology uses `dist`, set `net.layers{i}.distanceFcn` to `'dist'`.

In either case, call `sim` to simulate the network with `dist`.

See `newpnn` or `newgrnn` for simulation examples.

## Algorithms

The Euclidean distance `d` between two vectors `X` and `Y` is

```d = sum((x-y).^2).^0.5 ```