MBot Software Library
v1.0
An API documentation to mbot_firmware repository
|
Functions for polynomial manipulation. More...
Functions | |
int | rc_poly_print (rc_vector_t v) |
Prints a polynomial in human-readable format in one line. More... | |
int | rc_poly_conv (rc_vector_t a, rc_vector_t b, rc_vector_t *c) |
Convolutes the polynomials a&b and places the result in vector c. More... | |
int | rc_poly_power (rc_vector_t a, int n, rc_vector_t *b) |
Raises a polynomial a to itself n times where n is greater than or equal to 0. More... | |
int | rc_poly_add (rc_vector_t a, rc_vector_t b, rc_vector_t *c) |
Add two polynomials a&b with right justification and place the result in c. More... | |
int | rc_poly_add_inplace (rc_vector_t *a, rc_vector_t b) |
Adds polynomials a&b with right justification. More... | |
int | rc_poly_subtract (rc_vector_t a, rc_vector_t b, rc_vector_t *c) |
Subtracts two polynomials a-b with right justification and places the result in c. More... | |
int | rc_poly_subtract_inplace (rc_vector_t *a, rc_vector_t b) |
Subtracts b from a with right justification. More... | |
int | rc_poly_differentiate (rc_vector_t a, int d, rc_vector_t *b) |
Calculates the dth derivative of the polynomial a and places the result in vector b. More... | |
int | rc_poly_divide (rc_vector_t n, rc_vector_t d, rc_vector_t *div, rc_vector_t *rem) |
Divides denominator d into numerator n. The remainder is placed into vector rem and the divisor is placed into vector div. More... | |
int | rc_poly_butter (int N, double wc, rc_vector_t *b) |
Calculates coefficients for continuous-time Butterworth polynomial of order N and cutoff wc (rad/s) and places them in vector b. More... | |
Functions for polynomial manipulation.
We represent polynomials as a vector of coefficients with the highest power term on the left at vector index 0. The following polynomial manipulation functions are designed to behave like their counterparts in the Numerical Renaissance codebase.
int rc_poly_add | ( | rc_vector_t | a, |
rc_vector_t | b, | ||
rc_vector_t * | c | ||
) |
Add two polynomials a&b with right justification and place the result in c.
Any existing memory allocated for c is freed and its contents are lost.
[in] | a | First input |
[in] | b | second input |
[out] | c | output |
int rc_poly_add_inplace | ( | rc_vector_t * | a, |
rc_vector_t | b | ||
) |
Adds polynomials a&b with right justification.
The result is placed in vector a and a's original contents are lost. More memory is allocated for a if necessary.
a | First input and where output is written | |
[in] | b | second input |
int rc_poly_butter | ( | int | N, |
double | wc, | ||
rc_vector_t * | b | ||
) |
Calculates coefficients for continuous-time Butterworth polynomial of order N and cutoff wc (rad/s) and places them in vector b.
[in] | N | Order of the polynomial |
[in] | wc | cutoff frequency in rad/s |
[out] | b | resulting coefficients |
int rc_poly_conv | ( | rc_vector_t | a, |
rc_vector_t | b, | ||
rc_vector_t * | c | ||
) |
Convolutes the polynomials a&b and places the result in vector c.
This finds the coefficients of the polynomials resulting from multiply a*b. The original contents of c are freed and new memory is allocated if necessary.
[in] | a | First set of coefficients |
[in] | b | Second set of coefficients |
[out] | c | Vector to output resulting coefficients |
int rc_poly_differentiate | ( | rc_vector_t | a, |
int | d, | ||
rc_vector_t * | b | ||
) |
Calculates the dth derivative of the polynomial a and places the result in vector b.
[in] | a | Input polynomial coefficients |
[in] | d | which derivative to take (>=0) |
[out] | b | result |
int rc_poly_divide | ( | rc_vector_t | n, |
rc_vector_t | d, | ||
rc_vector_t * | div, | ||
rc_vector_t * | rem | ||
) |
Divides denominator d into numerator n. The remainder is placed into vector rem and the divisor is placed into vector div.
[in] | n | numerator |
[in] | d | denominator |
div | The resulting divisor | |
rem | The resulting remainder |
int rc_poly_power | ( | rc_vector_t | a, |
int | n, | ||
rc_vector_t * | b | ||
) |
Raises a polynomial a to itself n times where n is greater than or equal to 0.
Places the result in vector b, any existing memory allocated for b is freed and its contents are lost. Returns 0 on success and -1 on failure.
[in] | a | Initial coefficients |
[in] | n | Power, must be >=0 |
[out] | b | resulting coefficients |
int rc_poly_print | ( | rc_vector_t | v | ) |
Prints a polynomial in human-readable format in one line.
Like rc_print_vector, but assumes the contents represent a polynomial and prints the coefficients with trailing powers of x for easier reading. This relies on your terminal supporting unicode UTF-8. numer of coefficients and there the length of vector v must be less than or equal to 10.
[in] | v | polynomial coefficients to be printed |
Prints a polynomial in human-readable format in one line.
We represent polynomials as a vector of coefficients with the highest power term on the left at vector index 0. The following polynomial manipulation functions are designed to behave like their counterparts in the Numerical Renaissance codebase.
int rc_poly_subtract | ( | rc_vector_t | a, |
rc_vector_t | b, | ||
rc_vector_t * | c | ||
) |
Subtracts two polynomials a-b with right justification and places the result in c.
Any existing memory allocated for c is freed and its contents are lost. Returns 0 on success and -1 on failure.
[in] | a | First input |
[in] | b | second input |
[out] | c | output |
int rc_poly_subtract_inplace | ( | rc_vector_t * | a, |
rc_vector_t | b | ||
) |
Subtracts b from a with right justification.
a stays in place and new memory is allocated only if b is longer than a.
a | First input and where output is written | |
[in] | b | second input |