### 3 releases

0.1.2 | Feb 1, 2023 |
---|---|

0.1.1 | Apr 26, 2022 |

0.1.0 | Apr 26, 2022 |

#**7** in #minimizing

**203** downloads per month

Used in **2** crates
(via consprob-trained)

**MIT/Apache**

9KB

137 lines

# bfgs

This package contains an implementation of BFGS, an algorithm for minimizing convex twice-differentiable functions.

BFGS is explained at a high level in the blog post introducing this package.

In this example, we minimize a 2d function:

`extern` `crate` bfgs`;`
`extern` `crate` ndarray`;`
`use` `ndarray``::``{`Array`,` Array1`}``;`
`fn` `main``(``)`` ``{`
`let` x0 `=` `Array``::`from_vec`(``vec!``[``8.``888``,` `1.``234``]``)``;` `//` Chosen arbitrarily
`let` `f` `=` `|``x``:` `&``Array1``<``f64``>``|` `x``.``dot``(`x`)``;`
`let` `g` `=` `|``x``:` `&``Array1``<``f64``>``|` `2.``0` `*` x`;`
`let` x_min `=` `bfgs``::`bfgs`(`x0`,` f`,` g`)``;`
`assert_eq!``(`x_min`,` `Ok``(``Array``::`from_vec`(``vec!``[``0.``0``,` `0.``0``]``)``)``)``;`
`}`

This project uses cargo-make for builds; to build,
run

.`cargo`` make all`

License: MIT/Apache-2.0

###
`lib.rs`

:

This package contains an implementation of BFGS, an algorithm for minimizing convex twice-differentiable functions.

BFGS is explained at a high level in the blog post introducing this package.

In this example, we minimize a 2d function:

`extern` `crate` my_bfgs `as` bfgs`;`
`extern` `crate` ndarray`;`
`use` `ndarray``::``{`Array`,` Array1`}``;`
`fn` `main``(``)`` ``{`
`let` x0 `=` `Array``::`from_vec`(``vec!``[``8.``888``,` `1.``234``]``)``;` `//` Chosen arbitrarily
`let` `f` `=` `|``x``:` `&``Array1``<``f64``>``|` `x``.``dot``(`x`)``;`
`let` `g` `=` `|``x``:` `&``Array1``<``f64``>``|` `2.``0` `*` x`;`
`let` x_min `=` `bfgs``::`bfgs`(`x0`,` f`,` g`)``;`
`assert_eq!``(`x_min`,` `Ok``(``Array``::`from_vec`(``vec!``[``0.``0``,` `0.``0``]``)``)``)``;`
`}`

This project uses cargo-make for builds; to build,
run

.`cargo`` make all`

#### Dependencies

~1.5MB

~25K SLoC