PIPS
|
#include <stdio.h>
#include <boolean.h>
#include "arithmetique.h"
#include "vecteur.h"
#include "polynome.h"
Go to the source code of this file.
Functions | |
void | polynome_negate (Ppolynome *ppp) |
void polynome_negate(Ppolynome *ppp); changes sign of polynomial *ppp. More... | |
Ppolynome | polynome_opposed (Ppolynome pp) |
Ppolynome polynome_opposed(Ppolynome pp); changes sign of polynomial pp. More... | |
Ppolynome | polynome_sum_of_power (Ppolynome ppsup, int p) |
Ppolynome polynome_sum_of_power(Ppolynome ppsup, int p) calculates the sum of i^p for i=1 to (ppsup), returns the polynomial sigma{i=1, ppsup} (i^p). More... | |
Ppolynome | polynome_sigma (Ppolynome pp, Variable var, Ppolynome ppinf, Ppolynome ppsup) |
Ppolynome polynome_sigma(Ppolynome pp, Variable var, Ppolynome ppinf, ppsup) returns the sum of pp when its variable var is moving from ppinf to ppsup. More... | |
Ppolynome | polynome_sort (Ppolynome *ppp, int *is_inferior_var) |
Ppolynome polynome_sort((Ppolynome *) ppp, bool (*is_inferior_var)()) Sorts the polynomial *ppp: monomials are sorted by the private routine "is_inferior_monome" based on the user one "is_inferior_var". More... | |
void | polynome_chg_var (Ppolynome *ppp, Variable v_old, Variable v_new) |
void polynome_chg_var(Ppolynome *ppp, Variable v_old, Variable v_new) replace the variable v_old by v_new More... | |
void polynome_chg_var(Ppolynome *ppp, Variable v_old, Variable v_new) replace the variable v_old by v_new
Should it be comparated against MONOME_NUL (that is different of 0) instead?
ppp | pp |
v_old | _old |
v_new | _new |
Definition at line 264 of file pnome-unaires.c.
References monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, and vect_chg_var().
void polynome_negate | ( | Ppolynome * | ppp | ) |
void polynome_negate(Ppolynome *ppp); changes sign of polynomial *ppp.
!usage: polynome_negate(&pp);
ppp | pp |
Definition at line 45 of file pnome-unaires.c.
References monome_coeff, polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, and POLYNOME_UNDEFINED_P.
Referenced by do_computation_intensity(), expression_to_polynome(), make_causal_external(), make_causal_internal(), plc_make_distance(), polynome_roots(), and polynome_sigma().
Ppolynome polynome_opposed(Ppolynome pp); changes sign of polynomial pp.
!usage: pp = polynome_negate(pp);
pp | p |
Definition at line 59 of file pnome-unaires.c.
References monome_coeff, polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, and POLYNOME_UNDEFINED_P.
Referenced by complexity_sub().
Ppolynome polynome_sigma(Ppolynome pp, Variable var, Ppolynome ppinf, ppsup) returns the sum of pp when its variable var is moving from ppinf to ppsup.
Neither ppinf nor ppsup must contain variable var.
compute: sum(ppinf,ppsup) ppfact * x ^ i as: ppfact * ( sum(1, ppsup) x ^ i - sum(1, ppinf) x ^ i + ppfin ^ i ) where: ppfact is the term associated to x ^ i in pp
Note that this decomposition is correct wrt standard mathematical notations if and only if: ppsup >= ppinf >= 1 although the correct answer can be obtained when ppsup >= ppinf
Thus: sum(1, ppsup) x ^ i is extended for ppsup < 1 and defined as:
LZ: if ppinf == 1: no need to compute next sigma (pptemp), nor ppinf^i (FI: apparently not implemented)
ppacc = sigma{1,ppsup} - sigma{1,ppinf}
ppacc == (sigma{k=1,ppsup} k^i) - (sigma{k=1,ppinf} k^i)
pp | p |
var | ar |
ppinf | pinf |
ppsup | psup |
Definition at line 160 of file pnome-unaires.c.
References polynome_add(), polynome_degree(), polynome_factorize(), polynome_mult(), polynome_negate(), POLYNOME_NUL, POLYNOME_NUL_P, polynome_power_n(), polynome_rm(), polynome_sum_of_power(), POLYNOME_UNDEFINED, and POLYNOME_UNDEFINED_P.
Referenced by complexity_sigma().
Ppolynome polynome_sort((Ppolynome *) ppp, bool (*is_inferior_var)()) Sorts the polynomial *ppp: monomials are sorted by the private routine "is_inferior_monome" based on the user one "is_inferior_var".
!usage: polynome_sort(&pp, is_inferior_var);
pv = vect_tri(pv, is_inferior_var);
Definition at line 229 of file pnome-unaires.c.
References is_inferior_monome(), is_inferior_var(), monome_term, polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, POLYNOME_UNDEFINED_P, vect_compare(), and vect_sort().
Referenced by polynome_equal(), and polynome_sprint().
Ppolynome polynome_sum_of_power(Ppolynome ppsup, int p) calculates the sum of i^p for i=1 to (ppsup), returns the polynomial sigma{i=1, ppsup} (i^p).
It does the job well until p=13; after, it goes wrong (the Bernouilli numbers are computed until p=12)
if the upper bound is constant ...
FI: That means, no iteration is executed whatsoever, isn't it?
Also, polynome_error() does stop the execution and we are in trouble for Linear/C3 Library. We should init some exit function towards pips_internal_error().
lse if (cste==1) ppresult = POLYNOME_NUL;
if the upper bound is a non-constant polynomial ...
(ppsup^(p+1)) / (p+1)
1/2 * ppsup^p
computes factors p(p-1).../(2i!) incrementally
the current term of the remaining of the sum is:
Ti = (1/(2i)!)*(Bi*p*(p-1)* . *(p-2*i+2)*ppsup^(p-2*i+1))
ppsup | psup |
Definition at line 79 of file pnome-unaires.c.
References Bernouilli(), intpower(), make_polynome(), polynome_add(), polynome_constant_p(), polynome_dup(), polynome_error(), POLYNOME_NUL, polynome_power_n(), polynome_rm(), polynome_scalar_mult(), polynome_TCST(), POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, TCST, and VALUE_ONE.
Referenced by polynome_sigma().