liba 0.1.15

An algorithm library based on C/C++
Documentation
#[test]
#[allow(non_snake_case)]
fn pid_fuzzy() {
    use liba::float;
    use liba::mf::TRI;
    let NL: float = -3.0;
    let NM: float = -2.0;
    let NS: float = -1.0;
    let ZO: float = 0.0;
    let PS: float = 1.0;
    let PM: float = 2.0;
    let PL: float = 3.0;
    let me = [
        [TRI as float, NL, NL, NM],
        [TRI as float, NL, NM, NS],
        [TRI as float, NM, NS, ZO],
        [TRI as float, NS, ZO, PS],
        [TRI as float, ZO, PS, PM],
        [TRI as float, PS, PM, PL],
        [TRI as float, PM, PL, PL],
    ];
    let NL: float = -3.0;
    let NM: float = -2.0;
    let NS: float = -1.0;
    let ZO: float = 0.0;
    let PS: float = 1.0;
    let PM: float = 2.0;
    let PL: float = 3.0;
    let mec = [
        [TRI as float, NL, NL, NM],
        [TRI as float, NL, NM, NS],
        [TRI as float, NM, NS, ZO],
        [TRI as float, NS, ZO, PS],
        [TRI as float, ZO, PS, PM],
        [TRI as float, PS, PM, PL],
        [TRI as float, PM, PL, PL],
    ];
    let NL: float = -15.0;
    let NM: float = -10.0;
    let NS: float = -5.0;
    let ZO: float = 0.0;
    let PS: float = 5.0;
    let PM: float = 10.0;
    let PL: float = 15.0;
    let mkp = [
        [NL, NL, NM, NM, NS, ZO, ZO],
        [NL, NL, NM, NS, NS, ZO, PS],
        [NM, NM, NM, NS, ZO, PS, PS],
        [NM, NM, NS, ZO, PS, PM, PM],
        [NS, NS, ZO, PS, PS, PM, PM],
        [NS, ZO, PS, PM, PM, PM, PL],
        [ZO, ZO, PM, PM, PM, PL, PL],
    ];
    let NL: float = -3.0;
    let NM: float = -2.0;
    let NS: float = -1.0;
    let ZO: float = 0.0;
    let PS: float = 1.0;
    let PM: float = 2.0;
    let PL: float = 3.0;
    let mki = [
        [PL, PL, PM, PM, PS, ZO, ZO],
        [PL, PL, PM, PS, PS, ZO, ZO],
        [PL, PM, PS, PS, ZO, NS, NS],
        [PM, PM, PS, ZO, NS, NM, NM],
        [PM, PS, ZO, NS, NS, NM, NL],
        [ZO, ZO, NS, NS, NM, NL, NL],
        [ZO, ZO, NS, NM, NM, NL, NL],
    ];
    let mkd = [
        [NS, PS, PL, PL, PL, PM, NS],
        [NS, PS, PL, PM, PM, PS, ZO],
        [ZO, PS, PM, PM, PS, PS, ZO],
        [ZO, PS, PS, PS, PS, PS, ZO],
        [ZO, ZO, ZO, ZO, ZO, ZO, ZO],
        [NL, NS, NS, NS, NS, NS, NL],
        [NL, NM, NM, NM, NS, NS, NL],
    ];
    let mut fuzzy = [0u8; liba::pid_fuzzy::BFUZZ(2)];
    let mut pid = liba::pid_fuzzy::new();
    pid.set_rule(
        me.len(),
        &me.concat(),
        &mec.concat(),
        &mkp.concat(),
        &mki.concat(),
        &mkd.concat(),
    )
    .set_kpid(10.0, 0.1, 1.0)
    .set_bfuzz(&mut fuzzy, 2);
    pid.set_opr(liba::fuzzy::EQU).zero();
    std::println!("{} {}", pid.pos(1.0, 0.0), pid.pos(1.0, 0.0));
    pid.set_opr(liba::fuzzy::EQU).zero();
    std::println!("{} {}", pid.inc(1.0, 0.0), pid.inc(1.0, 0.0));
}