a

Dependencies:   mbed mbed-rtos

Committer:
alexpirciu
Date:
Thu Mar 28 07:44:42 2019 +0000
Revision:
1:ceee5a608e7c
assa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alexpirciu 1:ceee5a608e7c 1
alexpirciu 1:ceee5a608e7c 2 namespace math{
alexpirciu 1:ceee5a608e7c 3
alexpirciu 1:ceee5a608e7c 4 /**
alexpirciu 1:ceee5a608e7c 5 * @brief Construct a new Polynomial Function< T, N>:: Polynomial Function object
alexpirciu 1:ceee5a608e7c 6 *
alexpirciu 1:ceee5a608e7c 7 */
alexpirciu 1:ceee5a608e7c 8 template<class T,int32_t N>
alexpirciu 1:ceee5a608e7c 9 PolynomialFunction<T,N>::PolynomialFunction()
alexpirciu 1:ceee5a608e7c 10 {
alexpirciu 1:ceee5a608e7c 11 for(int i=0;i<=N;++i){
alexpirciu 1:ceee5a608e7c 12 this->coefficients[i]=static_cast<T>(0);
alexpirciu 1:ceee5a608e7c 13 }
alexpirciu 1:ceee5a608e7c 14 }
alexpirciu 1:ceee5a608e7c 15
alexpirciu 1:ceee5a608e7c 16 /**
alexpirciu 1:ceee5a608e7c 17 * @brief Construct a new Polynomial Function< T, N>:: Polynomial Function object
alexpirciu 1:ceee5a608e7c 18 *
alexpirciu 1:ceee5a608e7c 19 * @param coefficients The list of the coefficients for the polynomial function.
alexpirciu 1:ceee5a608e7c 20 */
alexpirciu 1:ceee5a608e7c 21 template<class T,int32_t N>
alexpirciu 1:ceee5a608e7c 22 PolynomialFunction<T,N>::PolynomialFunction(T coefficients[N+1])
alexpirciu 1:ceee5a608e7c 23 {
alexpirciu 1:ceee5a608e7c 24 for(int i=0;i<=N;++i){
alexpirciu 1:ceee5a608e7c 25 this->coefficients[i]=coefficients[i];
alexpirciu 1:ceee5a608e7c 26 }
alexpirciu 1:ceee5a608e7c 27 }
alexpirciu 1:ceee5a608e7c 28
alexpirciu 1:ceee5a608e7c 29 /**
alexpirciu 1:ceee5a608e7c 30 * @brief Destroy the Polynomial Function< T, N>:: Polynomial Function object
alexpirciu 1:ceee5a608e7c 31 *
alexpirciu 1:ceee5a608e7c 32 */
alexpirciu 1:ceee5a608e7c 33 template<class T,int32_t N>
alexpirciu 1:ceee5a608e7c 34 PolynomialFunction<T,N>::~PolynomialFunction()
alexpirciu 1:ceee5a608e7c 35 {
alexpirciu 1:ceee5a608e7c 36 }
alexpirciu 1:ceee5a608e7c 37
alexpirciu 1:ceee5a608e7c 38 /**
alexpirciu 1:ceee5a608e7c 39 * @brief Get the degree of the polynomial function
alexpirciu 1:ceee5a608e7c 40 *
alexpirciu 1:ceee5a608e7c 41 * @return The degree of the polynom
alexpirciu 1:ceee5a608e7c 42 */
alexpirciu 1:ceee5a608e7c 43 template<class T,int32_t N>
alexpirciu 1:ceee5a608e7c 44 int32_t PolynomialFunction<T,N>::getDegree()
alexpirciu 1:ceee5a608e7c 45 {
alexpirciu 1:ceee5a608e7c 46 return N;
alexpirciu 1:ceee5a608e7c 47 }
alexpirciu 1:ceee5a608e7c 48
alexpirciu 1:ceee5a608e7c 49 /**
alexpirciu 1:ceee5a608e7c 50 * @brief Get coefficient value
alexpirciu 1:ceee5a608e7c 51 *
alexpirciu 1:ceee5a608e7c 52 * @param index The index of the coefficient
alexpirciu 1:ceee5a608e7c 53 * @return The value of the coefficient
alexpirciu 1:ceee5a608e7c 54 */
alexpirciu 1:ceee5a608e7c 55 template<class T,int32_t N>
alexpirciu 1:ceee5a608e7c 56 T PolynomialFunction<T,N>::getCoefficientValue(int32_t index)
alexpirciu 1:ceee5a608e7c 57 {
alexpirciu 1:ceee5a608e7c 58 if(index>N || index<0) return static_cast<T>(0);
alexpirciu 1:ceee5a608e7c 59 return this->coefficients[index];
alexpirciu 1:ceee5a608e7c 60 }
alexpirciu 1:ceee5a608e7c 61
alexpirciu 1:ceee5a608e7c 62 /**
alexpirciu 1:ceee5a608e7c 63 * @brief Set the value of the coefficient
alexpirciu 1:ceee5a608e7c 64 *
alexpirciu 1:ceee5a608e7c 65 * @param index The index of the coefficient
alexpirciu 1:ceee5a608e7c 66 * @param value The new value of the coefficient
alexpirciu 1:ceee5a608e7c 67 */
alexpirciu 1:ceee5a608e7c 68 template<class T,int32_t N>
alexpirciu 1:ceee5a608e7c 69 void PolynomialFunction<T,N>::setCoefficientValue(int32_t index, T value ){
alexpirciu 1:ceee5a608e7c 70 if(index<=N){
alexpirciu 1:ceee5a608e7c 71 this->coefficients[index]=value;
alexpirciu 1:ceee5a608e7c 72 }
alexpirciu 1:ceee5a608e7c 73 }
alexpirciu 1:ceee5a608e7c 74
alexpirciu 1:ceee5a608e7c 75 /**
alexpirciu 1:ceee5a608e7c 76 * @brief It sums the polynom with the input polynom and return a result in the new polynom.
alexpirciu 1:ceee5a608e7c 77 *
alexpirciu 1:ceee5a608e7c 78 * @param b The input polynom.
alexpirciu 1:ceee5a608e7c 79 * @return The result polynom.
alexpirciu 1:ceee5a608e7c 80 */
alexpirciu 1:ceee5a608e7c 81 template<class T,int32_t N>
alexpirciu 1:ceee5a608e7c 82 template<int32_t N2>
alexpirciu 1:ceee5a608e7c 83 math::PolynomialFunction<T,(N2<N?N:N2)> PolynomialFunction<T,N>::add(PolynomialFunction<T,N2> b){
alexpirciu 1:ceee5a608e7c 84 math::PolynomialFunction<T,N2<N?N:N2> p;
alexpirciu 1:ceee5a608e7c 85 for(int i=0;i<=N2 || i<=N;++i){
alexpirciu 1:ceee5a608e7c 86 p.setCoefficientValue(i,this->getCoefficientValue(i)+b.getCoefficientValue(i));
alexpirciu 1:ceee5a608e7c 87 }
alexpirciu 1:ceee5a608e7c 88 return p;
alexpirciu 1:ceee5a608e7c 89 }
alexpirciu 1:ceee5a608e7c 90
alexpirciu 1:ceee5a608e7c 91
alexpirciu 1:ceee5a608e7c 92 template<class T,int32_t N>
alexpirciu 1:ceee5a608e7c 93 template<int32_t N2>
alexpirciu 1:ceee5a608e7c 94 /**
alexpirciu 1:ceee5a608e7c 95 * @brief It multiply the polynom with the given polynom and return the result polynom.
alexpirciu 1:ceee5a608e7c 96 *
alexpirciu 1:ceee5a608e7c 97 * @param b The input polynom
alexpirciu 1:ceee5a608e7c 98 * @return The result polynom
alexpirciu 1:ceee5a608e7c 99 */
alexpirciu 1:ceee5a608e7c 100 math::PolynomialFunction<T,(N2+N)> PolynomialFunction<T,N>::multip(PolynomialFunction<T,N2> b){
alexpirciu 1:ceee5a608e7c 101 math::PolynomialFunction<T,(N2+N)> result;
alexpirciu 1:ceee5a608e7c 102 for(int32_t i=0;i<=N2+N;++i){
alexpirciu 1:ceee5a608e7c 103 T sum=static_cast<T>(0);
alexpirciu 1:ceee5a608e7c 104 for(int32_t j=0;j<=i;++j){
alexpirciu 1:ceee5a608e7c 105 sum+=this->getCoefficientValue(j)*b.getCoefficientValue(i-j);
alexpirciu 1:ceee5a608e7c 106 }
alexpirciu 1:ceee5a608e7c 107 result.setCoefficientValue(i,sum);
alexpirciu 1:ceee5a608e7c 108 }
alexpirciu 1:ceee5a608e7c 109
alexpirciu 1:ceee5a608e7c 110 return result;
alexpirciu 1:ceee5a608e7c 111 }
alexpirciu 1:ceee5a608e7c 112
alexpirciu 1:ceee5a608e7c 113 template<class T,int32_t N>
alexpirciu 1:ceee5a608e7c 114 /**
alexpirciu 1:ceee5a608e7c 115 * @brief Calculate the polynom value
alexpirciu 1:ceee5a608e7c 116 *
alexpirciu 1:ceee5a608e7c 117 * @param input_value The given value
alexpirciu 1:ceee5a608e7c 118 * @return The result value of the polynom.
alexpirciu 1:ceee5a608e7c 119 */
alexpirciu 1:ceee5a608e7c 120 T PolynomialFunction<T,N>::calculateValue(T input_value){
alexpirciu 1:ceee5a608e7c 121 T output_value=static_cast<T>(0);
alexpirciu 1:ceee5a608e7c 122 for(int32_t i=0;i<=N;++i){
alexpirciu 1:ceee5a608e7c 123 output_value+=this->coefficients[i]*static_cast<T>(pow(input_value,i));
alexpirciu 1:ceee5a608e7c 124 }
alexpirciu 1:ceee5a608e7c 125 // std::cout<<"OOO"<<output_value<<std::endl;
alexpirciu 1:ceee5a608e7c 126 return output_value;
alexpirciu 1:ceee5a608e7c 127 }
alexpirciu 1:ceee5a608e7c 128
alexpirciu 1:ceee5a608e7c 129 template<class T, int32_t N>
alexpirciu 1:ceee5a608e7c 130 /**
alexpirciu 1:ceee5a608e7c 131 * @brief It calcutes the first derivate of the polinom and return it by creating a new polynomial function object.
alexpirciu 1:ceee5a608e7c 132 *
alexpirciu 1:ceee5a608e7c 133 * @return The result polynom.
alexpirciu 1:ceee5a608e7c 134 */
alexpirciu 1:ceee5a608e7c 135 math::PolynomialFunction<T,N-1> PolynomialFunction<T,N>::derivateFO(){
alexpirciu 1:ceee5a608e7c 136 math::PolynomialFunction<T,N-1> derivate;
alexpirciu 1:ceee5a608e7c 137 for(int32_t i=0;i<N;++i){
alexpirciu 1:ceee5a608e7c 138 T coeff=static_cast<T>(i+1);
alexpirciu 1:ceee5a608e7c 139 derivate.setCoefficientValue(i,coeff*this->getCoefficientValue(i+1));
alexpirciu 1:ceee5a608e7c 140 }
alexpirciu 1:ceee5a608e7c 141 return derivate;
alexpirciu 1:ceee5a608e7c 142 };
alexpirciu 1:ceee5a608e7c 143
alexpirciu 1:ceee5a608e7c 144 };