Crates.io | icasadi |
lib.rs | icasadi |
version | 0.1.1 |
source | src |
created_at | 2018-11-29 23:53:44.553536 |
updated_at | 2018-11-30 14:59:15.419158 |
description | Rust interface to CasADi functions |
homepage | |
repository | |
max_upload_size | |
id | 99293 |
size | 26,198 |
This is an interface to CasADi functions of the form phi(u; p)
, where u
is a decision variable and p
a parameter.
icasadi
offers a convenient interface to the C code from Rustno-std
library which can be used on embedded devicesicasadi
can be used in embedded numerical optimization modules written in RustThis library is available on crates.io at https://crates.io/crates/icasadi
Coming very soon
Here is an example of such a function (MATLAB example)
% File: matlab/example.m
nu = 10; % number of decision variables
np = 2; % number of parameters
u = casadi.SX.sym('u', nu); % decision variables
p = casadi.SX.sym('p', np); % parameters
phi = (p'*p) * cos(sin(u))' * u; % cost function phi(u; p)
We may then create C code for this function and its Jacobian using
[cost, grad_cost] = casadi_generate_c_code(u, p, phi);
This will create two functions:
cost
: which maps (u, p)
to phi(u; p)
,
grad_cost
: the Jacobian matrix of phi
with respect to u
evaluated
at (u, p)
Here is an example of use:
// File: main.rs
extern crate icasadi;
fn main() {
let u = [1.0, 2.0, 3.0, -5.0, 1.0, 10.0, 14.0, 17.0, 3.0, 5.0];
let p = [1.0, -1.0];
let mut cost_value = 0.0;
let mut jac = [0.0; 10];
icasadi_cost(u, p, &phival); // compute the cost
icasadi_grad(u, p, cost_jacobian); // compute the Jacobian of the cost
println!("cost value = {}", cost_value);
println!("jacobian = {:#?}", jac);
}
To build the project, run
$ cargo build
To compile the main function (main.rs
), run
$ cargo run
To run the unit tests, do
$ cargo test