6663b6c9
adorian
projet complet av...
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
// -*- mode:C++ ; compile-command: "g++-3.4 -I.. -g -c series.cc" -*-
/*
* Copyright (C) 2000,2014 B. Parisse, Institut Fourier, 38402 St Martin d'Heres
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _GIAC_SERIES_H
#define _GIAC_SERIES_H
#include "first.h"
/* User representation of series expansion:
- the power series expansion as a symbolic + O(the remainder)
Inner representation:
- an expansion (generalized) variable h
- a sparse_poly1
*/
#include "gen.h"
#include "identificateur.h"
#ifndef NO_NAMESPACE_GIAC
namespace giac {
#endif // ndef NO_NAMESPACE_GIAC
bool is_analytic(const gen & g);
bool taylor(const gen & f_x,const gen & x,const gen & lim_point,int ordre,vecteur & v,GIAC_CONTEXT);
// The remainder term in sparse_poly1 is the term defined with coeff==undef
// This term must be the last term in the std::vector<monome>
gen porder(const sparse_poly1 & a); // return plus_inf if a is exact
sparse_poly1 vecteur2sparse_poly1(const vecteur & v);
bool ptruncate(sparse_poly1 & p,const gen & ordre,GIAC_CONTEXT);
bool series(const sparse_poly1 & s,const unary_function_ptr & u,int direction,sparse_poly1 & res,GIAC_CONTEXT); // example series(s,at_sin,0,res,contextptr);
sparse_poly1 series(const sparse_poly1 & s,const unary_function_ptr & u,int direction,GIAC_CONTEXT); // example series(s,at_sin,0,res,contextptr);
gen spol12gen(const sparse_poly1 & p,GIAC_CONTEXT);
gen sparse_poly12gen(const sparse_poly1 & p,const gen & x,gen & remains,bool with_order_size);
sparse_poly1 vecteur2sparse_poly1(const vecteur & v);
void vecteur2sparse_poly1(const vecteur & v,sparse_poly1 & p);
bool sparse_poly12vecteur(const sparse_poly1 & p,vecteur & v,int & shift);
sparse_poly1 gen2spol1(const gen &g);
bool padd(const sparse_poly1 & a,const sparse_poly1 &b, sparse_poly1 & res,GIAC_CONTEXT);
sparse_poly1 spadd(const sparse_poly1 & a,const sparse_poly1 &b,GIAC_CONTEXT);
sparse_poly1 spsub(const sparse_poly1 & a,const sparse_poly1 &b,GIAC_CONTEXT);
bool pmul(const sparse_poly1 & a,const gen & b, sparse_poly1 & res,GIAC_CONTEXT);
bool pmul(const gen & b, const sparse_poly1 & a,sparse_poly1 & res,GIAC_CONTEXT);
bool pmul(const sparse_poly1 & a,const sparse_poly1 &b, sparse_poly1 & res,bool n_truncate,const gen & n_valuation,GIAC_CONTEXT);
sparse_poly1 spmul(const sparse_poly1 & a,const sparse_poly1 &b,GIAC_CONTEXT);
sparse_poly1 spmul(const gen & a,const sparse_poly1 &b,GIAC_CONTEXT);
sparse_poly1 spmul(const sparse_poly1 & a,const gen &b,GIAC_CONTEXT);
bool pneg(const sparse_poly1 & a,sparse_poly1 & res,GIAC_CONTEXT);
sparse_poly1 spneg(const sparse_poly1 & a,GIAC_CONTEXT);
bool pshift(const sparse_poly1 & a,const gen & b, sparse_poly1 & res,GIAC_CONTEXT);
bool pdiv(const sparse_poly1 & a,const sparse_poly1 &b, sparse_poly1 & res,int ordre,GIAC_CONTEXT);
bool pdiv(const sparse_poly1 & a,const gen & b, sparse_poly1 & res,GIAC_CONTEXT);
sparse_poly1 spdiv(const sparse_poly1 & a,const sparse_poly1 &b,GIAC_CONTEXT);
sparse_poly1 spdiv(const sparse_poly1 & a,const gen &b,GIAC_CONTEXT);
bool ppow(const sparse_poly1 & base,int m,int ordre,sparse_poly1 & res,GIAC_CONTEXT); // m>=0
bool ppow(const sparse_poly1 & base,const gen & e,int ordre,int direction,sparse_poly1 & res,GIAC_CONTEXT);
sparse_poly1 sppow(const sparse_poly1 & a,const gen &b,GIAC_CONTEXT);
bool pcompose(const vecteur & v,const sparse_poly1 & p, sparse_poly1 & res,GIAC_CONTEXT);
void lcmdeno(vecteur &v,gen & e,GIAC_CONTEXT);
void lcmdeno_converted(vecteur &v,gen & e,GIAC_CONTEXT);
void lcmdeno(sparse_poly1 &v,gen & e,GIAC_CONTEXT);
bool pintegrate(sparse_poly1 & p,const gen & t,GIAC_CONTEXT);
bool prevert(const sparse_poly1 & p_orig,sparse_poly1 & q,GIAC_CONTEXT);
bool pnormal(sparse_poly1 & v,GIAC_CONTEXT);
struct unary_function_ptr;
// main series expansion C++ entry point
gen series(const gen & e,const identificateur & x,const gen & lim_point,int ordre,int direction,GIAC_CONTEXT);
// other series entry points, used for interactive input
gen series(const gen & e,const gen & vars,const gen & lim_point,int ordre,int direction,GIAC_CONTEXT);
gen series(const gen & e,const gen & vars,const gen & lim_point,const gen &ordre,GIAC_CONTEXT);
gen _series(const gen & args,GIAC_CONTEXT);
extern const unary_function_ptr * const at_series ;
gen _revert(const gen & args,GIAC_CONTEXT);
gen _bounded_function(const gen & args,GIAC_CONTEXT);
gen bounded_function(GIAC_CONTEXT);
bool contains(const gen & e,const gen & elem);
bool contains(const vecteur & v,const gen & elem);
vecteur lvarx(const gen &e,const gen & x,bool test=false);
void rlvarx(const gen &e,const gen & x,vecteur & res);
vecteur rlvarx(const gen &e,const gen & x);
bool intersect(const vecteur & a,const vecteur &b,int & pos_a,int & pos_b);
// void mrv(const gen & e,const identificateur & x,vecteur & faster_var,vecteur & coeff_ln, vecteur & slower_var,GIAC_CONTEXT){
// void mrv_lead_term(const gen & e,const identificateur & x,gen & coeff, gen & mrv_var, gen & exponent,sparse_poly1 & q,int begin_ordre,GIAC_CONTEXT);
gen limit_symbolic_preprocess(const gen & e0,const identificateur & x,const gen & lim_point,int direction,GIAC_CONTEXT);
gen limit(const gen & e,const identificateur & x,const gen & lim_point,int direction,GIAC_CONTEXT);
gen _limit(const gen & args,GIAC_CONTEXT);
extern const unary_function_ptr * const at_limit ;
gen _bounded_function(const gen & args,GIAC_CONTEXT);
gen bounded_function(GIAC_CONTEXT);
extern const unary_function_ptr * const at_bounded_function ;
// internal function, used to replace sum for limit/series
// args = expression, antiderivative, variable, lower_bound, upper_bound
gen _euler_mac_laurin(const gen & args,GIAC_CONTEXT);
extern const unary_function_ptr * const at_euler_mac_laurin ;
bool convert_to_euler_mac_laurin(const gen & g,const identificateur &n,gen & res,GIAC_CONTEXT);
// expansion of e at x=lim_point, order ordre, direction 0/1/-1
// answer is in s
bool series__SPOL1(const gen & e,const identificateur & x,const gen & lim_point,int ordre,int direction,sparse_poly1 & s,GIAC_CONTEXT);
sparse_poly1 series__SPOL1(const gen & e,const identificateur & x,const gen & lim_point,int ordre,int direction,GIAC_CONTEXT);
#ifndef NO_NAMESPACE_GIAC
} // namespace giac
#endif // ndef NO_NAMESPACE_GIAC
#endif // _GIAC_SERIES_H
|