liba 0.1.15

An algorithm library based on C/C++
Documentation
#include "a/tf.h"

void a_tf_set_num(a_tf *ctx, unsigned int num_n, a_float const *num_p, a_float *input)
{
    ctx->num_p = num_p;
    ctx->num_n = num_n;
    ctx->input = input;
    a_zero(ctx->input, sizeof(a_float) * ctx->num_n);
}

void a_tf_set_den(a_tf *ctx, unsigned int den_n, a_float const *den_p, a_float *output)
{
    ctx->den_p = den_p;
    ctx->den_n = den_n;
    ctx->output = output;
    a_zero(ctx->output, sizeof(a_float) * ctx->den_n);
}

void a_tf_init(a_tf *ctx,
               unsigned int num_n, a_float const *num_p, a_float *input,
               unsigned int den_n, a_float const *den_p, a_float *output)
{
    a_tf_set_num(ctx, num_n, num_p, input);
    a_tf_set_den(ctx, den_n, den_p, output);
}

a_float a_tf_iter(a_tf const *ctx, a_float x)
{
    a_float y = 0;
    a_float_push_fore(ctx->input, ctx->num_n, x);
    for (unsigned int i = 0; i != ctx->num_n; ++i)
    {
        y += ctx->num_p[i] * ctx->input[i];
    }
    for (unsigned int i = 0; i != ctx->den_n; ++i)
    {
        y -= ctx->den_p[i] * ctx->output[i];
    }
    a_float_push_fore(ctx->output, ctx->den_n, y);
    return y;
}

void a_tf_zero(a_tf const *ctx)
{
    a_zero(ctx->input, sizeof(a_float) * ctx->num_n);
    a_zero(ctx->output, sizeof(a_float) * ctx->den_n);
}